获取到用户的经度纬度,然后把经度纬度换成地址上的、周围的地理信息就可以了。
1、先打开我们的微信,然后点击发现,之后点击小程序;
2、然后点击一个小程序;
3、之后点击右上角的那个按钮,然后点击最后一个选项;
4、之后点击右上角的按钮;
5、然后点击设置;
6、之后将位置信息的开关向右滑动;
7、然后点击弹窗中的解除授权;
前面发文说过自己动手编制手机程序,用于控制WIFI开关,手机读取传感器温湿度,今天说一下我自己家里面用的智能家居系统。
对智能家居系统的要求:您可能说,我用的米家,小米的温湿度传感器,小米家的插座,还有小米家的门窗传感器,用米家音响控制得很好。
小王说,我用易微联的,手机就能远程查看和监控。
小李说,我用的涂鸦产品。。。。
ok,市面上有各种品牌,大品牌小品牌。同样,市场上有各种产品,从开关,到温湿度,到门磁,到窗帘。。。。。。您家里可能用米家的插座,也可能用易微联的窗帘,这个时候,问题来了,您需要手机里安装几个App,查看或者操作时候必然手忙脚乱。
这些都是我不喜欢的地方。
因此,我需要有一个系统,能把各家的不同产品统一到一起。
目前国内还没有这样的系统,各个厂家都是跑马圈地,抢市场抢份额,哪有功夫费力不讨好地搞整合。
因此,类似我这样的爱好者,众里寻他千百度地找。目前常用的有 Home Assistant, IoBroker。。。。,我自己更喜欢第一个。还有别的,我看过,没有深入了解。
上面说的,实际上是软件这部分,我称之为智能家居系统,
下面的图片是这个系统电脑端的界面:
电脑显示的界面
下面的图片是这个系统手机端的界面,
智能家居系统,是个类似windows一样的软件包,您家里有钱又不怕费电,那就把它装在电脑里吧。
我自己建议用软路由,或者树莓派(TF卡改成固态硬盘,绝配)。
2.硬件的构成
前面提到了,您可以使用市面上各个品牌的不同产品。
之所以选用home Assistant,是因为它具有强大的统合能力,再加上一些爱好者开发的插件,目前绝大部分市面上的产品都可以整合到里面进行展示和控制。
当然,对于我这样的 Loser(失败的人),品牌货太贵,我只能自己动手自己制作。
温度检测传感器:
使用ESP01S或者ESP8266, 配上DS18B20,是个很好的选择。 我界面里有个燃气灶出水回水温度的检测,以及家里面太阳能水温的检测,就是这制作的,一个DS18B20几块钱,一个ESP01S也不到10元。配个手机充电头,完美!
鱼缸水温检测也可以啊!
插座开关类:
使用ESP8266或者ESP01S,通过杜邦线连接到继电器模块上就可以实现。
门磁:
同上
重点的重点,所有ESP模块都需要刷写固件,网上有各种教程,大部分教人使用Arduino,写入代码,生成BIN。我是各种摸爬滚打后,发现不用这样折腾,国外有成熟的固件,像孙悟空一样适用各类设备,只要在界面中设置一下就行
3.如何实现硬件配网?
我曾在这件事情上花过大量时间,自己照猫画虎写一些代码, 但是,很麻烦,总不能家里改了网络名称后,还重新编译一次程序,重写刷写一次固件吧。
所以, 前面提到的那个固件,也是内置好了联网程序,不用用户自己写任何代码。
(之所以不写出来, 是因为我也想增粉,您加我后,我给您邮件过去吧,中文版的。)
4.如何实现自动化?
我农村老家的院墙上有灯, 我只想让它们过年那几天从晚上7点亮起来,早晨7点自动关闭。
我家院门每天晚上8点锁门,早晨6点开锁。
夜里12点以后,门磁检测到人体后,自动报警
冬季,窗帘在太阳落山半小时后自动关闭,日出半小时后自动打开。。。。。
这些怎么实现?
Home Assistant可以加入Node Red 模块, 您不用找来找去了,就是这个IBM开发的软件,不二之选,这是过来人的结论。
5.如何在外面也能像在家里一样?
我们都知道,个人用户已经很难有公网IP了, 所以,要想在外面访问家里,只能用技术手段。
简单点的, 用 ZeroTier, 一劳永逸的,用FRP, NPS之类。
(这里不讨论怎么折腾VPN)
6.其它
- 母亲80多岁了, 不识字,不带手机, 我这里用微信说话,家里的小爱音箱就能广播。
- 各个摄像头也加进来。
总之,系统可玩性很高。
总结:
这篇文章纯粹是入门篇、是个人折腾下来的一个总结,您如果是新手,参考一下,可以少走些弯路,毕竟像我一样从头摸爬滚打,浪费了很多时间和金钱,不值得。
当然,高手路过吧,我毕竟不是专业搞智能家居的。
在现代社会,安全是人们生活和工作中最关注的问题之一。为了保护财产和人员安全,各种门禁系统应运而生。RFID(Radio Frequency Identification)技术作为一种非接触式识别技术,被广泛应用于门禁系统中,为用户提供了方便快捷的进出门禁通行。
本文将介绍如何通过使用STM32单片机来设计一个RFID门禁应用。首先,我们将简要介绍RFID技术的原理和特点。然后,我们将详细讨论STM32单片机的选择和使用。最后,我们将探讨如何设计和实现一个基于STM32的RFID门禁系统。
一、RFID技术的原理和特点RFID技术是一种利用射频信号进行数据传输和识别的技术。它由两部分组成:RFID读写器和RFID标签。读写器通过发射射频信号,激活标签,并接收标签返回的信息。标签中包含有关对象的信息,如身份、权限等。RFID技术具有以下特点:
1. 非接触式识别:与传统的磁卡门禁相比,RFID门禁不需要将标签与读写器接触,只需靠近读写器即可实现识别,更加方便快捷。
2. 多标签识别:RFID技术支持同时识别多个标签,提高了门禁系统的工作效率。
3. 高安全性:RFID门禁标签可以根据需要设置不同的权限,确保只有具备合法身份的人员才能通过门禁系统。
二、STM32单片机的选择和使用STM32是一种基于ARM Cortex-M内核的32位单片机系列,它具有高性能、低功耗和丰富的接口资源,非常适合用于嵌入式应用开发。在设计RFID门禁应用时,选择适合的STM32单片机是至关重要的。
在选择STM32单片机时,需要考虑以下因素:
1. 性能和存储容量:根据实际需求选择适当的性能和存储容量。如果门禁系统需要处理大量数据或具有较高的实时性要求,需要选择高性能的STM32单片机。
2. 通信接口和GPIO:门禁系统通常需要与其他设备进行通信,如显示屏、网络接口等。因此,需要确保STM32单片机具有足够的通信接口和GPIO。
3. 电源管理和功耗:门禁系统通常需要长时间运行,因此需要选择具有优秀的电源管理和低功耗特性的STM32单片机。
在使用STM32单片机时,需要完成以下任务:
1. 硬件设计:根据门禁系统的需求设计外围电路,包括RFID模块、电源管理、通信接口等。
2. 软件开发:使用相关的开发工具和编程语言,编写STM32单片机的固件程序。固件程序主要包括读取RFID标签的数据、控制门禁的开关等功能。
3. 系统集成和调试:将硬件和软件进行集成,并进行测试和调试,确保系统正常工作。
三、设计和实现基于STM32的RFID门禁系统设计和实现基于STM32的RFID门禁系统需要完成以下步骤:
1. 硬件设计与制作:根据门禁系统的需求,设计并制作电路板,包括STM32单片机、RFID模块、开关、指示灯等组件。确保硬件设计符合电气原理和安全要求。
2. 软件开发与调试:利用STM32相关的开发工具和编程语言,编写门禁系统的固件程序。固件程序需要完成RFID标签的读取、权限验证、门禁控制等功能。然后对固件程序进行调试,确保系统的稳定性和可靠性。
3. 功能测试与集成:将硬件和软件进行集成,进行功能测试。测试包括RFID标签的读取是否正确、权限验证是否准确、门禁的开关是否正常等。同时,确保系统与其他设备的通信正常。
4. 系统优化与部署:根据实际使用情况,对系统进行优化和调整,确保门禁系统的稳定性和性能。最后,系统部署到目标地点并进行验收。
通过合理选择STM32单片机、进行硬件和软件的设计与开发,我们可以搭建一个高效、安全的RFID门禁系统。该系统应用广泛,可用于学校、企业、住宅等各种场所,提供便捷、安全的门禁通行服务。
最后欢迎加入我们的嵌入式学习群!作为这个群的一员,你将有机会与嵌入式系统领域的专业人士和爱好者们交流、分享经验和学习资源。群内涵盖了各种嵌入式系统的应用和开发,无论你是初学者还是经验丰富的专业人士,都能在这里找到志同道合的伙伴和有益的互动。无论你是对物联网、智能家居、工业自动化等领域感兴趣,还是希望分享你自己的项目和经验,我们的群都会为你提供一个广阔的交流平台。
更多学习资源在这里:扫码进群领资料
一、blinker物联网平台简介
blinker是一套跨硬件、跨平台的物联网解决方案,提供APP端、设备端、服务器端支持,使用公有云服务进行数据传输存储。可用于智能家居、数据监测等领域,可以帮助用户更好更快地搭建物联网项目。
(1)特性
由服务器端、APP端、设备端组成,可以部署到几乎所有物联网平台APP端支持ios、android设备端可以使用蓝牙、WiFi、MQTT等方式接入,支持Arduino、freeRTOS、mbed OS、Linux等开发平台服务器端可以部署到阿里云、腾讯云、OneNET、百度云、AWS、google cloud等平台通过界面布局器,DIY用户可自己拖拽布局设备控制界面,自由打造你的物联网设备通过专属SDK,认证用户可以使用blinker开发自己的产品,并用于商业用途(2)应用场景
快速开发物联网 / 智能家居 / 无线遥控项目手机 / 语音助手 控制设备蓝牙BLE/ 局域网WiFi / 远程MQTT 接入设备二、ESP8266智能硬件简介
ESP8266是低成本、高集成度的WIFI芯片,可以用于智能家居、智能玩具等多种场景。
(1)特性
性能稳定高集成度低功耗32位处理器,性能优越(2)使用场景
智能家居,如智能开关等智能玩具,如WiFi遥控车等三、电路连接
该智能开关以ESP-01S WIFI模块为设备端,控制继电器模块的闭合,从而完成对开关的控制。其硬件电路如下:
ESP-01S与继电器模块
四、界面配置
APP端界面配置
五、代码编写
#include <Blinker.h>// 启用WIFI接入,并可通过小爱同学控制#define BLINKER_WIFI#define BLINKER_MIOT_LIGHT// 定义继电器控制端口#define GPIO0 0// Blinker认证及WIFI信息char auth[] = "xxxxxxxxxxxxx"; // 从APP创建设备时生成的秘钥char ssid[] = "xxxxxxxxxxxxx"; // WIFI名称char pswd[] = "xxxxxxxxxxxxx"; // WIFI密码// 新建开关组件对象BlinkerButton Button1("btn-s82");// 定义灯的状态和模式bool lightState = false;uint8_t lightMode = BLINKER_CMD_MIOT_DAY;// 电源控制回调函数void miotPowerState(const String & state) { BLINKER_LOG("need set power state: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(LED_BUILTIN, LOW); digitalWrite(GPIO0, LOW); BlinkerMIOT.powerState("on"); BlinkerMIOT.print(); lightState = true; } else if (state == BLINKER_CMD_OFF) { digitalWrite(LED_BUILTIN, HIGH); digitalWrite(GPIO0, HIGH); BlinkerMIOT.powerState("off"); BlinkerMIOT.print(); lightState = false; }}// 模式设置回调函数void miotMode(uint8_t mode) { BLINKER_LOG("need set mode: ", mode); if (mode == BLINKER_CMD_MIOT_DAY) { // Your mode function } else if (mode == BLINKER_CMD_MIOT_NIGHT) { // Your mode function } else if (mode == BLINKER_CMD_MIOT_COLOR) { // Your mode function } else if (mode == BLINKER_CMD_MIOT_WARMTH) { // Your mode function } else if (mode == BLINKER_CMD_MIOT_TV) { // Your mode function } else if (mode == BLINKER_CMD_MIOT_READING) { // Your mode function } else if (mode == BLINKER_CMD_MIOT_COMPUTER) { // Your mode function } lightMode = mode; BlinkerMIOT.mode(mode); BlinkerMIOT.print();}// 设备查询回调函数void miotQuery(int32_t queryCode) { BLINKER_LOG("MIOT Query codes: ", queryCode); switch (queryCode) { case BLINKER_CMD_QUERY_ALL_NUMBER : BLINKER_LOG("MIOT Query All"); BlinkerMIOT.powerState(lightState ? "on" : "off"); BlinkerMIOT.print(); break; case BLINKER_CMD_QUERY_POWERSTATE_NUMBER : BLINKER_LOG("MIOT Query Power State"); BlinkerMIOT.powerState(lightState ? "on" : "off"); BlinkerMIOT.print(); break; default : BlinkerMIOT.powerState(lightState ? "on" : "off"); BlinkerMIOT.print(); break; }}// 数据读取回调函数void dataRead(const String & data){ BLINKER_LOG("Blinker readString: ", data); Blinker.vibrate(); uint32_t BlinkerTime = millis(); Blinker.print("millis", BlinkerTime);}// 开关回调函数void button1_callback(const String & state) { BLINKER_LOG("get button state: ", state); if (state == BLINKER_CMD_ON) { digitalWrite(GPIO0, LOW); digitalWrite(LED_BUILTIN, LOW); BLINKER_LOG("Toggle on!"); Button1.color("#FF0000"); Button1.print("on"); } else if (state == BLINKER_CMD_OFF) { digitalWrite(GPIO0, HIGH); digitalWrite(LED_BUILTIN, HIGH); BLINKER_LOG("Toggle off!"); Button1.color("#000000"); Button1.print("off"); }}void setup(){ Serial.begin(115200); BLINKER_DEBUG.stream(Serial); BLINKER_DEBUG.debugAll(); // 板载LED pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); // 继电器 pinMode(GPIO0, OUTPUT); digitalWrite(GPIO0, HIGH); // 初始化Blinker Blinker.begin(auth, ssid, pswd); Blinker.attachData(dataRead); // 绑定回调函数 BlinkerMIOT.attachPowerState(miotPowerState); BlinkerMIOT.attachMode(miotMode); BlinkerMIOT.attachQuery(miotQuery); // 绑定对象 Button1.attach(button1_callback); // 初始化开关颜色黑色 Button1.color("#000000");}void loop(){ Blinker.run();}