1. 簡介 使用Arduino + ESP8266,基于MQTT協(xié)議,構(gòu)建完全屬于自己的物聯(lián)網(wǎng)平臺。 完全屬于自己,意思是包括MQTT Broker(MQTT服務(wù)器)都自己搭建,而且是使用ESP8266,這是亮點(diǎn)。 由于不依賴于任何第三方服務(wù)平臺,不擔(dān)心他們跑路和忍受各種使用限制。 MQTT支持用戶認(rèn)證,具有一定的安全性。 有開放的手機(jī)端App支持。 基本平臺可以在局域網(wǎng)內(nèi)運(yùn)行,如果你有公網(wǎng)IP和域名,也可以從公網(wǎng)訪問。
這里僅給出一個(gè)最小系統(tǒng)的Demo教程,近乎手把手教你搭建整個(gè)系統(tǒng)。Demo實(shí)現(xiàn)兩個(gè)獨(dú)立設(shè)備上LED的本地和遠(yuǎn)程控制。
寫這個(gè)教程,是因?yàn)樽罱l(fā)現(xiàn)了一個(gè)好東西,PicoMQTT庫。我找能在ESP8266上運(yùn)行的Broker很久了,可能是關(guān)鍵字太過精準(zhǔn),找到的Broker都不好用或用不起來。前段時(shí)間突發(fā)奇想,在Arduino的庫上扒拉,把包含mqtt或沾邊的庫都人肉過濾了一遍,找到了PicoMQTT。經(jīng)過一段時(shí)間的試用,覺得它完全能夠替代電腦端的Broker。
2. 軟硬件需求 硬件:ESP8266開發(fā)板2套(其實(shí)1套也可以,僅編譯和下載Broker,配合手機(jī)App即可完成驗(yàn)證) ESP8266開發(fā)板通常搭載ESP-12系列模塊,模塊帶一個(gè)藍(lán)色LED,開發(fā)板還有一個(gè)切換引導(dǎo)模式的物理按鍵,按鍵旁邊通常標(biāo)注了”FLASH”絲印,有這兩個(gè)外設(shè)就可以完成這個(gè)Demo。 ESP8266開發(fā)板,最方便的是用淘寶那種自帶USB串口的開發(fā)板,板上有一個(gè)USB轉(zhuǎn)串口芯片加一個(gè)模塊,它支持Arduino串口自動下載,暫時(shí)不用去關(guān)心ESP8266的引導(dǎo)模式。 [01.開發(fā)板.png] [02.開發(fā)板.png]
WiFi和路由器:此Demo要有可用的2.4GHz WiFi網(wǎng)絡(luò),路由器要能為客戶端設(shè)定靜態(tài)IP地址(僅Broker有此要求)
開發(fā)軟件:Arduino 2.x下載地址 https://www.arduino.cc/en/software https://downloads.arduino.cc/arduino-ide/arduino-ide_2.3.3_Windows_64bit.exe
應(yīng)用軟件:安卓App用MQTT儀表臺軟件(iOS也有類似應(yīng)用) <MQTT Dash (IoT, Smart Home)_4.4_APKPure.apk> <MQTTdashboard_0.4.5_APKPure.apk> Demo例程 <ESP8266_Broker> MQTT Broker(服務(wù)器)例程 <ESP8266_Client> MQTT客戶端例程 軟件包下載<MQTT Demo.7z>,包含上面兩個(gè)App和例程代碼。
MQTT Demo.7z
(10.37 MB, 下載次數(shù): 18)
2024-10-6 11:08 上傳
點(diǎn)擊文件名下載附件
3. 建立Arduino開發(fā)環(huán)境 運(yùn)行Arduino安裝包arduino-ide_2.3.3_Windows_64bit.exe,如果有防火墻提示,全部允許。 安裝完成,啟動Arduino,開始配置:
[a01.png]打開Arduino配置菜單,F(xiàn)ile-Preferences...
[a02.png]添加ESP8266開發(fā)板管理器地址,填入 http://arduino.esp8266.com/stable/package_esp8266com_index.json
[a03.png]更改語言為中文,點(diǎn)OK提交,會被要求重啟軟件。
[a04.png]打開開發(fā)板管理器菜單,工具-開發(fā)板-開發(fā)板管理器...
[a05.png]在搜索框中輸入esp8266(區(qū)分大小寫),搜索出來后,點(diǎn)擊esp8266 by ESP8266下面的安裝按鈕,安裝esp8266開發(fā)板支持包,包有點(diǎn)大,要花點(diǎn)時(shí)間。
[a07.png]打開軟件庫管理,工具-管理庫...
[a08.png]搜索PicoMQTT(區(qū)分大小寫),點(diǎn)安裝
[a09.png]搜索PubSubClient(區(qū)分大小寫),安裝,安裝完成后關(guān)掉Arduino IDE。
4.編譯和下載ESP8266_Broker例程到ESP8266開發(fā)板 [a10.png] 把其中一個(gè)開發(fā)板插入電腦,我們先編譯和燒寫B(tài)roker。解壓壓縮包,找到并雙擊ESP8266_Broker.ino啟動Arduino IDE。
[a11.png]為工程指定開發(fā)板ESPino(ESP-12 Module)
[a12.png]首次下載程序,選用開發(fā)板對應(yīng)的串口。如果有多串口的,在設(shè)備管理器里面,通過插入和拔出開發(fā)板,確定串口號。如果需要串口驅(qū)動請自行安裝。
[a13.png]修改WiF配置:選中<ESP8266LibCfg.h>,把STA_SSID和STA_PSK修改成你WiFi的SSID和密碼。
[a14.png]開始編譯和上傳(燒寫程序到ESP8266),項(xiàng)目-上傳,第一次編譯時(shí)間可能比較長
[a15.png]燒寫完成后的樣子,輸出框有進(jìn)度、校驗(yàn)、硬件復(fù)位等提示。
[a16.png]打開串口監(jiān)視器,工具-串口監(jiān)視器
[a17.png]波特率選115200,按開發(fā)板的復(fù)位RST,串口能看到ESP8266的引導(dǎo)提示和獲取到的IP地址,模塊的藍(lán)色LED會亮起來,按FLASH按鈕,LED會亮滅變換,同時(shí)會看到串口LED狀態(tài)同步更新。
5.配置路由器,給Broker分配一個(gè)靜態(tài)IP地址 分配靜態(tài)IP地址是為了讓路由器在Broker每次連接的時(shí)候得到一個(gè)不變的IP地址。因?yàn)镸QTT客戶端連接到Broker的地址,不能是變化的,并且后期公網(wǎng)端口映射也需要靜態(tài)IP地址。 由于不同路由器的配置方法不同,大致就是在LAN設(shè)置里面,把Broker加到靜態(tài)地址列表。請自行查看路由器幫助文檔進(jìn)行設(shè)置。
(如果暫時(shí)無法完成Broker靜態(tài)地址的配置,只要Broker不斷電重連,通常IP地址不會變化,可以記下這個(gè)IP地址繼續(xù)下面的實(shí)驗(yàn)。但如果要正式投入使用,還是需要固定IP地址。)
6.編譯和下載ESP8266_Client例程到ESP8266開發(fā)板 [a18.png]按照第4步方法,把另一個(gè)開發(fā)板接入電腦的USB口(前面已下載好的Broker不要從電腦上拔下來,等待MQTT Client連接),打開ESP8266_Client工程,配置開發(fā)板和下載串口,然后配置<ESP8266LibCfg.h>,把STA_SSID和STA_PSK修改成你WiFi的SSID和密碼,把MQTT_BROKER_ADDR后面的IP地址換成你前面Broker的IP地址。
[a19.png]同樣打開串口監(jiān)視儀,配置波特率115200,并按一下開發(fā)板的復(fù)位,能看到WiFi和MQTT的連接狀態(tài),如下圖所示表示W(wǎng)iFi和MQTT都連接成功。
7. 安卓MQTT儀表臺軟件配置 下面以<MQTT Dash (IoT, SmartHome)_4.4_APKPure.apk>舉例配置方法 安裝App,并運(yùn)行App [b01.png]打開MQTTDash,點(diǎn)右上角+添加服務(wù)器
[b02.png]Name可隨便填,地址填寫前面MQTT Broker的IP地址,端口填1883,下面用戶名填User,密碼填12345678,點(diǎn)右上角的磁盤圖標(biāo)保存配置。 (用戶名和密碼與<ESP8266LibCfg.h>里面的 #define BROKER_USERNAME "User" #define BROKER_PASSWORD "12345678" 保持一致)
[b03.png]Test服務(wù)器添加完成,App主界面多了一個(gè)Test控件。
[b04.png]點(diǎn)擊進(jìn)入Test后,點(diǎn)右上角+新建控件
[b05.png]點(diǎn)Switch/button,添加開關(guān)控件
[b06.png]這個(gè)開關(guān)我們用來控制Broker的LED,Name里填寫” BrokerLED”(可隨意填寫);Topic(sub)里面填寫B(tài)T_LED,下面Topic(pub)填寫B(tài)R_LED,然后點(diǎn)右上角磁盤圖標(biāo)保存。 Broker的控制按鈕創(chuàng)建好了,沒有意外的話,按這個(gè)按鈕就可以控制Broker的LED了。 (所有的Topic在源代碼里都能找到定義)
[b07.png] Broker LED控制按鈕創(chuàng)建好了,點(diǎn)擊右上角+繼續(xù)創(chuàng)建Client LED按鈕。
[b08.png]按圖輸入名稱和兩個(gè)Topic,保存即可。
[b09.png]Broker和Client的控制按鈕都創(chuàng)建完成。 可以通過這兩個(gè)按鈕分別控制兩個(gè)開發(fā)板的LED了。 如果按開發(fā)板的FLASH按鈕,改變LED狀態(tài),會同步更新到App界面。 至此,大功告成。
8. 關(guān)于公網(wǎng)訪問 如果你有公網(wǎng)IP和DDNS,在路由器上添加一個(gè)端口映射即可。公網(wǎng)端口選一個(gè)非標(biāo)準(zhǔn)服務(wù)端口,映射到內(nèi)網(wǎng)Broker IP的1883端口上即可。
公網(wǎng)IP,可以試著向ISP服務(wù)商(電信、聯(lián)通、移動等互聯(lián)網(wǎng)提供商)申請,如果申請成功,請ISP服務(wù)商把光貓改成橋接模式,并要到寬帶賬號密碼,在你自己的路由器上撥號上網(wǎng)。
只有公網(wǎng)IP,沒有動態(tài)域名,公網(wǎng)也沒法用。接著該去申請免費(fèi)的動態(tài)域名了。 TPLink的部分路由器內(nèi)置支持DDNS刷新服務(wù),從TPLink申請一個(gè)賬號,再申請一個(gè)tpddns的二級域名,在路由器上配置好即可。另外部分TPLink路由器還支持第三方動態(tài)域名刷新服務(wù),比如花生殼,3322、科邁等。
不用路由器,也可以使用電腦端刷新動態(tài)域名。各動態(tài)域名提供商一般都有Windows平臺的刷新軟件,找個(gè)NAS掛著就行。很久沒有研究過免費(fèi)動態(tài)域名了,最新行情啥樣也不清楚,各位自己試試吧。
現(xiàn)在,假設(shè)你已經(jīng)有了動態(tài)域名,并配置好,Broker也映射到公網(wǎng)。 和Broker在同一個(gè)局域網(wǎng)的MQTT客戶端,使用局域網(wǎng)IP訪問Broker,保證可靠性;手機(jī)和局域網(wǎng)外的客戶端,使用動態(tài)域名訪問Broker,保證移動性和連接性。
沒有公網(wǎng)IP和動態(tài)域名,在局域網(wǎng)運(yùn)行也有一定的實(shí)用價(jià)值。
9. 關(guān)于OTA Demo已經(jīng)內(nèi)置了Arduino的OTA,當(dāng)你后續(xù)更新ESP8266的時(shí)候,可以使用OTA更新,密碼是0000,具體細(xì)節(jié)就不展開講了,網(wǎng)上教程很多,請自行查找。
10. 關(guān)于另一個(gè)安卓App和iOS App 附件里另一個(gè)安卓App是<MQTTdashboard_0.4.5_APKPure.apk>,也可以用于MQTT控制,控件更多,更花哨,它的架構(gòu)和<MQTT Dash (IoT, Smart Home)_4.4_APKPure.apk>有點(diǎn)不同,請大家自行嘗試。 4.4版本的是以Broker為頂層,生成的Dash都是該Broker的交互。 而0.4.5版本的App,有一個(gè)Broker池,每個(gè)Dash可以包含多個(gè)Broker,也就是多個(gè)Broker交互可以混合在一起。
iOS在App Store里面也有MQTT相關(guān)的App可用,暫時(shí)沒精力去逐個(gè)逐個(gè)找好用的了。
11. 關(guān)于PicoMQTT庫和PubSubClient庫 PicoMQTT客戶端庫,回調(diào)函數(shù)與Sub一一對應(yīng); PubSubClient客戶端,只有一個(gè)回調(diào)函數(shù),需要工程師自行區(qū)別Topic,分別處理。
12. 其他 *. 關(guān)于PicoMQTTBroker性能。在GitHub上,開發(fā)者對PicoMQTT作了比較詳細(xì)的性能測試,從測試結(jié)果來看,對于個(gè)人或家庭應(yīng)用足夠了。附件Doc里面有打包下載的性能測試文檔。 *. PicoMQTT也包含客戶端庫,但是ESP8266_Client工程并沒有用PicoMQTT客戶端庫,而是用的PubSubClient。前段時(shí)間一個(gè)控制器用了PicoMQTT的客戶端庫,使用中出現(xiàn)未知原因隨機(jī)重啟,換用PubSubClient后正常。在找到PicoMQTT之前,我一直用的PubSubClient,Broker用電腦搭。
附測試視頻 |