本帖最后由 hecat 于 2024-10-6 11:31 编辑
1. 简介 使用Arduino + ESP8266,基于MQTT协议,构建完全属于自己的物联网平台。 完全属于自己,意思是包括MQTT Broker(MQTT服务器)都自己搭建,而且是使用ESP8266,这是亮点。 由于不依赖于任何第三方服务平台,不担心他们跑路和忍受各种使用限制。 MQTT支持用户认证,具有一定的安全性。 有开放的手机端App支持。 基本平台可以在局域网内运行,如果你有公网IP和域名,也可以从公网访问。
这里仅给出一个最小系统的Demo教程,近乎手把手教你搭建整个系统。Demo实现两个独立设备上LED的本地和远程控制。
写这个教程,是因为最近发现了一个好东西,PicoMQTT库。我找能在ESP8266上运行的Broker很久了,可能是关键字太过精准,找到的Broker都不好用或用不起来。前段时间突发奇想,在Arduino的库上扒拉,把包含mqtt或沾边的库都人肉过滤了一遍,找到了PicoMQTT。经过一段时间的试用,觉得它完全能够替代电脑端的Broker。
2. 软硬件需求 硬件:ESP8266开发板2套(其实1套也可以,仅编译和下载Broker,配合手机App即可完成验证) ESP8266开发板通常搭载ESP-12系列模块,模块带一个蓝色LED,开发板还有一个切换引导模式的物理按键,按键旁边通常标注了”FLASH”丝印,有这两个外设就可以完成这个Demo。 ESP8266开发板,最方便的是用淘宝那种自带USB串口的开发板,板上有一个USB转串口芯片加一个模块,它支持Arduino串口自动下载,暂时不用去关心ESP8266的引导模式。
[01.开发板.png] [02.开发板.png]
WiFi和路由器:此Demo要有可用的2.4GHz WiFi网络,路由器要能为客户端设定静态IP地址(仅Broker有此要求)
开发软件:Arduino 2.x下载地址 https://www.arduino.cc/en/software https://downloads.arduino.cc/arduino-ide/arduino-ide_2.3.3_Windows_64bit.exe
应用软件:安卓App用MQTT仪表台软件(iOS也有类似应用) <MQTT Dash (IoT, Smart Home)_4.4_APKPure.apk> <MQTTdashboard_0.4.5_APKPure.apk> 软件包下载<MQTT Demo.7z><MQTT dashboard_0.4.5_APKPure.7z>,包含上面两个App和例程代码。
3. 建立Arduino开发环境 运行Arduino安装包arduino-ide_2.3.3_Windows_64bit.exe,如果有防火墙提示,全部允许。 安装完成,启动Arduino,开始配置: [a01.png]打开Arduino配置菜单,File-Preferences...
[a02.png]添加ESP8266开发板管理器地址,填入 http://arduino.esp8266.com/stable/package_esp8266com_index.json
[a03.png]更改语言为中文,点OK提交,会被要求重启软件。
[a04.png]打开开发板管理器菜单,工具-开发板-开发板管理器...
[a05.png]在搜索框中输入esp8266(区分大小写),搜索出来后,点击esp8266 by ESP8266下面的安装按钮,安装esp8266开发板支持包,包有点大,要花点时间。
[a07.png]打开软件库管理,工具-管理库...
[a08.png]搜索PicoMQTT(区分大小写),点安装
[a09.png]搜索PubSubClient(区分大小写),安装,安装完成后关掉Arduino IDE。
4.编译和下载ESP8266_Broker例程到ESP8266开发板 [a10.png] 把其中一个开发板插入电脑,我们先编译和烧写Broker。解压压缩包,找到并双击ESP8266_Broker.ino启动Arduino IDE。
[a11.png]为工程指定开发板ESPino(ESP-12 Module)
[a12.png]首次下载程序,选用开发板对应的串口。如果有多串口的,在设备管理器里面,通过插入和拔出开发板,确定串口号。如果需要串口驱动请自行安装。
[a13.png]修改WiF配置:选中<ESP8266LibCfg.h>,把STA_SSID和STA_PSK修改成你WiFi的SSID和密码。
[a14.png]开始编译和上传(烧写程序到ESP8266),项目-上传,第一次编译时间可能比较长
[a15.png]烧写完成后的样子,输出框有进度、校验、硬件复位等提示。
[a16.png]打开串口监视器,工具-串口监视器
[a17.png]波特率选115200,按开发板的复位RST,串口能看到ESP8266的引导提示和获取到的IP地址,模块的蓝色LED会亮起来,按FLASH按钮,LED会亮灭变换,同时会看到串口LED状态同步更新。
5.配置路由器,给Broker分配一个静态IP地址 分配静态IP地址是为了让路由器在Broker每次连接的时候得到一个不变的IP地址。因为MQTT客户端连接到Broker的地址,不能是变化的,并且后期公网端口映射也需要静态IP地址。 由于不同路由器的配置方法不同,大致就是在LAN设置里面,把Broker加到静态地址列表。请自行查看路由器帮助文档进行设置。
(如果暂时无法完成Broker静态地址的配置,只要Broker不断电重连,通常IP地址不会变化,可以记下这个IP地址继续下面的实验。但如果要正式投入使用,还是需要固定IP地址。)
6.编译和下载ESP8266_Client例程到ESP8266开发板 [a18.png]按照第4步方法,把另一个开发板接入电脑的USB口(前面已下载好的Broker不要从电脑上拔下来,等待MQTT Client连接),打开ESP8266_Client工程,配置开发板和下载串口,然后配置<ESP8266LibCfg.h>,把STA_SSID和STA_PSK修改成你WiFi的SSID和密码,把MQTT_BROKER_ADDR后面的IP地址换成你的Broker的IP地址。
[a19.png]同样打开串口监视仪,配置波特率115200,并按一下开发板的复位,能看到WiFi和MQTT的连接状态,如下图所示表示WiFi和MQTT都连接成功。
7. 安卓MQTT仪表台软件配置 下面以<MQTT Dash (IoT, SmartHome)_4.4_APKPure.apk>举例配置方法 安装App,并运行App [b01.png]打开MQTTDash,点右上角+添加服务器
[b02.png]Name可随便填,地址填写MQTT Broker的IP地址,端口填1883,下面用户名填User,密码填12345678,点右上角的磁盘图标保存配置。 (用户名和密码与<ESP8266LibCfg.h>里面的 #define BROKER_USERNAME "User" #define BROKER_PASSWORD "12345678" 保持一致)
[b03.png]Test服务器添加完成,App主界面多了一个Test控件。
[b04.png]
点击进入Test后,点右上角+新建控件
[b05.png] 点Switch/button,添加开关控件
[b06.png]这个开关我们用来控制Broker的LED,Name里填写” BrokerLED”(可随意填写);Topic(sub)里面填写BT_LED,下面Topic(pub)填写BR_LED,然后点右上角磁盘图标保存。 Broker的控制按钮创建好了,没有意外的话,按这个按钮就可以控制Broker的LED了。 (所有的Topic在源代码里都能找到定义)
[b07.png] Broker LED控制按钮创建好了,点击右上角+继续创建Client LED按钮。
[b08.png]按图输入名称和两个Topic,保存即可。
[b09.png]Broker和Client的控制按钮都创建完成。 可以通过这两个按钮分别控制两个开发板的LED了。 如果按开发板的FLASH按钮,改变LED状态,会同步更新到App界面。 至此,大功告成。
8. 关于公网访问 如果你有公网IP和DDNS,在路由器上添加一个端口映射即可。公网端口选一个非标准服务端口,映射到内网Broker IP的1883端口上即可。
公网IP,可以试着向ISP服务商(电信、联通、移动等互联网提供商)申请,如果申请成功,请ISP服务商把光猫改成桥接模式,并要到宽带账号密码,在你自己的路由器上拨号上网。
只有公网IP,没有动态域名,公网也没法用。接着该去申请免费的动态域名了。 TPLink的部分路由器内置支持DDNS刷新服务,从TPLink申请一个账号,再申请一个tpddns的二级域名,在路由器上配置好即可。另外部分TPLink路由器还支持第三方动态域名刷新服务,比如花生壳,3322、科迈等。
不用路由器,也可以使用电脑端刷新动态域名。各动态域名提供商一般都有Windows平台的刷新软件,找个NAS挂着就行。很久没有研究过免费动态域名了,最新行情啥样也不清楚,各位自己试试吧。
现在,假设你已经有了动态域名,并配置好,Broker也映射到公网。 和Broker在同一个局域网的MQTT客户端,使用局域网IP访问Broker,保证可靠性;手机和局域网外的客户端,使用动态域名访问Broker,保证移动性和连接性。
没有公网IP和动态域名,在局域网运行也有一定的实用价值。
9. 关于OTA Demo已经内置了Arduino的OTA,当你后续更新ESP8266的时候,可以使用OTA更新,密码是0000,具体细节就不展开讲了,网上教程很多,请自行查找。
10. 关于另一个安卓App和iOS App 附件里另一个安卓App是<MQTTdashboard_0.4.5_APKPure.apk>,也可以用于MQTT控制,控件更多,更花哨,它的架构和<MQTT Dash (IoT, Smart Home)_4.4_APKPure.apk>有点不同,请大家自行尝试。 4.4版本的是以Broker为顶层,生成的Dash都是该Broker的交互。 而0.4.5版本的App,有一个Broker池,每个Dash可以包含多个Broker,也就是多个Broker交互可以混合 在一起。
iOS在App Store里面也有MQTT相关的App可用,暂时没精力去逐个逐个找好用的了。
11. 关于PicoMQTT库和PubSubClient库 PicoMQTT客户端库,回调函数与Sub一一对应; PubSubClient客户端,只有一个回调函数,需要工程师自行区别Topic,分别处理。
12. 其他 *. 关于PicoMQTTBroker性能。在GitHub上,开发者对PicoMQTT作了比较详细的性能测试,从测试结果来看,对于个人或家庭应用足够了。附件Doc里面有打包下载的性能测试文档。 *. PicoMQTT也包含客户端库,但是ESP8266_Client工程并没有用PicoMQTT客户端库,而是用的PubSubClient。前段时间一个控制器用了PicoMQTT的客户端库,使用中出现未知原因随机重启,换用PubSubClient后正常。在找到PicoMQTT之前,我一直用的PubSubClient,Broker用电脑搭。
增加一个测试视频
|