找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 227|回复: 7
打印 上一主题 下一主题
收起左侧

用ESP8266+MQTT构建完全属于自己的物联网平台

[复制链接]
跳转到指定楼层
楼主
本帖最后由 Hecat 于 2024-10-10 10:41 编辑

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>
Demo例程
       <ESP8266_Broker>      MQTT Broker(服务器)例程
       <ESP8266_Client>       MQTT客户端例程
    软件包下载<MQTT Demo.7z>,包含上面两个App和例程代码。
MQTT Demo.7z (10.37 MB, 下载次数: 9)

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用电脑搭。

附测试视频
MQTT Demo Video.7z (4.24 MB, 下载次数: 5)

评分

参与人数 1黑币 +90 收起 理由
admin + 90 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:21740 发表于 2024-10-9 18:34 | 只看该作者
找不到库PicoMQTT.h
回复

使用道具 举报

板凳
ID:1130698 发表于 2024-10-9 20:42 | 只看该作者
zying 发表于 2024-10-9 18:34
找不到库PicoMQTT.h

安装PicoMQTT库了没?
参考上面 [a08.png]搜索PicoMQTT(区分大小写),点安装
回复

使用道具 举报

地板
ID:21740 发表于 2024-10-9 21:52 | 只看该作者
发表于 2024-10-9 20:42
安装PicoMQTT库了没?
参考上面 [a08.png]搜索PicoMQTT(区分大小写),点安装

搜索不到PicoMQTT
回复

使用道具 举报

5#
ID:21740 发表于 2024-10-9 22:02 | 只看该作者
发表于 2024-10-9 20:42
安装PicoMQTT库了没?
参考上面 [a08.png]搜索PicoMQTT(区分大小写),点安装

呵呵~找到了!编译成功!谢谢分享!!
回复

使用道具 举报

6#
ID:21740 发表于 2024-10-11 15:15 | 只看该作者
请问修改另一个通道编译不成功。
回复

使用道具 举报

7#
ID:21740 发表于 2024-10-11 16:04 | 只看该作者
搞定了!修改一下定义!
回复

使用道具 举报

8#
ID:1048397 发表于 2024-10-14 08:11 | 只看该作者
感谢楼主的分享,收藏了慢慢看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表