MQTT 通信 - ESP8266 と WeChat アプレット間の通信に EMQX を使用

コンセプト

MQTT

MQTT (Message Queuing Telemetry Transport) は、IBM によって公開された、パブリッシュ/サブスクライブ パラダイムに基づく「軽量」メッセージング プロトコルです。MQTT は TCP/IP プロトコル スイートで動作し、ハードウェア パフォーマンスが低く、ネットワーク状態が劣悪なリモート デバイス向けに設計されたパブリッシュ/サブスクライブ メッセージング プロトコルです。したがって、MQTT プロトコルは、ハードウェア パフォーマンスの低いリモート デバイスや、マシンツーマシン (M2M) 通信やモノのインターネット (IoT) などのネットワーク状態が悪い環境に適しています。
ここに画像の説明を挿入します
MQTT については他にも、サブスクリプションとパブリッシングのメカニズム、メッセージ サービス レベル、ハートビート メカニズムなど、多くの概念があります。記事を読む前に関連する知識を理解してください

ESP8266

Espressif ESP8266 は、WiFi 機能を内蔵したマイクロコントローラーであり、高性能無線 SOC 特性を備え、モバイル デバイスや IoT アプリケーションに無線接続機能を提供できます。
ESP8266 の特徴は、
小型パッケージ サイズ、超低消費電力、複数の電力モードのサポートです。
高性能 UART-WiFi 透過伝送モジュールを搭載しており、他のマイクロコントローラーベースのデバイスに直接接続できます。
STA/AP/STA+AP の 3 つの動作モードをサポートし、ワイヤレス アクセス ポイントまたはクライアントとして使用できます。
組み込みの TCP/IP プロトコル スタックは、一致する回路を追加せずに複数の TCP クライアント接続をサポートします。
オンボード PCB アンテナ、IPEX インターフェイス、スタンプ ホール インターフェイスの 3 種類のアンテナ インターフェイスをサポートします。
スマートグリッド、スマート交通、スマート家具、ハンドヘルドデバイス、産業用制御などの分野で広く使用できます。
なお、提供する情報は可能な限り正確なものを記載しておりますが、商品は常に更新・変更される可能性がございますので、最新かつ正確な情報についてはEspressif公式サイトをご確認いただくことをお勧めします。
ここに画像の説明を挿入します

独自の MQTT サーバーを構築する

この記事では、EMQX公式 Web サイトのアドレス
を使用します。独自のサーバーを購入した後、次のコードを使用してサーバーを展開します。

curl -s https://assets.emqx.com/scripts/install-emqx-rpm.sh | sudo bash
sudo yum install emqx -y
sudo systemctl start emqx

ここに画像の説明を挿入します

インストールが完了したら、バックエンドを開きます。http://你的IP地址/#/login?to=/websocket初期アカウントの管理者パスワードは公開されています。
ここに画像の説明を挿入します

ESP8266コードを書き込む

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

// WiFi
const char *ssid = "mousse"; // Enter your WiFi name
const char *password = "qweqweqwe";  // Enter WiFi password

// MQTT Broker
const char *mqtt_broker = "broker.emqx.io";
const char *topic = "esp8266/test";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
    
    
    // Set software serial baud to 115200;
    Serial.begin(115200);
    // connecting to a WiFi network
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
    
    
        delay(500);
        Serial.println("Connecting to WiFi..");
    }
    Serial.println("Connected to the WiFi network");
    //connecting to a mqtt broker
    client.setServer(mqtt_broker, mqtt_port);
    client.setCallback(callback);
    while (!client.connected()) {
    
    
        String client_id = "esp8266-client-";
        client_id += String(WiFi.macAddress());
        Serial.printf("The client %s connects to the public mqtt broker\n", client_id.c_str());
        if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
    
    
            Serial.println("Public emqx mqtt broker connected");
        } else {
    
    
            Serial.print("failed with state ");
            Serial.print(client.state());
            delay(2000);
        }
    }
    // publish and subscribe
    client.publish(topic, "hello emqx");
    client.subscribe(topic);
}

void callback(char *topic, byte *payload, unsigned int length) {
    
    
    Serial.print("Message arrived in topic: ");
    Serial.println(topic);
    Serial.print("Message:");
    for (int i = 0; i < length; i++) {
    
    
        Serial.print((char) payload[i]);
    }
    Serial.println();
    Serial.println("-----------------------");
}

void loop() {
    
    
    client.loop();
}

上記の情報を独自の情報に変更し、
PubSubClient ライブラリを追加することに注意してください。

WeChat アプレットの開発

公式アクセスチュートリアル
WeChat アプレット プロジェクトを作成し、ライブラリ ファイルを追加します。この記事では MQTT.js を使用します。さまざまなクライアント用の関連 SDK もあります。ここでの WeChat アプレットは JavaScript 言語を使用しているため、このライブラリを使用します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
EMQX では、WebSocket を介したインスタント通信をサポートするには WeChat アプレットが必要です。EMQX の MQTT Over WebSocket は WeChat アプレットと完全な互換性があります。
ヒント:
WeChat アプレットの仕様制限により、EMQX は WeChat アプレットを使用してアクセスする際に次の点に注意する必要があります。 アクセスするには、ドメイン名登録 (新しいウィンドウが開きます) に合格したドメイン名を使用する必要があります

ドメイン名。アプレット管理バックグラウンドにある必要があります (新しいウィンドウが開きます) ドメイン名/IP ホワイトリスト (開発 -> 開発設定 -> サーバー ドメイン名 -> ソケットの正当なドメイン名) は、WebSocket/TLS プロトコルのみをサポートします
。信頼できる CA によって発行された証明書をドメイン名に割り当てる必要があります
。WeChat アプレットのバグのため、実際の Android 携帯電話は TLS/443 ポートを使用する必要があり、そうしないと接続が失敗します (つまり、接続アドレスにポート)

mqtt.mini.js をダウンロードしてインポートし、
ここに画像の説明を挿入します
WeChat アプレットの onLoad ステートメント サイクルでテストします。

	 onLoad(options) {
    
    
    try {
    
    
      console.log("开始链接");
      const clientId = new Date().getTime();//mqtt的连接ID
      app.globalData.client = mqtt.connect(`wxs://${
      
      host}/mqtt`, {
    
    
          username,
          password,
          reconnectPeriod,
          connectTimeout,
          clientId,
      });
    } catch (error) {
    
    
        console.log("mqtt.connect error", error);
    }
    if (app.globalData.client) {
    
    
      app.globalData.client.subscribe("test")
    }

    app.globalData.client.on("message", (topic, payload) => {
    
    
      console.log(`收到消息 - Topic: ${
      
      topic},Payload: ${
      
      payload}`)
      // app.globalData.currMsg = JSON.parse(payload);
      // console.log(typeof payload)
    });
  }

ウィル メッセージはここで受信されました。
ここに画像の説明を挿入します
サブスクリプション、パブリッシュ、メッセージ コールバックなどのその他の API については、MQTT.js を確認してください。

おすすめ

転載: blog.csdn.net/Systemmax20/article/details/132651442