amobbs.com 阿莫电子技术论坛

标题: 用ESP8266构建完全属于自己的物联网平台 [打印本页]

作者: hecat    时间: 昨天 19:59
标题: 用ESP8266构建完全属于自己的物联网平台
本帖最后由 hecat 于 2024-10-3 20:10 编辑

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套
ESP8266开发板通常搭载ESP-12系列模块,模块带一个蓝色LED,开发板还有一个切换引导模式的物理按键,按键旁边通常标注了”FLASH”丝印,有这两个外设就可以完成这个Demo。
ESP8266开发板,最方便的是用淘宝那种自带USB串口的开发板,板上有一个USB转串口芯片加一个模块,它支持Arduino串口自动下载,暂时不用去关心ESP8266的引导模式。
[01.开发板.png] [02.开发板.png]
[attach]649518[/attach][attach]649519[/attach]

WiFi和路由器:此Demo要有可用的2.4GHz WiFi网络,路由器要能为客户端设定静态IP地址(仅Broker有此要求)

开发软件:Arduino 2.x下载地址
https://www.arduino.cc/en/software
https://downloads.arduino.cc/ard ... 3_Windows_64bit.exe

应用软件:安卓App用MQTT仪表台软件(iOS也有类似应用)
    <MQTT Dash (IoT, Smart Home)_4.4_APKPure.apk>
    <MQTT dashboard_0.4.5_APKPure.apk>
    软件包下载<MQTT Demo.7z>,包含上面两个App和例程代码。
[attach]649520[/attach]

3. 建立Arduino开发环境
运行Arduino安装包arduino-ide_2.3.3_Windows_64bit.exe,如果有防火墙提示,全部允许。
安装完成,启动Arduino,开始配置:
[a01.png]打开Arduino配置菜单,File-Preferences...
[attach]649521[/attach]

[a02.png]添加ESP8266开发板管理器地址,填入
http://arduino.esp8266.com/stable/package_esp8266com_index.json
[attach]649522[/attach]

[a03.png]更改语言为中文,点OK提交,会被要求重启软件。
[attach]649523[/attach]

[a04.png]打开开发板管理器菜单,工具-开发板-开发板管理器...
[attach]649524[/attach]

[a05.png]在搜索框中输入esp8266(区分大小写),搜索出来后,点击esp8266 by ESP8266下面的安装按钮,安装esp8266开发板支持包,包有点大,要花点时间。
[attach]649525[/attach]

[a07.png]打开软件库管理,工具-管理库...
[attach]649526[/attach]

[a08.png]搜索PicoMQTT(区分大小写),点安装
[attach]649527[/attach]

[a09.png]搜索PubSubClient(区分大小写),安装,安装完成后关掉Arduino IDE。
[attach]649528[/attach]

4.编译和下载ESP8266_Broker例程到ESP8266开发板
[a10.png] 把其中一个开发板插入电脑,我们先编译和烧写Broker。解压压缩包,找到并双击ESP8266_Broker.ino启动Arduino IDE。
[attach]649529[/attach]

[a11.png]为工程指定开发板ESPino (ESP-12 Module)
[attach]649530[/attach]

[a12.png]首次下载程序,选用开发板对应的串口。如果有多串口的,在设备管理器里面,通过插入和拔出开发板,确定串口号。如果需要串口驱动请自行安装。
[attach]649531[/attach]

[a13.png]修改WiF配置:选中<ESP8266LibCfg.h>,把STA_SSID和STA_PSK修改成你WiFi的SSID和密码。
[attach]649532[/attach]

[a14.png]开始编译和上传(烧写程序到ESP8266),项目-上传,第一次编译时间可能比较长
[attach]649533[/attach]

[a15.png]烧写完成后的样子,输出框有进度、校验、硬件复位等提示。
[attach]649534[/attach]

[a16.png]打开串口监视器,工具-串口监视器
[attach]649535[/attach]

[a17.png]波特率选115200,按开发板的复位RST,串口能看到ESP8266的引导提示和获取到的IP地址,模块的蓝色LED会亮起来,按FLASH按钮,LED会亮灭变换,同时会看到串口LED状态同步更新。
[attach]649536[/attach]

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地址。
[attach]649537[/attach]

[a19.png]同样打开串口监视仪,配置波特率115200,并按一下开发板的复位,能看到WiFi和MQTT的连接状态,如下图所示表示WiFi和MQTT都连接成功。
[attach]649508[/attach]

7. 安卓MQTT仪表台软件配置
下面以<MQTT Dash (IoT, Smart Home)_4.4_APKPure.apk>举例配置方法
安装App,并运行App
[b01.png]打开MQTT Dash,点右上角+添加服务器
[attach]649509[/attach]

[b02.png]Name可随便填,地址填写前面MQTT Broker的IP地址,端口填1883,下面用户名填User,密码填12345678,点右上角的磁盘图标保存配置。
(用户名和密码与<ESP8266LibCfg.h>里面的
#define BROKER_USERNAME     "User"
#define BROKER_PASSWORD     "12345678"
保持一致)
[attach]649510[/attach]

[b03.png]Test服务器添加完成,App主界面多了一个Test控件。
[attach]649511[/attach]

[b04.png]点击进入Test后,点右上角+新建控件
[attach]649512[/attach]

[b05.png]点Switch/button,添加开关控件
[attach]649513[/attach]

[b06.png]这个开关我们用来控制Broker的LED,Name里填写” Broker LED”(可随意填写);Topic(sub)里面填写BT_LED,下面Topic(pub)填写BR_LED,然后点右上角磁盘图标保存。
Broker的控制按钮创建好了,没有意外的话,按这个按钮就可以控制Broker的LED了。
(所有的Topic在源代码里都能找到定义)
[attach]649514[/attach]

[b07.png] Broker LED控制按钮创建好了,点击右上角+继续创建Client LED按钮。
[attach]649515[/attach]

[b08.png]按图输入名称和两个Topic,保存即可。
[attach]649516[/attach]

[b09.png]Broker和Client的控制按钮都创建完成。
可以通过这两个按钮分别控制两个开发板的LED了。
如果按开发板的FLASH按钮,改变LED状态,会同步更新到App界面。
至此,大功告成。
[attach]649517[/attach]

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是<MQTT dashboard_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. 其他
*. 关于PicoMQTT Broker性能。在GitHub上,开发者对PicoMQTT作了比较详细的性能测试,从测试结果来看,对于个人或家庭应用足够了。附件Doc里面有打包下载的性能测试文档。
*. PicoMQTT也包含客户端库,但是ESP8266_Client工程并没有用PicoMQTT客户端库,而是用的PubSubClient。前段时间一个控制器用了PicoMQTT的客户端库,使用中出现未知原因随机重启,换用PubSubClient后正常。在找到PicoMQTT之前,我一直用的PubSubClient,Broker用电脑搭。
作者: honami520    时间: 昨天 20:45
内容确实非常详细,顶一个




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4