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

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

【零基礎(chǔ)學(xué)物聯(lián)網(wǎng)】MQTT篇 2-8 MQTT用戶密碼認(rèn)證

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

為了便于您學(xué)習(xí)本教程,我們制作了以下視頻。

在之前的課程里我曾給大家講解了MQTT客戶端連接服務(wù)端的基本過程。客戶端通過CONNECT報(bào)文,向服務(wù)端發(fā)起連接請(qǐng)求。CONNECT報(bào)文所包含的具體信息內(nèi)容如下:

MQTT CONNECT報(bào)文

到目前為止,我們已經(jīng)將CONNECT報(bào)文中的信息大部分講解完畢了,目前只剩下上圖中紅色方框所標(biāo)注的username(用戶名)和password(密碼)。這里的用戶名和密碼是用于客戶端連接服務(wù)端時(shí)進(jìn)行認(rèn)證需要的。

有些MQTT服務(wù)端需要客戶端在連接時(shí)提供用戶名和密碼。只有客戶端正確提供了用戶名和密碼后,才能連接服務(wù)端。否則服務(wù)端將會(huì)拒絕客戶端連接,那么客戶端也就無法發(fā)布和訂閱消息了。

請(qǐng)注意,username(用戶名)和password(密碼)是可選的CONNECT信息。也就是說,有些服務(wù)端開啟了客戶端用戶密碼認(rèn)證,這種服務(wù)端需要客戶端在連接時(shí)正確提供認(rèn)證信息才能連接。當(dāng)然,那些沒有開啟用戶密碼認(rèn)證的服務(wù)端無需客戶端提供用戶名和密碼認(rèn)證信息。

在以上示例中,我們看到此CONNECT報(bào)文中所包含的用戶名是“hans”,密碼是“l(fā)etmein”。

用戶名和密碼除了有以上功能外,有些公用MQTT服務(wù)端也利用此信息來識(shí)別客戶端屬于哪一個(gè)用戶,從而對(duì)客戶端進(jìn)行管理。比如用戶可以擁有私人主題,這些主題只有該用戶可以發(fā)布和訂閱。對(duì)于私人主題,服務(wù)端就可以利用客戶端連接時(shí)的用戶名和密碼來判斷該客戶端是否有發(fā)布訂閱該用戶私人主題的權(quán)限。

以下示例程序?qū)崿F(xiàn)了ESP8266連接MQTT服務(wù)端時(shí)的用戶名和密碼認(rèn)證。

程序中的78行調(diào)用connect函數(shù)時(shí),提供了MQTT服務(wù)端連接的用戶名和密碼信息。這些信息是在程序的26-28定義的。

關(guān)于本程序的詳細(xì)介紹,請(qǐng)看本文首部的講解。

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

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

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

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

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

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

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

本程序旨在演示如何使用PubSubClient庫使用ESP8266向MQTT服務(wù)器發(fā)布信息。

發(fā)布信息中,服務(wù)器通過用戶名和密碼進(jìn)行認(rèn)證。

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

本示例程序?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)頁:

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

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

#include <ESP8266WiFi.h>

#include <PubSubClient.h>

#include <Ticker.h>

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

const char* ssid = "taichimaker";

const char* password = "12345678";

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

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

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

// MQTT服務(wù)端連接用戶名密碼

const char* mqttUserName = "test-user";

const char* mqttPassword = "ranye-iot";

Ticker ticker;

WiFiClient wifiClient;

PubSubClient mqttClient(wifiClient);

int count;????// Ticker計(jì)數(shù)用變量

void setup() {

??Serial.begin(9600);

??// Ticker定時(shí)對(duì)象

??ticker.attach(1, tickerCount);

??

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

??WiFi.mode(WIFI_STA);

??

??// 連接WiFi

??connectWifi();

??

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

??mqttClient.setServer(mqttServer, 1883);

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

??connectMQTTServer();

}

void loop() {

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

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

????connectMQTTServer();

??}

??

?? mqttClient.loop();

??// 每隔3秒鐘發(fā)布一次信息

??if (count >= 3){

????pubMQTTmsg();

????count = 0;

??}

}

void tickerCount(){

??count++;

}

void connectMQTTServer(){

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

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

??// 連接MQTT服務(wù)器。此處使用了程序首部定義的用戶名和密碼來實(shí)現(xiàn)MQTT服務(wù)端認(rèn)證

??if (mqttClient.connect(clientId.c_str(), mqttUserName, mqttPassword)) {

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

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

????Serial.println(mqttServer);

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

????Serial.println(clientId);

??} else {

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

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

????delay(3000);

??}??

}

// 發(fā)布信息

void pubMQTTmsg(){

??static int value;

??// 建立發(fā)布主題。主題名稱以taichi/Pub-為前綴,后面添加設(shè)備的MAC地址。

??// 這么做是為確保不同用戶進(jìn)行MQTT信息發(fā)布時(shí),ESP8266客戶端名稱各不相同,

??String topicString = "test-user/Pub-" + WiFi.macAddress();

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

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

??// 建立發(fā)布信息。信息內(nèi)容以Hello World為起始,后面添加發(fā)布次數(shù)。

??String messageString = "Hello World " + String(value++);

??char publishMsg[messageString.length() + 1];??

??strcpy(publishMsg, messageString.c_str());

??// 實(shí)現(xiàn)ESP8266向主題發(fā)布信息

??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.");

??}

}

// 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-8 MQTT用戶密碼認(rèn)證的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
宾阳县| 平邑县| 江山市| 邵武市| 贡觉县| 木兰县| 瑞丽市| 高邮市| 铜山县| 昭平县| 浦江县| 砚山县| 洛南县| 略阳县| 镇远县| 南江县| 百色市| 宁蒗| 靖远县| 陆良县| 石嘴山市| 治多县| 浏阳市| 绥化市| 新巴尔虎右旗| 霍州市| 汉中市| 京山县| 衡阳县| 瑞昌市| 宁晋县| 平遥县| 三台县| 定州市| 鹤壁市| 鱼台县| 砚山县| 惠安县| 象州县| 湖南省| 民丰县|