五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

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

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

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

在這節(jié)課里,我們一起來學(xué)習(xí)如何使用ESP8266來實(shí)現(xiàn)MQTT遺囑應(yīng)用。我們將向您介紹兩段示例程序。以下是這兩段實(shí)例的簡要介紹:

示例1:MQTT遺囑基本應(yīng)用
示例2:利用MQTT遺囑實(shí)現(xiàn)設(shè)備在線狀態(tài)發(fā)布

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

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

當(dāng)您將PubSubClient庫安裝后,我們就可以使用該庫進(jìn)行開發(fā)了。



示例1:MQTT遺囑基本應(yīng)用

本示例程序?qū)?shí)現(xiàn)ESP8266的最基本MQTT遺囑應(yīng)用。程序使用connect函數(shù)對遺囑消息實(shí)現(xiàn)設(shè)置。


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

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

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

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

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

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

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

本程序旨在演示如何設(shè)置客戶端遺囑機(jī)制??蛻舳嗽谶B接服務(wù)器時,設(shè)置遺囑的主題和信息。

?

MQTT服務(wù)器會定時檢查客戶端是否仍然與服務(wù)器連接。為了實(shí)現(xiàn)這一檢查,服務(wù)器將會根據(jù)以下

內(nèi)容進(jìn)行檢查.

1. 客戶端連接時會提供心跳時間間隔(Keep Alive)。

2. 如果在心跳時間間隔時長內(nèi),客戶端向服務(wù)器發(fā)布了消息,則

?? 服務(wù)器會認(rèn)為客戶端與服務(wù)器保持連接無誤。

3. 如果在心跳時間間隔時長內(nèi),客戶端沒有向服務(wù)端發(fā)布消息,

?? 客戶端會向服務(wù)端發(fā)送pingreq信息。此信息由PubSubClient庫自動發(fā)送。

4. 我們可以通過setKeepAlive函數(shù)控制心跳時間間隔時長,或者可以通過PubSubClient.h

?? 的#define MQTT_KEEPALIVE 15來設(shè)置心跳時間間隔時長。

4. 在心跳時間間隔的1.5倍時長內(nèi),如果服務(wù)端沒有收到客戶端信息也沒有pingreq。

?? 那么服務(wù)端將會執(zhí)行客戶端遺囑機(jī)制。

?

默認(rèn)情況下,設(shè)備的心跳時間間隔時長為15秒。這是在PubSubClient.h中通過以下語句定義的:

#define MQTT_KEEPALIVE 15

?

若要修改keep-alive時間,可修改以上頭文件,或者使用setKeepAlive函數(shù)實(shí)現(xiàn)。

?

對于PubSubClient,遺囑QoS允許使用0,1。

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

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

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

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接入信息(請根據(jù)您的WiFi信息進(jìn)行修改)

const char* ssid = "taichi-maker";

const char* password = "12345678";

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

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

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

?

WiFiClient wifiClient;

PubSubClient mqttClient(wifiClient);

?

// 遺囑設(shè)置

const char* willMsg = "CLIENT-OFFLINE"; // 遺囑消息內(nèi)容

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

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

?

void setup() {

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

??

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

??WiFi.mode(WIFI_STA);

??

??// 連接WiFi

??connectWifi();

??

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

??mqttClient.setServer(mqttServer, 1883);

??mqttClient.setKeepAlive(10); // 設(shè)置心跳間隔時間

??

??// 連接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 = "esp8266-" + WiFi.macAddress();

?

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

??// 以“-Will”結(jié)尾,這是為確保不同ESP8266客戶端的遺囑主題名稱各不相同。

??String willString = "Taichi-Maker-" + WiFi.macAddress() + "-Will";

??char willTopic[willString.length() + 1];??

??strcpy(willTopic, willString.c_str());

?

??// 連接MQTT服務(wù)器,在連接過程中提供以下參數(shù):

??// 客戶端ID,遺囑主題,遺囑QoS,遺囑保留,遺囑信息

??if (mqttClient.connect(clientId.c_str(), willTopic, willQoS, willRetain, willMsg)){

????Serial.println("MQTT Server Connected.");

????Serial.print("Server Address: ");Serial.println(mqttServer);

????Serial.print("ClientId: ");Serial.println(clientId);

????Serial.print("Will Topic: ");Serial.println(willTopic);????

??} else {

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

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

????delay(5000);

??}??

}

?

// 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("");

}

示例2:利用MQTT遺囑實(shí)現(xiàn)設(shè)備在線狀態(tài)發(fā)布

本實(shí)例將實(shí)現(xiàn)本教程2-6 MQTT遺囑這節(jié)課中的“MQTT遺囑使用建議”示例。通過以下程序,ESP8266客戶端可以利用遺囑機(jī)制來實(shí)時的將當(dāng)前在線與否狀態(tài)通過服務(wù)端進(jìn)行發(fā)布。也就是說,其它客戶端只要訂閱ESP8266客戶端的遺囑主題就可以馬上了解該客戶端是否在線。


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

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

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

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

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

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

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

本程序旨在演示如何設(shè)置客戶端遺囑機(jī)制??蛻舳嗽谶B接服務(wù)器時,設(shè)置遺囑的主題和信息。

本客戶端所發(fā)布的遺囑消息為保留消息。其它客戶端可通過訂閱本客戶端的遺囑主題獲取本

客戶端是否在線的狀態(tài)信息。

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

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

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

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接入信息(請根據(jù)您的WiFi信息進(jìn)行修改)

const char* ssid = "taichimaker";

const char* password = "12345678";

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

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

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

?

WiFiClient wifiClient;

PubSubClient mqttClient(wifiClient);

?

// 遺囑設(shè)置

const char* willMsg = "CLIENT-OFFLINE"; // 遺囑消息內(nèi)容

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

const bool willRetain = true;?????????? // 遺囑保留

?

void setup() {

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

??

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

??WiFi.mode(WIFI_STA);

??

??// 連接WiFi

??connectWifi();

??

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

??mqttClient.setServer(mqttServer, 1883);

??mqttClient.setKeepAlive(10); // 設(shè)置心跳間隔時間

??

??// 連接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 = "esp8266-" + WiFi.macAddress();

?

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

??// 以“-Will”結(jié)尾,這是為確保不同ESP8266客戶端的遺囑主題名稱各不相同。

??String willString = "Taichi-Maker-" + WiFi.macAddress() + "-Will";

??char willTopic[willString.length() + 1];??

??strcpy(willTopic, willString.c_str());

?

??// 連接MQTT服務(wù)器,在連接過程中提供以下參數(shù):

??// 客戶端ID,遺囑主題,遺囑QoS,遺囑保留,遺囑信息

??if (mqttClient.connect(clientId.c_str(), willTopic, willQoS, willRetain, willMsg)){

????Serial.println("MQTT Server Connected.");

????Serial.print("Server Address: ");Serial.println(mqttServer);

????Serial.print("ClientId: ");Serial.println(clientId);

????Serial.print("Will Topic: ");Serial.println(willTopic);????

????publishOnlineStatus();???? //發(fā)布在線狀態(tài)

??} else {

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

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

????delay(5000);

??}??

}

?

// 發(fā)布信息

void publishOnlineStatus(){

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

??// 以“-Will”結(jié)尾,這是為確保不同ESP8266客戶端的遺囑主題名稱各不相同。

??String willString = "Taichi-Maker-" + WiFi.macAddress() + "-Will";

??char willTopic[willString.length() + 1];??

??strcpy(willTopic, willString.c_str());

??// 建立設(shè)備在線的消息。此信息將以保留形式向遺囑主題發(fā)布

??String onlineMessageString = "CLIENT-ONLINE";

??char onlineMsg[onlineMessageString.length() + 1];??

??strcpy(onlineMsg, onlineMessageString.c_str());

??

??// 向遺囑主題發(fā)布設(shè)備在線消息

??if(mqttClient.publish(willTopic, onlineMsg, true)){

????Serial.print("Published Online Message: ");Serial.println(onlineMsg);????

??} else {

????Serial.println("Online Message Publish Failed.");

??}

}

?

// 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)識我們。您的每一份點(diǎn)贊與投幣,都是對我們最溫暖的鼓勵與支持。

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

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

分享到微博請遵守國家法律
宁陕县| 洞口县| 德庆县| 卢湾区| 邹平县| 亚东县| 湟源县| 华亭县| 陇川县| 琼结县| 华蓥市| 澄迈县| 威海市| 鸡西市| 栾川县| 桐庐县| 兴和县| 郎溪县| 南雄市| 阜宁县| 尤溪县| 长寿区| 章丘市| 开封县| 土默特右旗| 石嘴山市| 防城港市| 东台市| 绥中县| 华池县| 广州市| 巴林右旗| 文水县| 徐闻县| 余庆县| 宿州市| 普陀区| 镶黄旗| 仙游县| 汉寿县| 娄底市|