【零基礎學物聯網】MQTT篇 1-6 ESP8266發布MQTT消息

2021-03-02 太極創客

到目前為止,我們已經學習了發布和訂閱MQTT消息的基本知識,這節課我們來將目前所學的知識應用到實際操作中。我們將要利用ESP8266來實現最基本的MQTT消息發布。

本節課的學習將需要您掌握ESP8266的基本操作,假如您對ESP8266的基本操作不太了解,您可以先通過以下小程序觀看我們製作的《零基礎入門學用物聯網 - 基礎知識篇》。

假如您已經完成以上教程,那麼接下來您就可以繼續這節課的學習了。

ESP8266的Arduino開發環境裡有多個MQTT庫,我們將使用最為流行的PubSubClient庫來作為本教程的主要介紹對象,我們將通過一系列課程教您如何使用ESP8266通過PubSubClient庫來實現MQTT物聯網應用。

關於PubSubClient庫,您可以通過以下連結獲取。


官網地址:https://pubsubclient.knolleary.net/
GitHub:https://github.com/knolleary/pubsubclient/

另外,在之前的課程裡我們學習了如何使用ESP8266連接MQTT服務端。您可以通過以下連接前往該教程文章。

【零基礎學物聯網】MQTT篇 1-4 服務端連接操作

發布MQTT消息示例程序

通過以下示例程序,我們將可以讓ESP8266向公用MQTT伺服器發布消息。

您可以點擊本文開始的B站視頻小程序,即可觀看本程序的詳細講解視頻教程。

#include <ESP8266WiFi.h>#include <PubSubClient.h>#include <Ticker.h> const char* ssid = "taichi-maker";const char* password = "12345678";const char* mqttServer = "test.ranye-iot.net";  Ticker ticker;WiFiClient wifiClient;PubSubClient mqttClient(wifiClient); int count;     void setup() {  Serial.begin(9600);      WiFi.mode(WIFI_STA);      connectWifi();      mqttClient.setServer(mqttServer, 1883);     connectMQTTServer();     ticker.attach(1, tickerCount);  } void loop() {   if (mqttClient.connected()) {         if (count >= 3){      pubMQTTmsg();      count = 0;    }            mqttClient.loop();  } else {                      connectMQTTServer();      }} void tickerCount(){  count++;} void connectMQTTServer(){    String clientId = "esp8266-" + WiFi.macAddress();     if (mqttClient.connect(clientId.c_str())) {     Serial.println("MQTT Server Connected.");    Serial.println("Server Address: ");    Serial.println(mqttServer);    Serial.println("ClientId:");    Serial.println(clientId);  } else {    Serial.print("MQTT Server Connect Failed. Client State:");    Serial.println(mqttClient.state());    delay(3000);  }   } void pubMQTTmsg(){  static int value;        String topicString = "Taichi-Maker-Pub-" + WiFi.macAddress();  char publishTopic[topicString.length() + 1];    strcpy(publishTopic, topicString.c_str());     String messageString = "Hello World " + String(value++);   char publishMsg[messageString.length() + 1];     strcpy(publishMsg, messageString.c_str());      if(mqttClient.publish(publishTopic, publishMsg)){    Serial.println("Publish Topic:");Serial.println(publishTopic);    Serial.println("Publish message:");Serial.println(publishMsg);      } else {    Serial.println("Message Publish Failed.");   }} void connectWifi(){   WiFi.begin(ssid, password);     while (WiFi.status() != WL_CONNECTED) {    delay(1000);    Serial.print(".");  }  Serial.println("");  Serial.println("WiFi Connected!");    Serial.println(""); }

假如您也喜歡太極創客,希望您將本文「分享」或「在看」。 讓更多朋友認識我們。您的每一份支持與鼓勵,都是對我們最溫暖的鼓勵與支持。

謝謝~~~

相關焦點

  • 記一次MQTT協議壓測
    這些信令是雙向的、也有可能是一對多.我們用的MQTT協議,MQTT提供商有很多,比如融雲、阿里雲等MQTT協議概念MQTT協議是基於發布/訂閱模式的物聯網通信協議,憑藉簡單易實現、支持 QoS、報文小等特點,佔據了物聯網協議的半壁江山MQTT協議廣泛應用於物聯網、移動網際網路、智能硬體、車聯網、電力、能源等領域名詞發布訂閱主題會話保持QoS:QoS
  • MQTT 教程詳解(入門篇)
    ProductDescription.html#.E7.89.A9.E6.8E.A5.E5.85.A5MQTT Android github:https://github.com/eclipse/paho.mqtt.androidMQTT 協議在線中文版:https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html
  • 【零基礎學物聯網】MQTT篇 1-2 MQTT基本原理
    確保客戶端之間的通訊順暢,保證MQTT消息得以正確接收和準確投遞。MQTT客戶端MQTT客戶端可以向服務端發布信息,也可以從服務端收取信息。我們把客戶端發送信息的行為成為「發布」信息。而客戶端要想從服務端收取信息,則首先要向服務端「訂閱」信息。「訂閱」信息這一操作很像我們在視頻網站訂閱某一部電視劇。
  • 迅為迅為iTOP-i.MX6ULL 開發板-Mqtt 移植教程
    MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議,是一種基於發布/訂閱 (publish/subscribe)模式的輕量級協議,該協議構建於 TCP/IP 協議之上,
  • MicroPython使用MQTT協議接入OneNET雲平臺
    之前使用Arduino+ESP8266使用EDP協議成功接入了OneNET,實現了物聯網控制,本次使用板載ESP8266的ESP-MP-01 MicroPython開發板使用MQTT協議同樣成功接入,通過發布TOPIC成功實現智能設備控制。
  • 訂閱標識符與訂閱選項 - MQTT 5.0 新特性
    到目前為止,我們已經探討過這些 MQTT v5 新特性 (https://www.emqx.io/cn/mqtt/mqtt5) ,今天我們將繼續討論:訂閱標識符 和 訂閱選項。客戶端可以在訂閱時指定一個訂閱標識符,服務端將在訂閱成功創建或修改時建立並存儲該訂閱與訂閱標識符的映射關係。
  • STM32+W5500+MQTT+Android實現遠程數據採集及控制
    相關背景知識:http://www.embed-net.com/thread-224-1-1.html具體功能為:1,STM32F405為主控晶片,它通過傳感器採集環境數據,比如溫度,溼度,光照度,大氣壓強等;2,主控晶片通過W5500模塊將測量的數據通過MQTT協議方式發布到MQTT伺服器(伺服器域名和IP見固件程序);3,主控訂閱LED燈控制的消息,當接收到對應的控制指令後點亮或者熄滅對應的
  • 女生適不適合學物聯網?
    很多同學在後問小編:女生適合學物聯網嗎?女生學物聯網有前途嗎?女生怎麼學好物聯網?……小編認為,女生學物聯網還是有一定優勢的。在這個僧多粥少……哦不,物以稀為貴的時代,女程式設計師的福利是大大滴有~不過言歸正傳,女生適不適合學物聯網?
  • 阿里雲物聯網新手指南:利用ESP8266遠程啟動電腦
    這裡我們就利用阿里雲物聯網平臺來控制內網設備,再利用ESP8266 NodeMCU這個性價比極高的單片機發出WOL網絡喚醒的魔法包來啟動目標電腦~ESP8266的介紹和入門指南可以參見我上次寫的這篇文章:十塊錢入門物聯網!
  • 智匯華雲:2019前端戰略規劃之物聯網IOT
    物聯網通過智能感知、識別技術與普適計算等通信感知技術,廣泛應用於網絡的融合中,也因此被稱為繼計算機、網際網路之後世界信息產業發展的第三次浪潮。華雲數據「智匯華雲」專欄將為您奉上「2019前端戰略規劃」系列文章,本期將為您講解2019前端戰略規劃之物聯網IOT。
  • MQTT協議是什麼?有什麼技術優勢?|伺服器|物聯網|mqtt|dtu|應用層...
    )是ISO標準(ISO/IECPRF20922)下基於發布/訂閱範式的消息協議。  2014年7月,OASIS組織將MQTT協議v3.1.1版正式接納為國際標準。  至今,MQTT已經廣泛應用於物聯網領域;成為數傳設備與伺服器進行數據交互的標準協議和優選方案,如阿里雲伺服器、百度雲伺服器、中移物聯onenet伺服器等等。  三、MQTT協議的技術優勢
  • 物聯網MQTT—取消訂閱
    上一節我們說到了要訂閱主題和訂閱確認,就相當於你關注了我的微信公眾號:果果小師弟(訂閱主題),那麼我每次發布一條新的文章之後你就會收到。那麼過一段時間你不想關注我的公眾號了就去狠心的取消關注(取消訂閱)。那麼這一節就教你如何來取消關注我的公眾號,可不是點一下取消關注就可以了喲,需要發送相應的報文來取消訂閱。
  • RabbitMQ 3.0.3 發布,高級消息隊列服務
    基於Erlang的高級消息隊列RabbitMQ 3.0.3 發布。2013-03-06 之前版本是2013-01-31的3.0.2 主要是bug 修復。
  • 學物聯網工程能從事什麼職業
    物聯網的發展不僅極大地方便了人們的日常工作、生活,也在推動著通信技術的進步。一、學物聯網工程能從事什麼職業隨著5G的發展,物聯網工程的市場逐漸變得龐大,就業前景也很可觀。目前,物聯網工程專業從事的職業有以下幾個。
  • ESP8266連接DHT11,開發微信小程序實時顯示溫溼度
    第一步,先讀取DHT11溫溼度數值,第二步,新建主題,然後esp8266往這個主題發送消息,第三步。小程序通過http API接口獲取數據。小程序控制原理:esp8266訂閱了一個主題,小程序往這個主題發消息,esp8266就可以收到消息,就可以執行相關控制指令了(開/關函數)關於發布訂閱:訂閱(訂閱):訂閱給定的一個主題/頻道的信息。
  • 鴻蒙MQTT協議開發入門
    MQTT最大優點在於,可以以極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的消息服務。作為一種低開銷、低帶寬佔用的即時通訊協議,使其在物聯網、小型設備、移動應用等方面有較廣泛的應用。MQTT是一個基於客戶端-伺服器的消息發布/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易於實現的,這些特點使它適用範圍非常廣泛。
  • 物聯網架構各個層次使用的是什麼通訊協議
    物聯網架構各個層次使用的是什麼通訊協議 物聯網共享經濟資 發表於 2020-03-18 15:42:41 如下圖所示,本文從以下幾個維度對物聯網常見的幾種協議進行闡述
  • 【太極創客】零基礎入門學用物聯網 - MQTT篇 2-1 QoS 服務質量等級
    發布消息如下圖所示,客戶端發布信息時,PUBLISH數據包中專有一個信息為qos。該信息正是用於設置客戶端發布MQTT消息的QoS等級。假如客戶端在發布和訂閱信息時使用不同級別的QoS,將會發生什麼情況呢。如下圖所示,假如客戶端A發布到主題1的消息是採用QoS = 2,然而客戶端B訂閱主題1採用QoS = 1。那麼服務端該如何來應對這一情況呢?