久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3450|回復: 25
打印 上一主題 下一主題
收起左側

用ESP8266+MQTT構建完全屬于自己的物聯網平臺

  [復制鏈接]
跳轉到指定樓層
樓主
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, 下載次數: 18)

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, 下載次數: 10)

評分

參與人數 1黑幣 +90 收起 理由
admin + 90 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏16 分享淘帖 頂3 踩
回復

使用道具 舉報

沙發
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 | 只看該作者
感謝樓主的分享,收藏了慢慢看。
回復

使用道具 舉報

9#
ID:88256 發表于 2024-11-6 21:32 | 只看該作者
謝謝樓主的分享!我編譯ESP8266_Client沒有問題,但在編譯ESP8266_Broker時報錯,報錯信息分別如下,請問是什么原因?

Error while detecting libraries included by C:\Windows\TEMP\arduino_build_376235\sketch\ESP8266_Broker.ino.cpp
Error while detecting libraries included by C:\Windows\TEMP\arduino_build_376235\sketch\ESP8266Lib.cpp

Error while detecting libraries included by C:\Windows\TEMP\arduino_build_376235\sketch\key.cpp

Error while detecting libraries included by C:\Windows\TEMP\arduino_build_376235\sketch\main_routing.cpp

Error while detecting libraries included by C:\Windows\TEMP\arduino_build_376235\sketch\mqtt.cpp


error PicoMQTT requires ESP8266 board core version >= 3.1


回復

使用道具 舉報

10#
ID:1130698 發表于 2024-11-8 08:17 | 只看該作者
發表于 2024-11-6 21:32
謝謝樓主的分享!我編譯ESP8266_Client沒有問題,但在編譯ESP8266_Broker時報錯,報錯信息分別如下,請問是 ...

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

開發板是不是按上面填的?開發板包有沒有更新成功?
回復

使用道具 舉報

11#
ID:1130698 發表于 2024-11-8 08:20 | 只看該作者
hhdsdy 發表于 2024-11-6 21:32
謝謝樓主的分享!我編譯ESP8266_Client沒有問題,但在編譯ESP8266_Broker時報錯,報錯信息分別如下,請問是 ...

有最后一個錯誤,"Error PicoMQTT requires ESP8266 board core version >= 3.1",懷疑與開發板支持包有關。
訪問國外的一些網站不是很穩定,多試試吧。
回復

使用道具 舉報

12#
ID:88256 發表于 2024-11-8 17:59 | 只看該作者
發表于 2024-11-8 08:17
[a02.png]添加ESP8266開發板管理器地址,填...

我之前有用過ESP8266,開發板的管理地址用的是 www arduino cn/package_esp8266com_index.json ,一直都是很正常使用的,剛才用你提供的地址替換并確認,沒有提示重啟,編譯也是一樣的錯誤。
回復

使用道具 舉報

13#
ID:1130698 發表于 2024-11-8 21:14 | 只看該作者
hhdsdy 發表于 2024-11-8 17:59
我之前有用過ESP8266,開發板的管理地址用的 ...

我新裝Arduino,開發板使用www arduino cn/package_esp8266com_index.json,連不上。

如果你愿意,試試把 C:\Users\xxx\AppData\Local\Arduino15\packages下面的ESP8266開發板刪除,再從IDE里面重新安裝。

壓縮包里面的IDE和例程是用全新虛擬機一步一步安裝、編譯截圖來的,例程應該不會有問題。
回復

使用道具 舉報

14#
ID:88256 發表于 2024-11-9 10:15 | 只看該作者
Hecat 發表于 2024-11-8 21:14
我新裝Arduino,開發板使用www arduino cn/package_esp8266com_index.json,連不上。

如果你愿意,試 ...

刪除舊的重新安裝,還是一摸一樣的的結果,應該是其它的原因了,不知道會不會和我使用win7有關?
回復

使用道具 舉報

15#
ID:400333 發表于 2024-11-9 11:00 | 只看該作者
收藏學習!
回復

使用道具 舉報

16#
ID:1130698 發表于 2024-11-10 12:38 | 只看該作者
hhdsdy 發表于 2024-11-9 10:15
刪除舊的重新安裝,還是一摸一樣的的結果,應該是其它的原因了,不知道會不會和我使用win7有關?

你裝的IDE是1.8.x還是2.3.x的?
這兩個版本差別有點大。
我在WIN7的虛擬機上,2.3.x的IDE運行不起來。

新建位圖圖像.png (100.15 KB, 下載次數: 0)

新建位圖圖像.png
回復

使用道具 舉報

17#
ID:88256 發表于 2024-11-10 15:59 | 只看該作者
Hecat 發表于 2024-11-10 12:38
你裝的IDE是1.8.x還是2.3.x的?
這兩個版本差別有點大。
我在WIN7的虛擬機上,2.3.x的IDE運行不起來。

1.8.19的,更高版本的好像在win7上不能用的,會不會和版本低有關系?
回復

使用道具 舉報

18#
ID:1130698 發表于 2024-11-10 20:34 | 只看該作者
hhdsdy 發表于 2024-11-10 15:59
1.8.19的,更高版本的好像在win7上不能用的,會不會和版本低有關系?

估計是有庫不支持1.8.x的IDE了
回復

使用道具 舉報

19#
ID:291549 發表于 2024-11-25 18:51 | 只看該作者
感謝樓主,這么詳細的資料。
回復

使用道具 舉報

20#
ID:624685 發表于 2025-1-3 11:57 | 只看該作者
謝謝這么詳細,馬上開始照葫蘆畫瓢
回復

使用道具 舉報

21#
ID:926990 發表于 2025-1-23 17:35 | 只看該作者
Client ID是必填項,沒找到啊?
回復

使用道具 舉報

22#
ID:468878 發表于 2025-2-8 11:18 | 只看該作者
為啥我很反感Arduino
回復

使用道具 舉報

23#
ID:830831 發表于 2025-2-23 11:55 | 只看該作者
哪位編譯通過了?
回復

使用道具 舉報

24#
ID:830831 發表于 2025-2-23 12:03 | 只看該作者
rsx9583 發表于 2025-2-8 11:18
為啥我很反感Arduino

自己不行,還啥看不上,頂頂大名的aduipliot飛控就是Arduino寫的
回復

使用道具 舉報

25#
ID:830831 發表于 2025-2-23 16:52 | 只看該作者
Hecat 發表于 2024-11-8 21:14
我新裝Arduino,開發板使用www arduino cn/package_esp8266com_index.json,連不上。

如果你愿意,試 ...

我在win10下成功了,服務器和客戶端的燈都能控,非常棒
回復

使用道具 舉報

26#
ID:497780 發表于 2025-4-26 15:25 | 只看該作者
這APP還不錯,簡單的設置了一下,我在homeassistant 的MQTT里都可以發布和訂閱數據了!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品中文字幕在线 | 99这里只有精品视频 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 综合一区二区三区 | 天天在线操 | 久久久久成人精品 | 久久一区二区三区免费 | 国产区精品视频 | caoporn国产| 日韩免费视频一区二区 | 欧美日本一区二区 | 亚洲成人精品 | 中文字幕一页二页 | 日韩在线| 在线观看av网站永久 | 中文无吗| 久久久久久久久久久久亚洲 | 亚洲午夜精品视频 | 久久国产精品偷 | 亚洲精品99| 91tv在线观看 | 在线观看一区 | 国产精品久久久久av | 亚洲影视在线 | 日韩精品在线看 | a级黄色毛片免费播放视频 国产精品视频在线观看 | www.日本在线播放 | 欧美性猛交 | 国产不卡视频 | 欧美一区二区三区精品 | 精品久久久久久久 | 丁香五月网久久综合 | 中文无码日韩欧 | 三级视频久久 | 中文字幕视频在线观看免费 | 国产精品网址 | 99久久精品免费看国产小宝寻花 | 亚洲精品在线免费播放 | 91看片免费版 | 亚洲高清免费视频 | 亚洲精品99|