女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在Raspberry Pi上安裝和測試MQTT進行IoT通信

科技觀察員 ? 來源:circuitdigest ? 作者:Rishabh Jain ? 2022-09-06 15:14 ? 次閱讀

MQTT是一種用于通過 Internet 發送和接收消息的協議。我們之前在物聯網電表和Raspberry Pi Alexa中使用此協議在互聯網上發布數據。在本教程中,我們將更多地了解 MQTT 及其相關術語。在這里,我們將使用Raspberry Pi 作為本地 MQTT 代理,并通過 MQTT 應用程序儀表板控制連接到 NodeMCU ESP12E 的 LED。DHT11 傳感器也連接到 NodeMCU,因此我們再次使用 Raspberry Pi 作為本地 MQTT 代理,在 MQTT 儀表板上讀取溫度和濕度。

因此,讓我們從了解 MQTT 及其相關術語開始。

什么是 MQTT?

MQTT 代表IBM 設計的 Message Queue Telemetry Transport。該協議簡單輕量,用于通過互聯網發送和接收消息,專為低帶寬使用的設備而設計。如今,該協議經常在物聯網設備中用于發送和接收傳感器數據。此外,在基于物聯網的家庭自動化系統中,無需使用大量互聯網數據即可輕松使用此協議。

在 MQTT 中經常使用的術語很少:

訂閱和發布

信息

話題

經紀人

1.訂閱和發布:訂閱是從其他設備獲取數據,發布是向其他設備發送數據。

poYBAGMW8l2AFmWBAAAbtxc53HA219.png

當 device1 將數據發送到 device2 時,它稱為發布者,另一個稱為訂閱者,反之亦然。

2. 消息:消息是我們發送和接收的信息。它可以是數據或任何類型的命令。例如,如果我們將溫度數據發布到云端,則此溫度數據稱為消息。

3. 主題:這是您注冊對傳入消息感興趣的方式或您如何指定要發布消息的位置。主題用正斜杠分隔的字符串表示。使用 MQTT 在主題上發布數據,然后 MQTT 設備訂閱主題以獲取數據。

4. MQTT Broker:這個東西負責接收所有發布者的消息,過濾消息,然后將消息發布給感興趣的訂閱者。

pYYBAGMW8lmALKHEAACSOffJaKU455.png

當這個代理托管在云上時,它被稱為 MQTT 云。有許多基于云的 MQTT 服務,例如 Adafruit IO、MQTT.IO、IBM bluemix、Microsoft Azure 等。MQTT 也可以與流行的 Amazon AWS 云一起使用,我們在Amazon AWS 入門教程中對此進行了說明。

我們可以使用 Raspberry Pi 創建自己的 MQTT 代理。這將是本地 MQTT 代理,即您只能在本地網絡上發送和接收數據,而不是從任何地方。所以在這里我們將在 Raspberry Pi 中安裝 Mosquitto MQTT 代理,使其成為本地 MQTT 代理,并將溫度數據從 NodeMCU 發送到 MQTT 儀表板應用程序。此外,我們將使用代理控制連接到 NodeMCU 的 LED。

樹莓派上安裝 Mosquitto MQTT 代理

在您的 Raspberry pi 中打開終端并鍵入以下命令以安裝代理

sudo apt update 
sudo apt install -y mosquitto mosquitto-clients

等待安裝完成。現在,要在啟動樹莓派時啟動代理,請鍵入以下命令

sudo systemctl 啟用 mosquitto.service

就是這樣,我們都準備好啟動我們的 MQTT 代理了。要檢查它是否安裝正確,請輸入以下命令

蚊子-v

此命令將為您提供 MQTT 代理的版本。它應該是 1.4.x 或更高版本。

測試 Raspberry Pi Mosquitto Broker

1. 使用以下命令在后臺運行 Mosquitto 代理

蚊子-d

2. 現在,我們將使用以下命令在 exampleTopic 中訂閱一個主題

mosquitto_sub -d -t exampleTopic

3. 現在,我們將發布一些消息到 exampleTopic

mosquitto_pub -d -t exampleTopic -m "Hello world!"

您將收到 Hello World!用戶終端中的消息。

pYYBAGMW8lOAL1UkAAPrhFV1P-A527.png

現在,在我們使用 NodeMCU 和MQTT 儀表板應用程序的案例中,是時候控制和從另一臺設備獲取數據了。

首先,我們將通過使用 App 發送命令來控制 LED,因此在這種情況下,NodeMCU 表現為訂閱者,而 App 表現為發布者。

然后 ESP12E 還連接了 DHT11 傳感器,并將此溫度讀數發送到 Mobile MQTT 應用程序,因此在這種情況下,移動設備將成為訂閱者,NodeMCU 將成為發布者。為了在各自的主題上轉發這些消息,使用了 Mosquitto MQTT 代理。

電路原理

pYYBAGMW8k-AXkE7AADSfc0AfOo702.png

如圖所示連接電路。這里 DHT11 用于溫度讀數,但也可以使用LM35 溫度傳感器

讓我們開始編寫 NodeMCU 的代碼來訂閱和發布數據。

pYYBAGMW8kuABPEAAAG15-OAC18767.png

代碼和解釋

在這里,我們將使用 Adafruit MQTT 庫模板,并將更改代碼中所需的內容。只需更改一些內容,即可使用相同的代碼將數據發布和訂閱到 Adafruit IO 云。

為此,從Sketch -》 Include Library -》 Manage Libraries 下載 Adafruit MQTT 庫。搜索 Adafruit MQTT 并安裝它。安裝庫后。轉到 示例-》 Adafruit mqtt 庫-》 mqtt_esp8266

poYBAGMW8keAFBlYAAN1gotwK3g701.png

然后根據我們的 Raspberry Pi IP 地址和 Wi-Fi 憑據編輯此代碼。

包括 ESP8266WIFI 和 Adafruit MQTT 的所有庫。

#include  
#include "Adafruit_MQTT.h" 
#include "Adafruit_MQTT_Client.h" 
#include "DHT.h"

然后為您想要連接 ESP-12e 的 Wi-Fi 定義 SSID 和密碼。確保您的 RPi 和 NodeMCU 連接到同一個網絡。

#define WLAN_SSID "xxxxxxxx" 
#define WLAN_PASS "xxxxxxxxxxx"

本節定義 Adafruit 服務器,在本例中是您的 Raspberry Pi 的 IP 地址和服務器端口

#define AIO_SERVER "你的 Pi 的 IP 地址" 
#define AIO_SERVERPORT 1883                  

下面的字段將保持空白,因為我們沒有使用 Adafruit 云。

#define AIO_USERNAME "" 
#define AIO_KEY ""

然后創建一個 ESP8266 WiFiClient 類來連接到 MQTT 服務器。

WiFiClient客戶端;

通過傳入 WiFi 客戶端和 MQTT 服務器以及登錄詳細信息來設置 MQTT 客戶端類。

Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

設置一個名為“溫度”的提要來發布溫度。

Adafruit_MQTT_Publish 溫度 = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");

設置一個名為“led1”的提要來訂閱更改。

Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led");

在setup函數中,我們聲明了要在其上獲得輸出的 NodeMCU 的 PIN。然后,將 NodeMCU 連接到 Wi-fi 接入點。

無效設置() { 
  Serial.begin(115200);
  延遲(10);
  pinMode(LED,輸出);
  Serial.println(F("Adafruit MQTT demo")); 
  // 連接到 WiFi 接入點。
  序列號.println(); 序列號.println(); 
  Serial.print("正在連接"); 
  Serial.println(WLAN_SSID); 
  WiFi.開始(WLAN_SSID,WLAN_PASS);
  而 (WiFi.status() != WL_CONNECTED) { 
.... 
…… 
…
為 led 提要設置 MQTT 訂閱。
  mqtt.subscribe(&led1); 
}

在循環函數中,我們將使用 MQTT_connect() 確保與 MQTT 服務器的連接處于活動狀態;功能。

無效循環() { 
  MQTT_connect();

現在,訂閱 'led' 提要并從 MQTT 代理獲取字符串,并使用atoi() 將此字符串轉換為數字;函數并使用digitalWrite()將此數字寫入 LED 引腳;功能。

Adafruit_MQTT_Subscribe *訂閱;

  while ((subscription = mqtt.readSubscription(20000))) { 
    if (subscription == &led1) { 
      Serial.print(F("Got: ")); 
      Serial.println((char *)led1.lastread); 
      int led1_State = atoi((char *)led1.lastread); 
      數字寫入(LED,led1_State);
    }

現在,獲取變量中的溫度并使用Temperature.publish(t)函數發布該值。

浮動 t = dht.readTemperature(); 
… 
..

  if (!Temperature.publish(t)) { 
    Serial.println(F("Failed")); 
  } else { 
    Serial.println(F("OK!")); 
  }


#include

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_Client.h"

#include "DHT.h"


#define LED D5

#define DHTPIN D4


#define WLAN_SSID "awesome"

#define WLAN_PASS "awesome12"


#define AIO_SERVER "192.168.43.177" //RPi的IP地址

#define AIO_SERVERPORT 1883

#define AIO_USERNAME ""

#define AIO_KEY ""


WiFiClient客戶端;

Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

Adafruit_MQTT_Publish 溫度 = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");

Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led");

#define DHTTYPE DHT11 // DHT 11


DHT dht(DHTPIN, DHTTYPE);

uint32_t 延遲時間;



/****************************** 草圖代碼 ************************ ******************/


無效 MQTT_connect();


無效設置() {

Serial.begin(115200);


延遲(10);

pinMode(LED,輸出);

Serial.println(F("Adafruit MQTT demo"));


// 連接到 WiFi 接入點。

序列號.println(); 序列號.println();

Serial.print("正在連接");

Serial.println(WLAN_SSID);


WiFi.開始(WLAN_SSID,WLAN_PASS);

而(WiFi.status()!= WL_CONNECTED){

延遲(500);

Serial.print(".");

}

Serial.println();


Serial.println("WiFi 連接");

Serial.println("IP地址:"); Serial.println(WiFi.localIP());



//設置 DHT 傳感器

dht.begin();


// 為 onoff feed 設置 MQTT 訂閱。

mqtt.subscribe(&led1);



}


uint32_t x = 0;


void loop() {

// 確保與 MQTT 服務器的連接處于活動狀態(這將建立第一個

// 連接并在斷開連接時自動重新連接)。請參閱下面的 MQTT_connect

// 函數定義。

MQTT_connect();

// 這是我們的“等待收到的訂閱數據包”繁忙的子循環

// 試著把你的時間花在這里


Adafruit_MQTT_Subscribe *訂閱;

while ((subscription = mqtt.readSubscription(20000))) {

if (subscription == &led1) {

Serial.print(F("Got: "));

Serial.println((char *)led1.lastread);

int led1_State = atoi((char *)led1.lastread);

數字寫入(LED,led1_State);

Serial.println("onnn");

}



}


// 以攝氏度讀取溫度(默認)

float t = dht.readTemperature();

// 檢查是否有任何讀取失敗并提前退出(重試)。

if (isnan(t)) {

Serial.println("讀取 DHT 傳感器失敗!");

返回;

}

if (! Temperature.publish(t)) {

Serial.println(F("Failed"));

} else {

Serial.println(F("OK!"));

}


}


// 根據需要連接和重新連接到 MQTT 服務器的函數。

// 應該在循環函數中調用,如果連接會小心。

無效 MQTT_connect() {

int8_t ret;


// 如果已經連接則停止。

if (mqtt.connected()) {

返回;

}


Serial.print("正在連接 MQTT...");

uint8_t 重試次數 = 3;

while ((ret = mqtt.connect()) != 0) { // connect 將返回 0 連接

Serial.println(mqtt.connectErrorString(ret));

Serial.println("5 秒后重試 MQTT 連接...");

mqtt.disconnect();

延遲(5000);// 等待 5 秒

重試--;

if (retries == 0) {

// 基本上死了,等待 WDT 重置我

while (1);

}

}

Serial.println("MQTT 已連接!");

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led
    led
    +關注

    關注

    242

    文章

    23691

    瀏覽量

    670821
  • IOT
    IOT
    +關注

    關注

    187

    文章

    4282

    瀏覽量

    200622
  • NODEMCU
    +關注

    關注

    13

    文章

    289

    瀏覽量

    22211
  • MQTT
    +關注

    關注

    5

    文章

    668

    瀏覽量

    23462
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如何在Raspberry Pi安裝TensorFlow

     本教程中,我們將學習如何在 Raspberry Pi 安裝 TensorFlow,并將展示一些
    發表于 09-01 16:35 ?2490次閱讀
    如何在<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>上</b><b class='flag-5'>安裝</b>TensorFlow

    如何在Raspberry Pi OS安裝SDK?

    Raspberry Pi OS 安裝 SDK
    發表于 04-30 06:45

    Raspberry Pi 開發板優化設計

    Raspbian,這是針對 Raspberry Pi 開發板優化的 GNU/Linux 操作系統 (OS) 版本。開發人員可以將含有 Raspbian 安裝程序 NOOBS 的 SD 卡插入
    發表于 07-16 09:54

    Raspberry Pi 3和3 b +的Android Pie 9.0

    Raspberry Pi 3和3 b +的Android Pie 9.0Raspberry Pi
    發表于 09-29 14:28

    安裝Raspberry Pi Clock Hat的教程分享

    Raspbian 的所有風格,例如 Raspbian OS、Retro Pi、Kodi 等。安裝:對于安裝,您需要做的就是按照項目git 存儲庫中提到的步驟進行操作。啟用樹莓派 SP
    發表于 07-05 06:01

    如何在Raspberry安裝TensorFlow

    Raspberry Pi安裝TensorFlow曾經是一項令人沮喪的任務。但是,隨著Raspberr
    的頭像 發表于 07-30 14:30 ?5363次閱讀
    如何在<b class='flag-5'>Raspberry</b><b class='flag-5'>上</b><b class='flag-5'>安裝</b>TensorFlow

    如何安裝Quad Boot Raspberry Pi

    運行Raspberry Pi安裝程序,我們將在其中選擇要安裝的操作系統。在這種情況下,我們將選擇RasPlex,Openelec,Raspbian和RetroPie
    的頭像 發表于 11-13 16:22 ?1519次閱讀

    Raspberry Pi安裝RetroPie的教程

    RetroPie是一個用于 Raspberry Pi 模擬復古視頻游戲的軟件庫。本教程中,我們將在
    的頭像 發表于 08-26 15:26 ?4753次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>上</b><b class='flag-5'>安裝</b>RetroPie的教程

    使用Adafruit IO作為MQTT控制Raspberry Pi GPIO的AC設備

    本教程中,我們將使用 Adafruit IO 作為 MQTT 代理來控制連接到 Raspberry Pi GPIO 的 AC 設備。
    的頭像 發表于 09-01 16:30 ?2949次閱讀
    使用Adafruit IO作為<b class='flag-5'>MQTT</b>控制<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> GPIO的AC設備

    Raspberry Pi安裝Android的方法

    Raspberry Pi 中使用的流行操作系統是 Raspbian,它是一個基于 linux 的 Raspberry Pi 官方操作系統,我們使用它構建了許多
    的頭像 發表于 09-05 15:10 ?2w次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>上</b><b class='flag-5'>安裝</b>Android的方法

    使用Raspberry Pi的OpenCV庫構建人臉識別系統

    本教程中,我們將學習如何使用 Raspberry Pi 的 OpenCV 庫構建我們自己的人臉識別系統。將此系統安裝在便攜式
    發表于 09-07 15:48 ?1431次閱讀
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>上</b>的OpenCV庫構建人臉識別系統

    如何在Raspberry Pi 3安裝OpenCV4庫

    今天我們將學習如何在 Raspberry Pi 3 安裝 OpenCV4 庫,以便我們可以將其用于計算機視覺應用程序。這將允許 OpenCV
    的頭像 發表于 09-08 16:09 ?1841次閱讀
    如何在<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 3<b class='flag-5'>上</b><b class='flag-5'>安裝</b>OpenCV4庫

    Raspberry Pi安裝Cam Web界面

    電子發燒友網站提供《Raspberry Pi安裝Cam Web界面.zip》資料免費下載
    發表于 01-03 11:00 ?0次下載
    <b class='flag-5'>在</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>零<b class='flag-5'>上</b><b class='flag-5'>安裝</b>Cam Web界面

    Raspberry Pi模擬Commodore Amiga

    現在,您只要使用一個Raspberry Pi就可以輕松實現對Amiga的探索!本項目中,您可以使用任意Pi,但是為了獲得更好的性能,Raspber
    的頭像 發表于 02-25 17:29 ?1429次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b><b class='flag-5'>上</b>模擬Commodore Amiga

    Windows IoTRaspberry Pi:讀取按鈕

    電子發燒友網站提供《Windows IoTRaspberry Pi:讀取按鈕.zip》資料免費下載
    發表于 07-10 11:13 ?0次下載
    Windows <b class='flag-5'>IoT</b>和<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>:讀取按鈕