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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ESP8266通過MQTT協議實現LED的遠程控制

[復制鏈接]
跳轉到指定樓層
樓主
本文簡要介紹了搭建 EMQX 服務器實現基于 MQTT 協議遠程控制 NodeMCU ESP8266 板載 LED 的解決方案。

簡介

1. MQTT
MQTT(Message Queuing Telemetry Transport)是一種基于 publish/subscribe (發布/訂閱) 模式的 輕量級 通訊協議,構建于 TCP/IP 協議上,由 IBM 在1999年發布。

MQTT 可以實現用極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的消息服務 。

2. EMQX
EMQX 是一款大規模分布式物聯網 MQTT 服務器,單集群支持 1 億物聯網設備連接,消息分發時延低于 1 毫秒。為高可靠、高性能的物聯網實時數據移動、處理和集成提供動力。

3. Home Assistant
Home Assistant (HA) 家庭助理,是一款基于 Python 的智能家居開源系統,可以方便地連接各種外部設備,支持眾多品牌的智能家居設備。

方案
安裝 Home Assistant

使用 Docker 容器安裝 Home Assistant ,
  • 下載 Docker 軟件;
  • C 盤根目錄新建文件夾 homeassistant ;
  • 下載部署文件 GitHub 并解壓得到 docker-compose.yml 保存至上述 homeassistant 文件夾;
  • Windows 打開 命令提示符 或 Windows PowerShell,輸入如下代碼實現自動下載鏡像
    1. cd C:\homeassistant
    2. docker-compose.yml
    3. docker-compose up
    復制代碼

  • 安裝過程需大約 30 分鐘,即可在 Docker 容器中創建 Home Assistant 鏡像;
  • 自動從鏡像安裝 Home Assistant 到容器。代碼文件 docker-compose.yml 將映射 Home Assistant 配置文件到 C:/homeassistant 文件夾;
  • 瀏覽器輸入網址 http://localhost:8123/ 進入Home Assistant 主界面,創建智能家居賬號。

詳見:How to run Home Assistant Container on Windows using Docker - Kiril Peyanski's Blog .

安裝 EMQX
使用 EMQX 最簡單的方式是在 EMQX Cloud 上創建完全托管的 MQTT 服務。
這里我們使用 Docker 運行 EMQX
Windows 命令行或 PowerShell 輸入并執行如下代碼
  1. docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest
復制代碼


等待進度條下載和部署完成(大約5分鐘),即可獲得 EMQX 服務器。
Docker 內的 localhost 或 127.0.0.1 指向的是容器內部地址,如需訪問宿主機地址請使用宿主機的真實 IP .
詳見:Gitee .

配置 EMQX
(1)瀏覽器打開網址 http://localhost:18083/ ,初始登錄賬戶名 admin 密碼 public ;
(2)依次打開 訪問控制 - 客戶端認證 - 創建 - Password-Based - 內置數據庫 - (默認配置)- 創建 ;
(3)用戶管理 - 新建用戶 - 自定義用戶名和密碼(建議 admin).

連接 EMQX 與 HA
(1)命令行或 PowerShell 輸入 ipconfig 獲取本地計算機 IPv4 地址,如 42.34.25.153
(2)配置 Home Assistant ,依次點擊設置 - 設備與服務 - 添加集成 - 搜索 MQTT - 填寫代理信息。
代理欄輸入計算機 IP 地址,端口 1883,用戶名和密碼為 EMQX 中創建的用戶信息。
(3)點擊 提交 后顯示 成功創建 MQTT ,此時 集成 選項下出現 MQTT 條目,EMQX 網頁 集群 的 總連接數 和 在線連接數 由 0 變為 1,表明 MQTT 設備已連接。

參考:MQTT 接入 Home Assistant .

連接 ESP8266 與 EMQX
將如下代碼下載至 ESP8266 開發板,
  1. #include <ESP8266WiFi.h>
  2. #include <PubSubClient.h>

  3. #define LED 2 // on-board LED D4

  4. // WiFi
  5. const char *ssid = "xxx"; // Enter your WiFi name
  6. const char *password = "xxxxxx";  // Enter WiFi password

  7. // MQTT Broker
  8. const char *mqtt_broker = "xx.xx.xx.xx"; // EMQX Server IP
  9. const char *topic = "emqx/esp8266"; // MQTTX topic
  10. const char *mqtt_username = "UART"; // EMQX Server User Name
  11. const char *mqtt_password = "123456"; //EMQX Server User Password
  12. const int mqtt_port = 1883;

  13. bool ledState = false;

  14. WiFiClient espClient;
  15. PubSubClient client(espClient);

  16. void setup() {
  17.     // Set software serial baud to 115200;
  18.     Serial.begin(115200);
  19.     delay(1000); // Delay for stability

  20.     // Connecting to a WiFi network
  21.     WiFi.begin(ssid, password);
  22.     while (WiFi.status() != WL_CONNECTED) {
  23.         delay(500);
  24.         Serial.println("Connecting to WiFi...");
  25.     }
  26.     Serial.println("Connected to the WiFi network");

  27.     // Setting LED pin as output
  28.     pinMode(LED, OUTPUT);
  29.     digitalWrite(LED, LOW);  // Turn off the LED initially

  30.     // Connecting to an MQTT broker
  31.     client.setServer(mqtt_broker, mqtt_port);
  32.     client.setCallback(callback);
  33.     while (!client.connected()) {
  34.         String client_id = "esp8266-client-";
  35.         client_id += String(WiFi.macAddress());
  36.         Serial.printf("The client %s connects to the public MQTT broker\n", client_id.c_str());
  37.         if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
  38.             Serial.println("Public EMQX MQTT broker connected");
  39.         } else {
  40.             Serial.print("Failed with state ");
  41.             Serial.print(client.state());
  42.             delay(2000);
  43.         }
  44.     }

  45.     // Publish and subscribe
  46.     client.publish(topic, "hello emqx");
  47.     client.subscribe(topic);
  48. }

  49. void callback(char *topic, byte *payload, unsigned int length) {
  50.     Serial.print("Message arrived in topic: ");
  51.     Serial.println(topic);
  52.     Serial.print("Message: ");
  53.     String message;
  54.     for (int i = 0; i < length; i++) {
  55.         message += (char) payload[i];  // Convert *byte to string
  56.     }
  57.     Serial.print(message);
  58.     if (message == "on" && !ledState) {
  59.         digitalWrite(LED, LOW);  // Turn on the LED
  60.         ledState = true;
  61.     }
  62.     if (message == "off" && ledState) {
  63.         digitalWrite(LED, HIGH); // Turn off the LED
  64.         ledState = false;
  65.     }
  66.     Serial.println();
  67.     Serial.println("-----------------------");
  68. }

  69. void loop() {
  70.     client.loop();
  71.     delay(100); // Delay for a short period in each loop iteration
  72. }
復制代碼


需要注意 MQTT 服務器地址,若是 EMQX Cloud,則根據創建遠程節點填寫地址;若是本地計算機或Docker容器,則填寫本地物理 IP 地址。
主題為 MQTTX 客戶端定義的訂閱名稱,客戶名和密碼則對應 EMQX 服務器客戶端用戶定義。

測試

在 MQTTX 客戶端向目標主題發送控制文本 on 和 off 以控制板載 LED

注意發送文本格式選項更改為 Plaintext .
Arduino IDE 的串口助手監控可以觀察到反饋信息

與 MQTTX 客戶端操作類似,在 HomeAssistant 的 MQTT 設置 中向目標主題發送消息,即可控制 LED 的亮滅

參考:ESP8266 + MQTT :如何實現 LED 燈的遠程控制 | EMQ

視頻
https://www.bilibili.com/video/BV1CrsYeHEsZ/



總結

完成該項目的關鍵在于環境搭建,即 HomeAssistantEMQX 服務器的安裝,由于是在 Windows 操作系統環境下,需要將其安裝于 Docker 容器中運行,而 Docker 軟件通過檢索實現鏡像安裝需要科學上網,因此環境搭建是關鍵。
此外,該項目可進行擴展連接智能家居平臺 HomeAssistant,同樣安裝于 Docker 容器,只需要進行 MQTT 配置即可實現開關可視化和 APP 遠程 LED 控制。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:65237 發表于 2024-9-25 09:21 | 只看該作者
看了樓主的介紹,有沒有一完整的例程,能實現手機上控制,ESP8266收到指令后,反回一條控制信息,如已起動
回復

使用道具 舉報

板凳
ID:1110079 發表于 2024-9-26 05:40 | 只看該作者
阿飛7812 發表于 2024-9-25 09:21
看了樓主的介紹,有沒有一完整的例程,能實現手機上控制,ESP8266收到指令后,反回一條控制信息,如已起動

可以實現的,只需要在loop里添加一條串口發送代碼即可
回復

使用道具 舉報

地板
ID:65237 發表于 2024-9-26 09:22 | 只看該作者
lijinlei 發表于 2024-9-26 05:40
可以實現的,只需要在loop里添加一條串口發送代碼即可

謝謝你的指點,有沒有具體的例程,我現在在學,搞的的地方還不怎么懂,望指點啊
回復

使用道具 舉報

5#
ID:580781 發表于 2025-4-7 20:07 | 只看該作者
好文章,正在學習中,感謝樓主分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 69堂永久69tangcom | 超碰欧美 | 一级毛片成人免费看a | 动漫www.被爆羞羞av44 | 国产精品久久久久久模特 | 国产精品一区二区视频 | 欧美久久国产 | 黄网站在线播放 | 亚洲一区亚洲二区 | 国产亚洲一区二区三区在线观看 | 国产精品久久亚洲 | 91精品欧美久久久久久久 | 毛片免费在线 | 亚洲第一成人影院 | 久久精品免费 | 国产精品久久国产精品 | 国产美女免费视频 | 亚洲天堂影院 | 精品自拍视频 | 中日韩av | 久久99精品国产 | 黄色一级免费观看 | 宅女噜噜66国产精品观看免费 | 亚洲一区二区在线播放 | 中文字幕免费 | 欧美日韩国产一区二区三区不卡 | 综合精品 | 在线观看av网站 | 亚洲最大福利网 | 国产精品久久久亚洲 | 日韩精品成人网 | 国产精品一区久久久 | 麻豆一区二区三区精品视频 | 国产成人精品久久 | 日韩在线视频播放 | 亚洲一级二级三级 | 美女国产 | 久久久国产一区二区 | 久久久久国产一区二区三区四区 | 日韩欧美国产一区二区三区 | 欧美一区二区三区在线观看 |