- MQTTプロトコルとは何ですか?
- MQTTはどのように機能しますか?
- EclipseMosquittoブローカー
- 必要なコンポーネント
- EclipseMQTTテスト-回路-回路図
- ブローカーとの通信を確立するためのESP8266のプログラミング
- Arduinoを使用したESP8266でのMQTTのテスト
過去数年間で、IoT(Internet of Things)デバイスは私たちの日常生活の中で見分けがつかない部分になりました。スマートホーム、スマート電球からスマート家電まで。クリエイターと開発者は、このテクノロジーを組み込んで、接続されたデバイスのネットワークを作成し、日常生活を少しエキサイティングなものにしています。これはすべて、コミュニケーションのしやすさのおかげで可能になりました。デバイス間で通信する方法はたくさんありますが、商用製品やホビー製品では、一般的に使用される単一のプロトコルはメッセージキューテレメトリトランスポート(MQTT)です。以前、ArduinoとMQTTを利用してNodeMCUボードと通信するGoogleアシスタントを使用して音声制御FMラジオを構築しました。それがあなたにとって興味深く聞こえるかどうかそれをチェックしてください。
このプロジェクトでは、無料で人気のあるEclipse MQTTブローカーを使用し、IoTデバイス(この場合はNodeMCUモジュール)をMQTTブローカーに接続し、MQTTブローカーとNodeMCU間でデータを転送する方法を学習します。
MQTTプロトコルとは何ですか?
先に進む前に、MQTT(Message Queuing Telemetry Transport) プロトコルについて明確に理解しておくことをお勧めします。これは、パブリッシュ/サブスクライブ方式を使用し、複数のデバイス間でメッセージを変換する軽量のメッセージングプロトコルです。MQTTプロトコルを使用すると、データの送受信や、センサーデータの読み取りなどのさまざまな出力デバイスの制御も可能です。TCP上で開発されているため、HTTPなどの同様のプロトコルよりも高速です。それ以外に、非常に軽量であるなど、他のプロトコルに比べて多くの利点があるため、余分なメモリを消費せず、非常に少ないネットワーク帯域幅で動作でき、さらに、堅牢なセキュリティプロトコルが組み込まれています。これらの機能により、多くのアプリケーションに適しています。
MQTTはどのように機能しますか?
MQTTプロトコルの動作を理解するには、3つの基本的なことを理解する必要があります。上の図はそれを示しています。また、以下の記事で説明しました。
MQTTクライアント:
AN MQTTクライアントは、任意のデバイスとして知られている中央サーバとMQTT機能とが通信を実行する(これはマイクロコントローラやサーバであってもよい)である、「ブローカ」。ブローカーは、接続されたクライアント間のデータ通信を処理します。
MQTTパブリッシャー:
クライアントが情報を送信したい場合、そのクライアントは「発行者」と呼ばれます。出版社は、特定のトピックに関する情報を公開します。「トピック」は、メッセージをパブリッシュ/サブスクライブできるパスです。次に、ブローカーは、ユーザーによって公開された情報を、その特定のトピックにサブスクライブしているクライアント(サブスクライバーとも呼ばれます)に送信します。
MQTTサブスクライバー:
MQTT加入者は、 上のトピックにサブスクライブ MQTTの ブローカーによって送信されたメッセージを読むためにブローカー。
EclipseMosquittoブローカー
Eclipse MosquittoはオープンソースのMQTTブローカーであり、軽量で、通信用のIoTデバイスでの使用に適しています。MQTTプロトコルは、パブリッシュ/サブスクライブ・モデルを使用して情報を転送する軽量の方法を提供します。このトピックについて詳しく知りたい場合は、蚊の公式Webサイトにアクセスしてください。
Eclipse Mosquittoブローカーのセットアップ:
ブローカーとの通信を確立するには、最初にブローカーを設定する必要があります。このプロジェクトでは、Androidアプリケーションを使用して、ブローカーで情報をパブリッシュおよびサブスクライブします。次の手順は、セットアッププロセスのより良いアイデアを提供します。
ステップ1:
まず、GooglePlayストア/ AppStoreで入手できる「MQTTクライアント」アプリケーションをダウンロードしてインストールします。このプロジェクトでは、以下の画像のような「MQTTclient」という名前のアプリケーションが使用されます。
ステップ2:
「+」記号をクリックして、新しいブローカーを追加するアプリケーションの追加オプションを一覧表示します。ボタンをクリックすると、以下のような新しい画面が表示されます。
ステップ-3:
その後、ブローカーの詳細を必須フィールドに入力する必要があります。まず、アプリケーションに表示されている「有効」オプションをクリックします。このプロジェクトでは、 Eclipse MQTTブローカーが使用されます。入力する詳細は、以下のとおりです。
ニックネーム:好みの名前を付けてください
ホスト: mqtt.eclipse.org
ポート: 1883
クライアントID:お好みのIDを入力してください
上記の詳細は、それぞれのフィールドに入力する必要があります。他のすべてのフィールドは必須ではなく、空白のままにすることができます。正常に完了したら、保存ボタンをクリックしてブローカーの詳細を保存します。
完了したら、Androidアプリケーションのセットアッププロセスは終了し、ハードウェア側に進むことができます。
必要なコンポーネント
必要な部品の完全なリストを以下に説明します。この回路はシンプルなので、地元のホビーショップで必要な部品をすべて見つけることができます。
- NodeMCU
- 導いた
- ブレッドボード
- 接続線
- プログラミングケーブル
EclipseMQTTテスト-回路-回路図
BasicMQTTプロジェクトの回路図を以下に示します。
ブローカーとの通信を確立するためのESP8266のプログラミング
単純なArduinoコードが、MQTTブローカーとNodeMCU間の必要なすべての通信を処理します。このセクションでは、この機能がどのように機能するかを詳しく学習します。
Arduino IDEをセットアップし、コードをアップロードします。
あなたがにコードアップロードする場合はNodeMCUを初めて、あなたはセットアップする必要がArduinoのIDEを最初に。これを行うには、以下の簡単な手順に従ってください。
まず、Arduino IDEを開き、[ ファイル] –> [設定] –> [設定]に移動し ます。
次に、以下のURLをコピーして、[追加のボードマネージャーURL]フィールドに貼り付け 、[OK]をクリックします。下の画像をチェックして、私たちがそれをどのように行ったかを知ることができます。
リンク:https://arduino.esp8266.com/stable/package_esp8266com_index.json
次に、 [ツール]> [ボード]> [ボードマネージャー] に移動し ます 。ボードのマネージャーウィンドウで、検索ボックスに ESP 8266と入力し、Enterキーを押します。次に、ドロップダウンから最新バージョンを選択し、[インストール]をクリックします。下の画像はあなたに明確な考えを与えるでしょう。
最後に、インストールが完了したら、 [ツール]-> [ボード]->に移動し、[NodeMCU 1.0(ESP-12Eモジュール)]を選択します。 これで、ArduinoIDEを使用してNodeMCUをプログラムできます。Arduino IDEのセットアップが完了したので、完全なコードをアップロードできます。しかし、最初に、コード全体の簡単な説明を読んでください。
まず、 ESP8266 を使用するための 「ESP8266WiFi.h」 とMQTT用の 「PubSubClient.h」 を 含め ました。
Arduinoライブラリ内に事前に構築されたESP8266ライブラリを見つけることができますが、関連するGitHubリポジトリからPubSubClientライブラリをダウンロードする必要があります。
#include
次に、Wi-Fiユーザー名やパスワードなどのネットワーク資格情報を定義します。それぞれ「admin」と「12345678」の代わりに資格情報を置き換えます。
const char * ssid = "admin"; const char * password = "12345678";
次に、MQTTサーバーを構成する必要があります。このプロジェクトでは EclipseMQTT サーバーを使用しました。そのため、サーバーアドレスは 「mqtt.eclipse.org」 として指定されています 。 ただし、Mosquitto、Adafruitなどの他のサーバーを使用する場合は、特定のサーバーアドレスとポート番号に置き換えることができます。
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
次に、クラス WiFiClient および PubSubClient のインスタンスが作成され、プログラム全体で使用されます。
WiFiClient espClient; PubSubClient client(espClient);
で 、セットアップ() セクション、我々は呼んで WiFi.begin()を お好みのホットスポットにESPを接続します。このメソッドを呼び出すと、最初に。
WiFi.begin(ssid、password);
次に、 WiFi.status() メソッド を使用してネットワーク接続が成功したかどうかを確認します 。 接続に成功すると、接続されたネットワークのSSIDを含むメッセージがシリアルモニターに出力されます。
while(WiFi.status()!= WL_CONNECTED){delay(500); Serial.println( "WiFiに接続しています.."); } Serial.print( "WiFiに接続:"); Serial.println(WiFi.SSID());
次に、ブローカーを作成する必要があります。そのために、 setServer メソッドを使用しました。このメソッドは、前に定義した2つの引数を取ります。ここで、サーバーからメッセージを受信する場合は、コールバック関数 を作成する必要があります。そのために、 setCallback(callback) メソッドを使用してい ます 。
client.setServer(mqtt_server、mqtt_port); client.setCallback(MQTTcallback);
これで、 接続(clientID) 関数を使用してESP8266クライアントに接続しました。ここで、clientIDはクライアントの名前であり、一意である必要があります。接続されている場合は、シリアルモニター内に成功メッセージを表示できます。
if(client.connect( "ESP8266")){Serial.println( "connected"); } else {Serial.print( "failed with state")Serial.println(client.state()); delay(2000); }
次に、我々は呼び出す )(client.subscribeを 、内蔵された特定のトピックにサブスクライブするために使用されるMQTT機能、。このプロジェクトでは、サブスクライバー名として「esp / test」を使用しました。
client.subscribe( "esp / test");
ここで、 MQTTcallback 関数が呼び出され、更新された情報が使用可能かどうかがチェックされます。新しいデータが利用可能な場合、この関数は受信したデータを処理し、メッセージを受信した元のメッセージとトピック名を使用してシリアルモニターにメッセージを出力します。
次に、メッセージを文字列に変換して、トリガーアクションを比較およびチェックできるようにします。このプロジェクトでは、以下のコードに示すように、MQTTコマンドを使用してLEDをオン/オフにします。
for(int i = 0; i <length; i ++){メッセージ=メッセージ+(char)ペイロード; } Serial.print(message); if(message == "on"){digitalWrite(LED、HIGH); }
最後に、トピックに関する情報を公開します。 client.publish() 関数が使用されます。このプロジェクトでは、プッシュボタンのステータスがチェックされ、ボタンが押されると、以下に示すようにメッセージがトピック「esp / test1」に公開されます。
if(digitalRead(D1)== 0)){client.publish( "esp / test1"、 "Hello from ESP8266"); } そうしないと; client.loop();
Arduinoを使用したESP8266でのMQTTのテスト
最終テストでは、以前にセットアップしたAndroidアプリケーションを使用します。
MQTTクライアントアプリケーションを開き、モバイルにアクティブなインターネット接続があることを確認します。また、NodeMCUが接続されているホットスポットには、アクティブなインターネット接続が必要です。すべてがインターネットに接続されたら、ESPモジュールから「Hellofrom ESP8266」文字列を送信します。これは、Androidアプリ内に反映され、通知を受け取ります。次に、Androidアプリから文字列を送信します。これにより、ESP8266ノードMCUボードに接続されているLEDがオンになります。
ステップ-1:(トピックを購読する):(
以前に構成したアプリの[保存されたMQTT]オプションをクリックします。画面がポップアップし、「トピックに登録」するように求められます。以前、トピックを「 esp / test1 」として構成しました。そのため、Androidアプリでは、「 esp / test1 」と記述し ます 。[購読]をクリックすると、以下のような画面が表示され、特定のトピックから「メッセージを受信していません」のように表示されます。
次に、nodeMCUに接続されている[接続済み]ボタンをクリックします。これで、コードに従って、「Hello from ESP8266」というメッセージがトピックに公開され、次のようにメッセージが受信されたという通知が画面に表示されます。
ステップ2:トピックに公開する:
トピックに公開するには、アプリケーションの上矢印ボタンをクリックすると、次のような画面が開きます。
ここで、[トピック]フィールドに「esp / test」と入力し、メッセージフィールドに「on」または「off」と入力して、それぞれLEDをオンまたはオフにします。たとえば、「オン」がトピックに公開されている場合、LEDはオンになり、「オフ」がトピックに公開されている場合、LEDはオフになります。
この記事が気に入って、何か新しいことを学んだことを願っています。この記事に関して質問がある場合は、以下にコメントするか、代わりにフォーラムを使用してください。