モバイルアプリケーション用のMQTTブローカーとしてのESP8266

彼らが言うように、怠inessは進歩のエンジンです。 生活を楽にするために、ESP8266モジュールとModbusプロトコルを使用してガスセンサーと通信するためのRS485コンバーターの形の小さなデバイスを作成しています。 生産では、485インターフェイスを介してさまざまな種類の診断を実行するためにデバイスに接続する必要が常にありますが、ラップトップを持ち歩くのは不便ですが、携帯電話は常にポケットに入れられています。



開発プロセスには、電話からモジュールに直接接続し、MQTTクライアントアプリケーションを介してデータを交換できるライブラリがあります。 おそらくこのソリューションは、サードパーティのMQTTブローカー(Raspberryのローカルブローカーでもインターネットのブローカーでも)とインターネット接続を必要としないため、誰かにとっても有用です。これは私の場合で最も重要なことです。



電話アプリ



アプリケーションとして、IoTmanagerを選択しました。 主な機能は、HTML5 + CSSを使用した非常に柔軟なウィジェットのカスタマイズです。すべての設定は、アプリケーションではなくデバイスで行われます。 トピックはJSON形式で送信され、ヘッダー名、値、表示スタイルが含まれます。 誰かにとっては不便かもしれませんが、私はこのアプローチが好きでした。



アプリケーションは、Paho.jsとMQTT.jsの2つのMQTTライブラリで実行できます。 すぐに、Pahoライブラリを介してWebSocket接続を確立することに成功し、引き続き作業を続けました。 設定でMQTTを選択した場合、接続は行われません。WebSocketServerライブラリを掘り下げる必要があると思われます。



私は長い間Arduinoを軽deしたが、それでもstillめた



環境の選択について議論したくありません。ESP8266ファームウェアを作成するためにArduino IDEを選択する上で重要な役割を果たしたのは、既製のライブラリとドキュメントがたくさんあることです。 すべてがシンプルかつ高速で、プロジェクトの利点は複雑ではないことを約束します。



オフトピック
信じられないかもしれませんが、Arduino環境でプログラミングされたマイクロコントローラーを使用してロケットでさえ宇宙に飛びます。 決定的な役割は、多くの場合、開発の速度、つまり既製のライブラリをパスにプラグインすることによって果たされます。



すべてをオープンソース化



GitHubリポジトリ 。 ライブラリはまだ湿っています。場合によっては、ウィジェットの設定によりIoTmanagerの再接続が発生します。これは、私がまだ見つけられない理由であり、共同開発の速度が上がる可能性があります。



プロジェクトには2つのライブラリ実装が含まれています。



MQTTbroker.hは、サブスクリプション制御を備えた実際のブローカーを実装する試みです。 つまり、メッセージがトピックに到着すると、ブローカーはすべてのクライアントとそのサブスクリプションを調べ、一致(マスク/ + /を含む)を探し、トピック名に一致するサブスクリプションを持つ人にのみメッセージを送信します。



MQTTbroker_lite.hは、サブスクリプションを処理するための自動ロジックがないため、少し速く動作します。 すべての着信メッセージはメインプログラムのコールバック関数にリダイレクトされ、そこで必要に応じて自分で処理します。 私の特定のケースでは、このような実装が必要です。1台のデバイス-1台の接続されたクライアントで、何のために署名され、何を期待しているかを知っています。



作業例



ESP8266のモジュール(NodeMcuを使用しています)を使用して、ライブラリからサンプルスケッチをロードします。 Arduino IDEツールでデバッグ用にポートを無効にすることをお勧めします。無効にしないと、ライブラリは大量のデバッグメッセージを送信して、それらを確認します。 シリアルポートを開き、IPアドレスを確認します。



電話で、作成されたWi-Fiアクセスポイントに接続します。 IoTmanagerアプリケーションで、接続設定に移動します。PAHOエンジンを選択し、モジュールIPアドレス、ポート80、トピック/ IoTmanagerプレフィックスを駆動し、SSL / TLSを少し低く無効にします。



角にあるスピードメーターをクリックし、少し遅れてスイッチを接続して表示します。 接続できない場合は、アプリケーションを強制終了して再起動してください。 最初のスイッチでは、LEDが構成されています(ビデオを参照)。



接続時に遅延が発生する場合があります。 これは、IoTmanagerが一度にすべての初期メッセージを発行し、ESPが少しハングアップして処理し、その後ブレーキなしで機能するという事実によると思います。



簡単な説明



ライブラリの両方の部分は非常によく似ているので、_liteバージョンについて説明します。



typedef void(*callback_t)(uint8_t num, Events_t event , String topic_name, uint8_t * payload, uint8_t length_payload); // callback'a     MQTTbroker_lite(WebSocketsServer * webSocket); //     WebSocket void setCallback(callback_t cb); //  callback'a void begin(void); //  ( ) void parsing(uint8_t num, uint8_t * payload, uint8_t length); //   WS  void publish(uint8_t num, String topic, uint8_t* payload, uint8_t length); //   num void disconnect(uint8_t num); //  bool clientIsConnected(uint8_t num); //   
      
      





ビデオデモンストレーション





ご清聴ありがとうございました。 開発に参加しても、ライブラリはまだ湿っています。

ヘルプが必要な場合は、Telegram oWartにお問い合わせください



参照:



1. GitHubでのプロジェクト

2. IoTmanagerウィジェットの説明

3. MQTT v.3.1.1プロトコル仕様



All Articles