2024年12月11日 星期三

HiveMQ Cloud 提供 MQTT broker 的連接 Cluster

HiveMQ Cloud 提供 MQTT broker 的連接 Cluster 


參考來源

https://www.taiwansensor.com.tw/%E5%85%8D%E8%B2%BB-mqtt-%E4%BC%BA%E6%9C%8D%E5%99%A8-%E5%85%8D%E8%B2%BB%E9%80%A3%E6%8E%A5100-%E5%8F%B0%E8%A8%AD%E5%82%99-10gb-%E6%B5%81%E9%87%8F-%E5%85%8D%E8%B2%BB%E7%94%B3%E8%AB%8B-mqtt-broker-serve/?srsltid=AfmBOopSZ8YFCGH-5Oc0sspPVxifvqOdur-3G47zLqZL23GiUKg-KlZB

https://medium.com/@shehab2003magdy/connecting-esp32-to-hivemq-for-real-time-iot-data-streaming-with-mqtt-8813f48cb1a4

MQTT 是用於物聯網 (IoT) 的 OASIS 標準消息傳遞協議。它被設計為一種極其輕量級的發布/訂閱消息傳輸,

非常適合連接具有小規模程式開發設備和有限網路頻寬需求的遠程設備。

MQTT 是一種客戶端服務器發布/訂閱消息傳輸協議。它重量輕、開放、簡單,並且設計易於實施。

這些特性使其非常適合在許多情況下使用,如今 MQTT 被廣泛用於各種行業,例如汽車、製造、電信、石油和天然氣等。

步驟與項目

MQTT 發布/訂閱模式

MQTT 發布/訂閱模式(也稱為發布/訂閱)提供了傳統客戶端-服務器架構的替代方案。在客戶端-服務器模型中,

客戶端直接與端點通信。發布/訂閱模型將發送消息的客戶端(發布者)與接收消息的客戶端(訂閱者)分離

發布者和訂閱者從不直接相互聯繫。事實上,他們甚至不知道對方的存在。它們之間的連接由第三個組件(代理)處理

代理的工作是過濾所有傳入的消息並將它們正確地分發給訂閱者。

MQTT 發布/訂閱
MQTT 發布/訂閱架構

pub/sub 最重要的方面是消息的發布者與接收者(訂閱者)的解耦。這種解耦有幾個維度:

  • 空間解釋:發布者和訂閱者不需要相互了解(例如不交換IP地址和端口)。
  • 時間解釋:發布者和訂閱者不需要同時運行。
  • 同步解釋:在發布或接收過程中不需要中斷兩個組件的操作。

總之,MQTT 發布/訂閱模型消除了消息發布者和接收者/訂閱者之間的直接通信。

代理的過濾活動可以控制哪個客戶端/訂閱者接收哪個消息。解釋具有三個維度:空間、時間和同步。

以上為基本的 MQTT 的認識,如果您想要更深入的了解整個MQTT的涵義與架構以及更多可能的應用,您可以參考

MQTT 要點 面向初學者和專家的 MQTT 終極指南

本開發平台採用全球知名 HiveMQ 的免費服務,您不用擔心因為是免費的服務而造成使用上的不足。

免費版本的 HiveMQ 提供了入門與一般個人使用上的額度相當充足。

免費 HiveMQ Cloud 版本的使用限制

  • 連線連線數量: 100 個
  • 數據傳輸量: 10GB  / 每月
  • MQTT 3.1、3.1.1、5.0
  • 基於 TLS/SSL 的 MQTT
  • 基本授權規則
  • Websocket 支持
  • 還有與全球高手一起研討的技術論壇 【連結】

基本上針對初學者或者幾個設備連線使用,這樣佛心的限制已經相當夠用. 不管是開發環境或者幾十個設備的數據收集都不成問題.

開始申請您的帳號吧

步驟 1: 造訪 HiveMQ 官網

  1. 打開瀏覽器,前往 HiveMQ 官網
  2. 在頁面上,您會看到「Sign Up for Free」的按鈕,點擊此按鈕開始申請。

步驟 2: 創建帳戶

  1. 填寫您的個人資訊,包括:
    • 名字
    • 電子郵件地址
    • 密碼
  2. 同意服務條款後,點擊「Sign Up」進行帳戶註冊。

步驟 3: 驗證電子郵件

  1. 完成註冊後,您會收到一封來自 HiveMQ 的驗證電子郵件。
  2. 點擊電子郵件中的驗證連結來啟用您的帳戶。

步驟 4: 登入並創建 MQTT Broker

  1. 驗證成功後,返回 HiveMQ 的登錄頁面並登入您的帳戶。
  2. 進入 HiveMQ Cloud 主控台,點擊「Create Cluster」來建立一個新的 MQTT Broker。
  3. 選擇免費方案,然後點擊「Create」, 系統會自動幫你建立一個專屬的伺服器

步驟 5: 設置 MQTT Cluster

  1. 您的 Cluster 建立後,HiveMQ 會提供 MQTT broker 的連接資訊,包括:
    • Hostname
    • Port
  2. 您可以在主控台上查看這些資訊,並用於連接您的 IoT 裝置或應用程式。

步驟 6: 新增連線帳號與權限設定

  1. 要連線到您剛創建的 HiveMQ broker 前,由於HiveMQ MQTT 雲端的連線,不允許匿名連線也需要加密,
  2. 所以我們要開始建立連線MQTT 專用的帳號與密碼,這與你剛剛登入 HiveMQ 的帳號密碼是不同的,這點你要注意
  3. 在主控台的 MQTT Cluster 設置頁面上方選單中,找到「Access Management」選項,點擊進入。
  4. 點擊「Manage Credentials」並創建新的 MQTT 使用者帳號和密碼:
    • 點擊「Add Client」按鈕。
    • 輸入您的使用者名稱(Client Username)和密碼(Client Password),並指定權限【Publish Only 唯寫】
    • 【Subscribe Only 唯讀】【Publish and Subscribe 讀寫皆可】三選一。
    • 設定完成後,點擊「Save」。
  5. 這些用戶憑證將用於您的 MQTT 裝置連接到 HiveMQ broker。

【Manage Credentials」並創建新的 MQTT 使用者帳號和密碼】

【點擊進入 Access Management】

步驟 7: 連接您的 MQTT Client

  1. 使用 MQTT 客戶端(例如 MQTT.fx、MQTT Explorer 或 IoT 裝置),連接到您剛創建的 HiveMQ broker。
  2. 填入您的 Hostname 和 Port,使用默認的 MQTT 設定來進行連接測試。

步驟 8: 測試 MQTT 通信

  1. 成功連接後,您可以發佈和訂閱 MQTT 訊息來驗證通信是否正常。
  2. 使用例如 test/topic 這樣的 topic 來測試數據傳輸。

Arduino 程式

#include <Arduino.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
 
//const char* ssid = "yourNetworkName";
//const char* password =  "yourNetworkPassword";
//const char* mqttServer = "m11.cloudmqtt.com";
//const int mqttPort = 12948;
//const char* mqttUser = "yourMQTTuser";
//const char* mqttPassword = "yourMQTTpassword";

// Wi-Fi credentials
const char* ssid ="Wokwi-GUEST";
const char* password ="";

// MQTT broker details private
const char* mqtt_broker = "62f166fe2af0341496b2fc16b53e7da20c.s1.eu.hivemq.cloud";
const int mqtt_port = 8883;
const char* mqtt_username ="xxxxxxx" ;
const char* mqtt_password ="xxxxxxxxxxxx" ;

// MQTT topic for IR sensor
const char* topic_publish_ir = "esp32/ir_sensor";

// IR Sensor details
const int ir_sensor_pin = 23; // GPIO pin connected to the IR sensor

// Create instances
WiFiClientSecure wifiClient;
PubSubClient mqttClient(wifiClient);

// Variables for timing
long previous_time = 0;

void setupMQTT() {
  mqttClient.setServer(mqtt_broker, mqtt_port);
}

void reconnect() {
  Serial.println("Connecting to MQTT Broker...");
  while (!mqttClient.connected()) {
    Serial.println("Reconnecting to MQTT Broker...");
    String clientId = "ESP32Client-";
    clientId += String(random(0xffff), HEX);
   
    if (mqttClient.connect(clientId.c_str(), mqtt_username, mqtt_password)) {
      Serial.println("Connected to MQTT Broker.");
    } else {
      Serial.print("Failed, rc=");
      Serial.print(mqttClient.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
 
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Connected to Wi-Fi");

  // Initialize secure WiFiClient
  wifiClient.setInsecure(); // Use this only for testing, it allows connecting without a root certificate
 
  setupMQTT();

  pinMode(ir_sensor_pin, INPUT); // Set IR sensor pin as input
}

void loop() {
  if (!mqttClient.connected()) {
    reconnect();
  }
  mqttClient.loop();

  long now = millis();
  if (now - previous_time > 1000) { // Publish every 10 seconds
    previous_time = now;

    // Read the IR sensor value
    int ir_sensor_value = analogRead(ir_sensor_pin);
    int distance = map(ir_sensor_value, 0, 4095, 0, 30);
   
    // Convert the value to a string
    String ir_value_str = String(distance);
   
    // Publish the sensor value to the MQTT topic
    Serial.print("IR Sensor Value: ");
    Serial.println(ir_value_str);
    mqttClient.publish(topic_publish_ir, ir_value_str.c_str());
  }
}












沒有留言:

張貼留言

Node-Red LINE Notify + LINE Developers

 Node-Red  <<LINE Notify + LINE Developers [{"id":"e3c78b4eb9b36766","type":"function","z...