電路圖
圖1. 教程電路
什么是MQTT?
消息隊列遙測傳輸(MQTT)是一種消息傳遞協議,可在任何具有Internet連接的設備上運行,使其成為物聯網中最常用的協議之一項目。它被設計用于具有低帶寬限制的系統,因此非常適用于家庭自動化或任何物聯網(IoT)應用。
MQTT的優勢包括其低帶寬,簡單的實現,它適用于不可靠的連接。
圖2. 基于MQTT的系統
MQTT需要使用“代理” - 一個接收和發送MQTT消息的應用程序。在本教程中,我們的代理是Mosquitto,它將安裝在Raspberry Pi上。 MQTT系統的第二個組件是“客戶端”,它連接到中央代理并可以發布或訂閱MQTT消息。
MQTT消息由主題標識,該主題是消息的一部分。在本教程中,我們將發布和訂閱“makerpro/mqtt_tutorial/light”主題。
在Raspberry Pi上安裝Mosquitto Broker
我建議的第一步是更新Raspberry Pi上的軟件。打開終端并輸入以下命令:
sudo apt-get update
sudo apt-get upgrade
sudo reboot
一旦你的Pi重新啟動,你可以再次在終端類型中安裝我們的MQTT代理Mosquitto:
sudo apt install -y mosquitto mosquitto-clients
通過創建終端的兩個新實例來測試Mosquitto。在一個終端輸入以下內容:
mosquitto_sub -v -t makerpro/mqtt_tutorial/light
在另一個新終端輸入:
mosquitto_pub -t makerpro/mqtt_tutorial/light -m ‘helloWorld’
在第二個終端上按Enter鍵后,您會看到消息“makerpro/mqtt_tutorial/light helloWorld“在第一個終端上,如圖3所示。
圖3. Raspberry Pi Mosquitto測試
在您的Raspberry Pi上成功測試了Mosquitto,您需要通過輸入命令 hostname -I 找到其IP地址。
hostname -I
這將返回一個像192.168.0.47這樣的數字,如圖4所示。你的Pi可能會給你一個稍微不同的數字。
重要你把這個數字寫在安全的地方。 NodeMCU需要它才能連接到我們的Mosquitto服務器。
圖4. Raspberry Pi IP地址
構建電路
本教程的電路(如圖5所示)包含LDR,10K電阻和我們的電路NodeMCU開發板。
圖5. 面包板電路
LDR和電阻形成一個分壓器,NodeMCU的模擬輸入讀取他們之間的電壓。當LDR的電阻隨照度變化時,LDR和電阻之間的電壓電平發生變化,如表1所示。
表1 。照明/電壓/ADC電平
安裝Arduino IDE和PubSubClient您計算機上的庫
您將使用Arduino IDE對NodeMCU開發板進行編程和閃存。在我們進入編程之前,需要安裝各種步驟。
下載并安裝IDE
運行Arduino并從“文件”菜單中顯示“首選項”對話框
在“其他板管理器URL”文本框中粘貼以下內容文本:http://arduino.esp8266.com/stable/package_esp8266com_index.json
單擊確定
從工具/板菜單中選擇“Board Manager”
在搜索框中鍵入“esp8266”,然后安裝“esp8266 by ESP8266 Community”,
從工具/主板中選擇“通用ESP8266模塊”
通過工具/打開庫管理器管理圖書館。..
搜索“PubSubClient”,然后安裝Nick O‘Leary的PubSubClient
圖6。 PubSubClient
調整并將軟件上傳到NodeMCU
首先,下載副本來自Github的NodeMCU軟件。
在將代碼上傳到你的主板之前,你需要做一些更改文件頂部的Wi-Fi和代理地址。
const char *WIFI_NETWORK_NAME = “********”;
const char *WIFI_PASSWORD = “*********”;
const char *MQTT_BROKER = “192.168.0.47”;
將WIFI_NETWORK_NAME和WIFI_PASSWORD更改為您的家庭網絡登錄詳細信息。例如,如果您的Wi-Fi網絡名為myWifi,則頂行如下所示:
const char *WIFI_NETWORK_NAME = “myWifi”;
將變量MQTT_BROKER更新為Raspberry Pi的IP地址(您創建了一個早期的說明)。
實施
將NodeMCU和Raspberry Pi連接到同一網絡非常重要。請注意,如果重新啟動Raspberry Pi,它可能會更改其IP地址,這也意味著更改NodeMSC的代碼。
一旦啟動,NodeMCU上的軟件將定期讀取其ADC,然后發送MQTT消息到存儲在Raspberry Pi上的代理。然后,代理將消息重新分發給訂閱該主題的任何客戶端。
NodeMCU代碼利用串行端口輸出調試消息。如果連接Arduino IDE的串行監視器,您應該看到類似于圖7中的消息的輸出。
圖7. NodeMCU的串行輸出
您應該開始在您的經紀人處接收MQTT消息,您可以通過打開Pi上的終端窗口并輸入以下內容來確認:
mosquitto_sub -v -t makerpro/mqtt_tutorial/light
這將允許您在控制臺中接收常規消息,如圖8所示。
圖8. 訂閱makerpro/mqtt_tutorial/light主題。
-
樹莓派
+關注
關注
117文章
1711瀏覽量
105917 -
ESP8266
+關注
關注
50文章
962瀏覽量
45407 -
NODEMCU
+關注
關注
13文章
289瀏覽量
21636 -
MQTT
+關注
關注
5文章
655瀏覽量
22748
發布評論請先 登錄
相關推薦
esp8266連接阿里云平臺時mqtt連接超時
esp8266和esp32區別是什么
esp8266不燒錄可以使用嗎
Arduino Nano 和 NodeMCU ESP8266 讀取 DHT11 環境溫濕度數據及 OLED顯示
![Arduino Nano 和 <b class='flag-5'>NodeMCU</b> <b class='flag-5'>ESP8266</b> 讀取 DHT11 環境溫濕度數據及 OLED顯示](https://file1.elecfans.com/web2/M00/02/62/wKgZoma7LraAIX68AAHwAf2dvXI565.png)
esp8266的脈沖計數問題求解
esp8266運行REMOTE_OTA_TASK出錯的原因?
ESP8266_RTOS_SDK_2.x.x MQTT重新連接失敗的原因?
esp8266無法收到usb-ttl發過來的串口數據如何解決?
求助,請問如何在RTOS SDK 1.5的PlatformIO IDE ESP8266實現MQTT?
esp32調試MQTT的程序,如何對.host初始化?
國產低成本Wi-Fi SoC解決方案芯片ESP8266與ESP8285對比差異
![國產低成本Wi-Fi SoC解決方案芯片<b class='flag-5'>ESP8266</b>與<b class='flag-5'>ESP</b>8285對比差異](https://file1.elecfans.com/web2/M00/E6/5C/wKgZomZG0KiASP_yAAELgTM0cRs433.png)
STM32、ESP8266與MQTT連接阿里云物聯網的串口通信異常解析
淺析ESP32運行MQTT客戶端進行主題的發布和訂閱的方法
![淺析<b class='flag-5'>ESP</b>32<b class='flag-5'>運行</b><b class='flag-5'>MQTT</b>客戶端進行主題的發布和訂閱的方法](https://file1.elecfans.com/web2/M00/C5/9C/wKgaomX3ocKAU7a2AAAnFx0O5z4625.png)
評論