最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【零基礎(chǔ)學(xué)物聯(lián)網(wǎng)】MQTT篇 2-2 ESP8266 QoS 應(yīng)用

2020-12-09 11:51 作者:太極創(chuàng)客  | 我要投稿

為了幫助您學(xué)習(xí),我們專門為本教程制作了視頻。

在本節(jié)課里,我們將使用ESP8266配合MQTTfx客戶端軟件,通過(guò)實(shí)際操作來(lái)看一下MQTT的QoS是如何發(fā)揮作用的。

在開始本節(jié)課以前請(qǐng)確保您的電腦已經(jīng)成功安裝了MQTTfx軟件。另外我們還將使用PubSubClient庫(kù)。您可以通過(guò)以下鏈接獲取此庫(kù)。

- 官網(wǎng)地址:https://pubsubclient.knolleary.net/
- GitHub:https://github.com/knolleary/pubsubclient/
- 百度網(wǎng)盤下載:https://pan.baidu.com/s/12MHGbdfiOdwOGip5RMSSEQ 提取碼: sizy

PubSubClient庫(kù)目前只支持1級(jí)QoS訂閱,因此我們將僅介紹如何使用ESP8266通過(guò)QoS=1模式訂閱和接收MQTT消息。

使用ESP8266接收QoS=1的MQTT消息

要使用QoS=1訂閱MQTT消息,需要滿足以下要求:

1 接收端要有確定的clientID
2 接收端連接服務(wù)器時(shí) cleanSession=False
3 發(fā)送端發(fā)布消息時(shí) QoS=1或QoS=2
4 接收端訂閱消息時(shí) QoS=1

通過(guò)以下示例程序,您將可以實(shí)現(xiàn)ESP8266 QoS1訂閱主題。如需了解本程序的詳細(xì)使用方法和內(nèi)容,請(qǐng)參考本文首部的視頻。

/**********************************************************************

項(xiàng)目名稱/Project??????????: 零基礎(chǔ)入門學(xué)用物聯(lián)網(wǎng)

程序名稱/Program name???? : subscribe_qos1

團(tuán)隊(duì)/Team????????????????: 太極創(chuàng)客團(tuán)隊(duì) / Taichi-Maker (www.taichi-maker.com)

作者/Author??????????????: CYNO朔

日期/Date(YYYYMMDD)???? : 20200813

程序目的/Purpose??????????:

本程序旨在演示如何使用PubSubClient庫(kù)使用ESP8266向MQTT服務(wù)器訂閱信息。

訂閱QoS級(jí)別為1。

?

- 在此程序控制下,ESP8266啟動(dòng)后將會(huì)嘗試連接MQTT服務(wù)端。

??連接時(shí)cleanSession=false。

- 接下來(lái)ESP8266在訂閱主題時(shí),將QoS設(shè)置為1。

- 保持ESP8266在線,使用MQTTfx向ESP8266所訂閱的主題發(fā)布QoS=1的信息。

- ESP8266將會(huì)收到信息(至此還沒有體現(xiàn)QoS=1的優(yōu)勢(shì))

- 將ESP8266斷電,然后再次使用MQTTfx向ESP8266訂閱主題發(fā)布QoS=1的信息。

??此時(shí)由于ESP8266未通電,所以無(wú)法接收到MQTTfx發(fā)送的信息。因此MQTT服務(wù)端

??將會(huì)保存此信息。

- 將ESP8266再次通電,ESP8266連接到MQTT服務(wù)端后,將會(huì)馬上收到了MQTTfx在ESP8266斷電時(shí)所發(fā)送的信息。(這就是QoS=1的優(yōu)勢(shì),即客戶端斷電再通電后依然可以收到QoS=1信息。)

?

要使用QoS=1訂閱MQTT消息,需要滿足以下要求:

1 接收端要有確定的clientID

2 接收端連接服務(wù)器時(shí) cleanSession=False

3 發(fā)送端發(fā)布消息時(shí) QoS=1或QoS=2

4 接收端訂閱消息時(shí) QoS=1

-----------------------------------------------------------------------

本示例程序?yàn)樘珮O創(chuàng)客團(tuán)隊(duì)制作的《零基礎(chǔ)入門學(xué)用物聯(lián)網(wǎng)》中示例程序。

該教程為對(duì)物聯(lián)網(wǎng)開發(fā)感興趣的朋友所設(shè)計(jì)和制作。如需了解更多該教程的信息,請(qǐng)參考以下網(wǎng)頁(yè):

http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/esp8266-nodemcu-web-client/http-request/

***********************************************************************/

#include <ESP8266WiFi.h>

#include <PubSubClient.h>

?

// 設(shè)置wifi接入信息(請(qǐng)根據(jù)您的WiFi信息進(jìn)行修改)

const char* ssid = "taichi-maker";

const char* password = "12345678";

const char* mqttServer = "test.ranye-iot.net";

// 如以上MQTT服務(wù)器無(wú)法正常連接,請(qǐng)前往以下頁(yè)面尋找解決方案

// http://www.taichi-maker.com/public-mqtt-broker/

?

WiFiClient wifiClient;

PubSubClient mqttClient(wifiClient);

?

const int subQoS = 1;???? // 客戶端訂閱主題時(shí)使用的QoS級(jí)別(截止2020-10-07,僅支持QoS = 1,不支持QoS = 2)

const bool cleanSession = false; // 清除會(huì)話(如QoS>0必須要設(shè)為false)

?

const char* willTopic = "willTopic"; // 遺囑主題名稱

const char* willMsg = "willMsg";???? // 遺囑主題信息

const int willQos = 0;?????????????? // 遺囑QoS

const int willRetain = false;????????// 遺囑保留

?

void setup() {

??pinMode(LED_BUILTIN, OUTPUT);???? // 設(shè)置板上LED引腳為輸出模式

??digitalWrite(LED_BUILTIN, HIGH);??// 啟動(dòng)后關(guān)閉板上LED

??Serial.begin(9600);?????????????? // 啟動(dòng)串口通訊

??

??//設(shè)置ESP8266工作模式為無(wú)線終端模式

??WiFi.mode(WIFI_STA);

??

??// 連接WiFi

??connectWifi();

??

??// 設(shè)置MQTT服務(wù)器和端口號(hào)

??mqttClient.setServer(mqttServer, 1883);

??mqttClient.setCallback(receiveCallback);

?

??// 連接MQTT服務(wù)器

??connectMQTTserver();

}

?

void loop() {

??// 如果開發(fā)板未能成功連接服務(wù)器,則嘗試連接服務(wù)器

??if (!mqttClient.connected()) {

????connectMQTTserver();

??}

?

?? // 處理信息以及心跳

?? mqttClient.loop();

??

}

?

// 連接MQTT服務(wù)器并訂閱信息

void connectMQTTserver(){

??// 根據(jù)ESP8266的MAC地址生成客戶端ID(避免與其它ESP8266的客戶端ID重名)

??String clientId = "client-" + WiFi.macAddress();

?

??/* 連接MQTT服務(wù)器

??boolean connect(const char* id, const char* user,

??????????????????const char* pass, const char* willTopic,

??????????????????uint8_t willQos, boolean willRetain,

??????????????????const char* willMessage, boolean cleanSession);

??若讓設(shè)備在離線時(shí)仍然能夠讓qos1工作,則connect時(shí)的cleanSession需要設(shè)置為false????????????????

??????????????????*/

??if (mqttClient.connect(clientId.c_str(), NULL, NULL, willTopic, willQos, willRetain, willMsg, cleanSession)) {

????Serial.print("MQTT Server Connected. ClientId: ");

????Serial.println(clientId);

????subscribeTopic(); // 訂閱指定主題

??} else {

????Serial.print("MQTT Server Connect Failed. Client State:");

????Serial.println(mqttClient.state());

????delay(5000);

??}??

}

?

// 收到信息后的回調(diào)函數(shù)

void receiveCallback(char* topic, byte* payload, unsigned int length) {

??Serial.print("Message Received [");

??Serial.print(topic);

??Serial.print("] ");

??for (int i = 0; i < length; i++) {

????Serial.print((char)payload[i]);

??}

??Serial.println("");

??Serial.print("Message Length(Bytes) ");

??Serial.println(length);

?

??if ((char)payload[0] == '1') {???? // 如果收到的信息以“1”為開始

????digitalWrite(BUILTIN_LED, LOW);??// 則點(diǎn)亮LED。

??} else {??????????????????????????

????digitalWrite(BUILTIN_LED, HIGH); // 否則熄滅LED。

??}

}

?

// 訂閱指定主題

void subscribeTopic(){

??// 建立訂閱主題。主題名稱以Taichi-Maker-Sub為前綴,后面添加設(shè)備的MAC地址。

??// 這么做是為確保不同設(shè)備使用同一個(gè)MQTT服務(wù)器測(cè)試消息訂閱時(shí),所訂閱的主題名稱不同

??String topicString = "Taichi-Maker-Sub-" + WiFi.macAddress();

??char subTopic[topicString.length() + 1];??

??strcpy(subTopic, topicString.c_str());

??

??// 通過(guò)串口監(jiān)視器輸出是否成功訂閱主題以及訂閱的主題名稱

??// 請(qǐng)注意subscribe函數(shù)第二個(gè)參數(shù)數(shù)字為QoS級(jí)別。這里為QoS = 1

??if(mqttClient.subscribe(subTopic, subQoS)){

????Serial.print("Subscribed Topic: ");

????Serial.println(subTopic);

??} else {

????Serial.print("Subscribe Fail...");

??}??

}

?

// ESP8266連接wifi

void connectWifi(){

?

??WiFi.begin(ssid, password);

??//等待WiFi連接,成功連接后輸出成功信息

??while (WiFi.status() != WL_CONNECTED) {

????delay(1000);

????Serial.print(".");

??}

??Serial.println("");

??Serial.println("WiFi Connected!");??

??Serial.println("");

}

假如您也喜歡太極創(chuàng)客,希望您將本文“分享”給更多的人,讓更多朋友認(rèn)識(shí)我們。您的每一份點(diǎn)贊與投幣,都是對(duì)我們最溫暖的鼓勵(lì)與支持。

本文編輯制作:CYNO朔 (https://space.bilibili.com/415252426/)

【零基礎(chǔ)學(xué)物聯(lián)網(wǎng)】MQTT篇 2-2 ESP8266 QoS 應(yīng)用的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
和田市| 建水县| 阳西县| 湖北省| 宣城市| 和田县| 江永县| 积石山| 潞西市| 苍山县| 南宫市| 穆棱市| 阳泉市| 永修县| 宁夏| 常熟市| 怀仁县| 黄平县| 桦川县| 虞城县| 团风县| 丹棱县| 福鼎市| 西乌| 佳木斯市| 大洼县| 襄汾县| 荥经县| 滨州市| 山阴县| 鲜城| 三河市| 图们市| 诸城市| 昆明市| 桓仁| 汉源县| 襄樊市| 久治县| 乌兰浩特市| 丽水市|