0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ESP8266 通過 MQTT 協(xié)議實(shí)現(xiàn) LED 的遠(yuǎn)程控制

jf_07365693 ? 來源:jf_07365693 ? 作者:jf_07365693 ? 2024-09-25 09:11 ? 次閱讀

ESP8266 通過 MQTT 協(xié)議實(shí)現(xiàn) LED 的遠(yuǎn)程控制

本文簡(jiǎn)要介紹了搭建 EMQX 服務(wù)器實(shí)現(xiàn)基于 MQTT 協(xié)議遠(yuǎn)程控制 NodeMCU ESP8266 板載 LED 的解決方案。

簡(jiǎn)介

1. MQTT

[MQTT] (Message Queuing Telemetry Transport)是一種基于 publish/subscribe (發(fā)布/訂閱) 模式的 輕量級(jí) 通訊協(xié)議,構(gòu)建于 TCP/IP 協(xié)議上,由 IBM 在1999年發(fā)布。

image.png

MQTT 可以實(shí)現(xiàn)用極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實(shí)時(shí)可靠的消息服務(wù) 。

2. EMQX

[EMQX] 是一款大規(guī)模分布式物聯(lián)網(wǎng) MQTT 服務(wù)器,單集群支持 1 億物聯(lián)網(wǎng)設(shè)備連接,消息分發(fā)時(shí)延低于 1 毫秒。為高可靠、高性能的物聯(lián)網(wǎng)實(shí)時(shí)數(shù)據(jù)移動(dòng)、處理和集成提供動(dòng)力。

3. Home Assistant

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

方案

安裝 Home Assistant

**使用 **[Docker]容器安裝 [Home Assistant] ,

  1. **下載 **[Docker] 軟件;
  2. **C 盤根目錄新建文件夾 **homeassistant ;
  3. **下載部署文件 **[GitHub] 并解壓得到 docker-compose.yml 保存至上述 homeassistant 文件夾;
  4. **Windows 打開 **命令提示符Windows PowerShell,輸入如下代碼實(shí)現(xiàn)自動(dòng)下載鏡像
cd C:homeassistant
docker-compose.yml
docker-compose up
  1. 安裝過程需大約 30 分鐘,即可在 Docker 容器中創(chuàng)建 Home Assistant 鏡像;
  2. **自動(dòng)從鏡像安裝 Home Assistant 到容器。代碼文件 **docker-compose.yml 將映射 Home Assistant 配置文件到 C:/homeassistant 文件夾;
  3. **瀏覽器輸入網(wǎng)址 **http://localhost:8123/ 進(jìn)入Home Assistant 主界面,創(chuàng)建智能家居賬號(hào)。

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

安裝 EMQX

**使用 EMQX 最簡(jiǎn)單的方式是在 **[EMQX Cloud]上創(chuàng)建完全托管的 MQTT 服務(wù)。

這里我們使用 Docker 運(yùn)行 EMQX

Windows 命令行或 PowerShell 輸入并執(zhí)行如下代碼

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest

等待進(jìn)度條下載和部署完成(大約5分鐘),即可獲得 EMQX 服務(wù)器。

**Docker 內(nèi)的 **localhost127.0.0.1 指向的是容器內(nèi)部地址,如需訪問宿主機(jī)地址請(qǐng)使用宿主機(jī)的真實(shí) IP .

詳見: [Gitee] .

配置 EMQX

**(1)瀏覽器打開網(wǎng)址 **http://localhost:18083/ ,初始登錄賬戶名 admin 密碼 public ;

**(2)依次打開 **訪問控制 - 客戶端認(rèn)證 - 創(chuàng)建 - Password-Based - 內(nèi)置數(shù)據(jù)庫(kù) - (默認(rèn)配置)- 創(chuàng)建 ;

(3)用戶管理 - 新建用戶 - 自定義用戶名和密碼(建議 admin).

連接 EMQX 與 HA

**(1)命令行或 PowerShell 輸入 **ipconfig 獲取本地計(jì)算機(jī) IPv4 地址,如 42.34.25.153

(2)配置 Home Assistant ,依次點(diǎn)擊設(shè)置 - 設(shè)備與服務(wù) - 添加集成 - 搜索 MQTT - 填寫代理信息。

代理欄輸入計(jì)算機(jī) IP 地址,端口 1883,用戶名和密碼為 EMQX 中創(chuàng)建的用戶信息。

**(3)點(diǎn)擊 **提交 后顯示 成功創(chuàng)建 MQTT ,此時(shí) 集成 選項(xiàng)下出現(xiàn) MQTT 條目,EMQX 網(wǎng)頁(yè) 集群總連接數(shù)在線連接數(shù)0 變?yōu)?1,表明 MQTT 設(shè)備已連接。

參考: [MQTT 接入 Home Assistant] .

連接 ESP8266 與 EMQX

將如下代碼下載至 ESP8266 開發(fā)板,

需要注意 MQTT 服務(wù)器地址,若是 EMQX Cloud,則根據(jù)創(chuàng)建遠(yuǎn)程節(jié)點(diǎn)填寫地址;若是本地計(jì)算機(jī)或Docker容器,則填寫本地物理 IP 地址。

主題為 MQTTX 客戶端定義的訂閱名稱,客戶名和密碼則對(duì)應(yīng) EMQX 服務(wù)器客戶端用戶定義。

#include < ESP8266WiFi.h >
#include < PubSubClient.h >
?
#define LED 2 // on-board LED D4
?
// WiFi
const char *ssid = "xxx"; // Enter your WiFi name
const char *password = "xxxxxx";  // Enter WiFi password
?
// MQTT Broker
const char *mqtt_broker = "xx.xx.xx.xx"; // EMQX Server IP
const char *topic = "emqx/esp8266"; // MQTTX topic
const char *mqtt_username = "UART"; // EMQX Server User Name
const char *mqtt_password = "123456"; //EMQX Server User Password
const int mqtt_port = 1883;
?
bool ledState = false;
?
WiFiClient espClient;
PubSubClient client(espClient);
?
void setup() {
    // Set software serial baud to 115200;
    Serial.begin(115200);
    delay(1000); // Delay for stability
?
    // Connecting to a WiFi network
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.println("Connecting to WiFi...");
    }
    Serial.println("Connected to the WiFi network");
?
    // Setting LED pin as output
    pinMode(LED, OUTPUT);
    digitalWrite(LED, LOW);  // Turn off the LED initially
?
    // Connecting to an MQTT broker
    client.setServer(mqtt_broker, mqtt_port);
    client.setCallback(callback);
    while (!client.connected()) {
        String client_id = "esp8266-client-";
        client_id += String(WiFi.macAddress());
        Serial.printf("The client %s connects to the public MQTT brokern", client_id.c_str());
        if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
            Serial.println("Public EMQX MQTT broker connected");
        } else {
            Serial.print("Failed with state ");
            Serial.print(client.state());
            delay(2000);
        }
    }
?
    // Publish and subscribe
    client.publish(topic, "hello emqx");
    client.subscribe(topic);
}
?
void callback(char *topic, byte *payload, unsigned int length) {
    Serial.print("Message arrived in topic: ");
    Serial.println(topic);
    Serial.print("Message: ");
    String message;
    for (int i = 0; i < length; i++) {
        message += (char) payload[i];  // Convert *byte to string
    }
    Serial.print(message);
    if (message == "on" && !ledState) {
        digitalWrite(LED, LOW);  // Turn on the LED
        ledState = true;
    }
    if (message == "off" && ledState) {
        digitalWrite(LED, HIGH); // Turn off the LED
        ledState = false;
    }
    Serial.println();
    Serial.println("-----------------------");
}
?
void loop() {
    client.loop();
    delay(100); // Delay for a short period in each loop iteration
}

測(cè)試

在 MQTTX 客戶端向目標(biāo)主題發(fā)送控制文本 onoff 以控制板載 LED

image.png

**注意發(fā)送文本格式選項(xiàng)更改為 **Plaintext .

Arduino IDE 的串口助手監(jiān)控可以觀察到反饋信息

image.png

**與 MQTTX 客戶端操作類似,在 HomeAssistant 的 **MQTT 設(shè)置 中向目標(biāo)主題發(fā)送消息,即可控制 LED 的亮滅

image.png

參考: [ESP8266 + MQTT :如何實(shí)現(xiàn) LED 燈的遠(yuǎn)程控制 | EMQ (emqx.com)]

視頻展示

?

?

總結(jié)

**完成該項(xiàng)目的關(guān)鍵在于環(huán)境搭建,即 **HomeAssistantEMQX 服務(wù)器的安裝,由于是在 Windows 操作系統(tǒng)環(huán)境下,需要將其安裝于 Docker 容器中運(yùn)行,而 Docker 軟件通過檢索實(shí)現(xiàn)鏡像安裝需要科學(xué)上網(wǎng),因此環(huán)境搭建是關(guān)鍵。

**此外,該項(xiàng)目可進(jìn)行擴(kuò)展連接智能家居平臺(tái) ** HomeAssistant ,同樣安裝于 Docker 容器,只需要進(jìn)行 MQTT 配置即可實(shí)現(xiàn)開關(guān)可視化和 APP 遠(yuǎn)程 LED 控制,參考[文章],具體操作如下

**修改 HA 配置文件 **configuration.yaml 添加如下代碼,實(shí)現(xiàn) LED 開關(guān)的界面可視化

# add light
mqtt:
  light:
    # Device name
    - name: "On-board LED"
    # State topic
      state_topic: "emqx/esp8266"
    # Command topic
      command_topic: "emqx/esp8266"
    # Command type
      payload_on: "on"
      payload_off: "off"
    # unique_ID
      unique_id: "on-board LED"
    # optimistic set
      optimistic: false

配置文件 configuration.yaml 的路徑根據(jù) HA 安裝位置確定

保存配置文件后,在 開發(fā)者工具 中點(diǎn)擊 所有 YAML 配置 實(shí)現(xiàn)重載配置文件,效果如下

image.png

點(diǎn)擊開關(guān)按鈕即可實(shí)現(xiàn) NodeMCU-ESP8266 板載 LED 的亮滅控制。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23277

    瀏覽量

    660842
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2909

    文章

    44634

    瀏覽量

    373311
  • 遠(yuǎn)程控制
    +關(guān)注

    關(guān)注

    4

    文章

    630

    瀏覽量

    34928
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6469

    瀏覽量

    187053
  • ESP8266
    +關(guān)注

    關(guān)注

    50

    文章

    962

    瀏覽量

    44999
  • MQTT協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    97

    瀏覽量

    5368
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    遠(yuǎn)程控制通訊--基于Arduino + ESP8266控制LED

    Arduino是許多智能硬件愛好者的首選,使用簡(jiǎn)單快捷,而ESP8266模塊也是當(dāng)前最為熱門的WIFI模塊。本項(xiàng)目完成了Arduino使用EDP協(xié)議通過ESP8266 WIFI模塊接入
    的頭像 發(fā)表于 02-27 09:10 ?4w次閱讀
    <b class='flag-5'>遠(yuǎn)程控制</b>通訊--基于Arduino + <b class='flag-5'>ESP8266</b><b class='flag-5'>控制</b><b class='flag-5'>LED</b>燈

    ESP8266 通過 MQTT 協(xié)議實(shí)現(xiàn) LED遠(yuǎn)程控制

    MQTT協(xié)議
    jf_07365693
    發(fā)布于 :2024年09月25日 16:05:05

    ESP8266模塊想實(shí)現(xiàn)手機(jī)遠(yuǎn)程控制

    arduino開發(fā)板,ESP8266WiFi模塊想實(shí)現(xiàn)手機(jī)遠(yuǎn)程控制,哪位大神有這方面的經(jīng)驗(yàn)資料,幫忙發(fā)一份吧,拜求
    發(fā)表于 05-08 17:50

    如何實(shí)現(xiàn)esp8266開發(fā)用按鈕遠(yuǎn)程控制?

    想要在安卓系統(tǒng)上做個(gè)界面,界面上有按鈕,比如按鈕按下去之后可以遠(yuǎn)程控制esp8266WIFI模塊給單片機(jī)發(fā)消息,然后單片機(jī)控制電機(jī)轉(zhuǎn),要實(shí)現(xiàn)這樣的功能該怎么做啊
    發(fā)表于 07-22 04:32

    如何使用EDP協(xié)議通過ESP8266 WIFI模塊接入OneNET服務(wù)器來實(shí)現(xiàn)遠(yuǎn)程控制LED燈?

    本項(xiàng)目完成了Arduino使用EDP協(xié)議通過ESP8266 WIFI模塊接入OneNET服務(wù)器,并通過在接入設(shè)備中創(chuàng)建的應(yīng)用來實(shí)現(xiàn)
    發(fā)表于 06-16 08:29

    請(qǐng)問esp8266如何通過mqtt協(xié)議建立連接實(shí)現(xiàn)小車的遠(yuǎn)程控制?

    請(qǐng)問esp8266如何通過mqtt協(xié)議建立連接實(shí)現(xiàn)小車的遠(yuǎn)程控制?
    發(fā)表于 11-01 06:32

    如何利用STM32+ESP8266實(shí)現(xiàn)遠(yuǎn)程控制LED

    如何利用STM32+ESP8266實(shí)現(xiàn)遠(yuǎn)程控制LED呢?有哪些基本步驟?
    發(fā)表于 12-08 07:26

    ESP8266遠(yuǎn)程控制開關(guān)的方法分享

    ESP8266遠(yuǎn)程控制開關(guān)示例超全面詳細(xì)1 背景描述ESP8266模塊是比較標(biāo)準(zhǔn)方便的wifi開發(fā)模塊,把他當(dāng)做為單片機(jī),有輸入輸出引腳和操作指令、內(nèi)存,就是一個(gè)計(jì)算機(jī)了。引腳收發(fā)接口可做串口通訊
    發(fā)表于 02-28 14:34

    ESP8266通過MQTT訂閱主題并推送數(shù)據(jù)到ONENET

    ESP8266-12E/F 固件下載:http://www.micropython.org/download#esp8266 源代碼倉(cāng)庫(kù):ESP8266_MQTT_OneNet 【最新】 請(qǐng)移步
    發(fā)表于 12-04 19:03 ?31次下載
    <b class='flag-5'>ESP8266</b><b class='flag-5'>通過</b><b class='flag-5'>MQTT</b>訂閱主題并推送數(shù)據(jù)到ONENET

    ESP8266制作能通過手機(jī)遠(yuǎn)程控制的智能插座

    ESP8266制作智能插座!手機(jī)遠(yuǎn)程控制,讓家電瘋狂起來~
    的頭像 發(fā)表于 06-04 06:26 ?6796次閱讀

    實(shí)現(xiàn)微信小程序和手機(jī)app遠(yuǎn)程控制51單片機(jī)控制L298N電機(jī)驅(qū)動(dòng)器控制馬達(dá)(ESP8266 AT89S52 http請(qǐng)求轉(zhuǎn)串口通信系統(tǒng)

    實(shí)現(xiàn)微信小程序和手機(jī)app遠(yuǎn)程控制51單片機(jī)控制L298N電機(jī)驅(qū)動(dòng)器控制馬達(dá)(ESP8266 AT89S52 http請(qǐng)求轉(zhuǎn)串口通信系統(tǒng)
    發(fā)表于 11-23 16:51 ?27次下載
    <b class='flag-5'>實(shí)現(xiàn)</b>微信小程序和手機(jī)app<b class='flag-5'>遠(yuǎn)程控制</b>51單片機(jī)<b class='flag-5'>控制</b>L298N電機(jī)驅(qū)動(dòng)器<b class='flag-5'>控制</b>馬達(dá)(<b class='flag-5'>ESP8266</b> AT89S52 http請(qǐng)求轉(zhuǎn)串口通信系統(tǒng)

    ESP8266連接手機(jī)

    esp8266的三種模式1為Station 模式:ESP8266 模塊通過路由器連接互聯(lián)網(wǎng),手機(jī)或電腦通過互聯(lián)網(wǎng)實(shí)現(xiàn)對(duì)設(shè)備的
    發(fā)表于 11-30 16:06 ?37次下載
    <b class='flag-5'>ESP8266</b>連接手機(jī)

    ESP8266通過MQTT協(xié)議連接ONENET

    將介紹通過MQTT協(xié)議連接ONENET,實(shí)現(xiàn)ESP8266與ONENET平臺(tái)數(shù)據(jù)交互一、設(shè)計(jì)目標(biāo)實(shí)現(xiàn)
    發(fā)表于 01-12 19:58 ?53次下載
    <b class='flag-5'>ESP8266</b><b class='flag-5'>通過</b><b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>連接ONENET

    STM32 + ESP8266 + MQTT協(xié)議連接OneNet

    STM32+ESP8266使用標(biāo)準(zhǔn)MQTT協(xié)議登錄Onenet服務(wù)器,實(shí)現(xiàn)數(shù)據(jù)交互。
    的頭像 發(fā)表于 02-28 13:22 ?1.9w次閱讀
    STM32 + <b class='flag-5'>ESP8266</b> + <b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b>連接OneNet

    ESP8266接入小愛同學(xué)—智能LED臺(tái)燈或風(fēng)扇(利用繼電器)

    實(shí)現(xiàn)應(yīng)用程序在局域網(wǎng)內(nèi)升級(jí),解除數(shù)據(jù)線限制 3.通過MQTT協(xié)議實(shí)現(xiàn)擺脫局域網(wǎng)限制的遠(yuǎn)程控制
    發(fā)表于 05-04 11:37 ?1次下載
    <b class='flag-5'>ESP8266</b>接入小愛同學(xué)—智能<b class='flag-5'>LED</b>臺(tái)燈或風(fēng)扇(利用繼電器)