MQTT で ESP-01 を使用する: IoT デバイスを接続して制御する方法

MQTT で ESP-01 を使用する: IoT デバイスを接続して制御する方法

予算が限られているからといって、必ずしも高度な DIY プロジェクトに取り組めないわけではありません。IoT プロジェクトをスケールアップするための小型、手頃な価格、便利な WiFi モジュールをお探しの場合は、ESP-01 モジュールが最適です。ただし、このようなモジュールを MQTT などの軽量プロトコルと統合するのは、特に IoT 開発に慣れていない場合には難しい場合があります。

ESP-01 ボード単独のプログラミングは、ESP8266 シリーズの他のモジュールと比べて困難な場合があります。ただし、モジュールの使用を開始するために必要なすべてのハードウェアとソフトウェアのセットアップの基本と、シンプルで手順的な方法で MQTT をセットアップする方法を見てみましょう。

理事会について知る

ESP8266 ESP-01 は、IoT アプリケーション向けに設計された高度に統合された SoC である ESP8266EX チップを搭載した小型でコンパクトな WiFi モジュールです。

MQTT で ESP-01 を使用する: IoT デバイスを接続して制御する方法

このモジュールには、TCP/IP プロトコル スタックを備えたシングルチップ ワイヤレス マイクロコントローラーが含まれており、ワイヤレス ネットワークに接続したり、アクセス ポイントとして機能したりできます。ESP-01 モジュールには、GPIO ピン、電源とグランド、および UART インターフェイスへのアクセスを提供する 2x4 ピン ヘッダーも備えています。

ハードウェアのセットアップ

このモジュールはブレッドボードにはまったく適していません。便宜上、既成の拡張ボードを購入するか、ジャンパー ワイヤとブレッドボードを使用する昔ながらの方法を使用することもできます。

プログラミング体験を容易にする専用プログラマである ESP8266 シリアル モジュール ボードがあります。この方法を使用したい場合は、DIYHOBI に、プログラマ (USB - TTL CH340G コンバータ モジュール アダプタを含む) を使用してプログラムを ESP-01 モジュールにフラッシュする方法に関する便利なチュートリアルがあります。

ただし、Arduino ボードを使用してモジュールをプログラムすることはできます。参考までに以下の回路図をご覧ください。

MQTT で ESP-01 を使用する: IoT デバイスを接続して制御する方法

魅力的に見えるかもしれませんが、モジュールを Arduino の 3.3v ピンに直接接続することは、ピンが供給する電流よりも多くの電流を必要とするため、通常はお勧めしません。代わりに、Arduino 5V をLM1117/LD117 などの 3.3V 電圧レギュレータに接続し、レギュレータから WiFi モジュールに電力を供給します。

ESP のVCC ピンCH_PDピンをArduino の5Vピンに接続しないでください。モジュールを5V電源に接続すると、モジュールが損傷する可能性があります。

すべてのコンデンサは10uFで、抵抗は1K抵抗です。

ソフトウェア要件

ESP-01 モジュールは、Arduino プラットフォームでよく使用されます。そのため、特に Arduino C に精通している場合は、ソフトウェアのセットアップは非常に簡単です。ただし、Raspberry に精通している場合は、試せるRaspberry Pi IoT プロジェクトがたくさんあります。

基本的な要件は次のとおりです。

  • MQTT ブローカーまたはサーバー (Mosquitto や CloudMQTT など)。
  • ESP8266 コア ライブラリを備えた Arduino IDE。
  • Arduino 用の PubSubClient ライブラリ。

独自の MQTT サーバーをローカルに持つと、プロジェクト内で柔軟性が得られることを覚えておく必要があります。

必要なライブラリのインストール

まず、Arduino IDE をコンピュータにダウンロードしてインストールします。インストールしたら、Arduino IDE を開き、[ファイル] > [設定]に移動します。

MQTT で ESP-01 を使用する: IoT デバイスを接続して制御する方法

[追加のボード マネージャー URL]フィールドに、次の URL を入力します。

http://arduino.esp8266.com/stable/package_esp8266com_index.json

「OK」をクリックして「環境設定」ウィンドウを閉じます。

MQTT で ESP-01 を使用する: IoT デバイスを接続して制御する方法

次に、[ツール] > [ボード] > [ボード マネージャー]に移動します。

次に、 esp8266を検索して、esp8266 ボード パッケージをインストールします。これには、ESP-01 モジュールに必要なライブラリがすべて含まれています。

MQTT で ESP-01 を使用する: IoT デバイスを接続して制御する方法

PubSubClient ライブラリをインストールするには、[スケッチ] > [ライブラリをインクルード] > [ライブラリの管理]に移動します。

MQTT で ESP-01 を使用する: IoT デバイスを接続して制御する方法

PubSubClientを検索し、ライブラリをクリックしてインストールします。

MQTT で ESP-01 を使用する: IoT デバイスを接続して制御する方法

必要なライブラリをすべてインストールしたら、ESP-01 モジュールのプログラミングを開始できます。ただし、注意すべき点が 1 つあり、ライブラリに含まれているWifi.hを使用することも、 ESPWifi.hライブラリをダウンロードしてスケッチに含めることもできます。

ESP-01とMQTTブローカー間の接続の確立

MQTT ブローカーは、MQTT クライアント間の仲介者として機能するサーバーです。これにより、クライアントはパブリッシュ/サブスクライブ モデルを通じて相互にメッセージを送受信できるようになります。

ESP-01 モジュールを MQTT ブローカーに接続するには、コードでブローカーの IP アドレスとポート番号を指定する必要があります。また、ESP-01 モジュールを識別する一意のクライアント ID をブローカーに提供する必要があります。

まず、必要なライブラリをスケッチの先頭に含めます。

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

次に、WiFi と MQTT 接続の詳細を定義します。

const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; const char* mqtt_server = "YOUR_MQTT_SERVER";

プレースホルダーを独自の WiFi および MQTT 接続の詳細に置き換えることを忘れないでください。

その後、WiFi クライアントを作成し、ローカル WiFi ネットワークに接続します。

WiFiClient espClient; void setup_wifi() {   delay(10);   WiFi.begin(ssid, password);   while (WiFi.status() != WL_CONNECTED) {     delay(500);   } }

この関数は、スケッチのsetup()関数で呼び出す必要があります。

次に、MQTT クライアントを作成し、MQTT ブローカーに接続する必要があります。

PubSubClient client(espClient); void reconnect() {   while (!client.connected()) {     if (client.connect("ESP01", mqtt_user, mqtt_password)) {       // Subscribe to a topic       client.subscribe("test/topic");     } else {       delay(5000);     }   } }

MQTT ブローカーに接続したら、トピックのパブリッシュとサブスクライブを開始できます。

ESP-01 から MQTT ブローカーへのデータのパブリッシュ

ESP01 モジュールを MQTT ブローカーに正常に接続したので、ESP-01 からブローカーにデータを公開する方法を見てみましょう。

データを公開するには、client.publish()関数を使用してメッセージをinTopicトピックに公開します。

client.publish("inTopic", "Hello from ESP-01");

これにより、「Hello from ESP-01」というメッセージがinTopicトピックに公開されます。

ESP-01 からセンサー データをブローカーに公開することもできます。たとえば、ESP-01 に温度センサーが接続されている場合、以下に示すように温度データをブローカーに公開できます。

float temperature = 25.5; String temperatureString = String(temperature); char temperatureChar[5]; temperatureString.toCharArray(temperatureChar, 5); client.publish("Temp", temperatureChar);

これにより、温度データがTempトピックに公開されます。

データは、プロジェクトの要件に応じて、ループまたは定期的な間隔で公開できます。ブローカーに大量のデータを大量に送信しないこと、および適切な間隔で公開していることを確認してください。

MQTT トピックのサブスクライブと ESP-01 でのデータの受信

トピックをサブスクライブするには、client.subscribe()関数を使用します。以下のケースでは、クライアントはoutTopicトピックをサブスクライブします。

client.subscribe("outTopic");

トピックをサブスクライブすると、以下のスケッチのloop ()関数のclient.loop ()関数を使用して、そのトピックにパブリッシュされたメッセージを受信できます。

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

これにより、継続的に新しいメッセージがチェックされ、新しいメッセージを受信したときにコールバック関数が実行されます。

受信したメッセージを処理するには、以下に示すようなコールバック関数を定義します。

void callback(char* topic, byte* payload, unsigned int length) {   // Print the received message   Serial.print("Message received on topic: ");   Serial.print(topic);   Serial.print(". Message: ");   for (int i=0;i     Serial.print((char)payload[i]);   }   Serial.println(); }

この関数は、サブスクライブされたトピックで新しいメッセージを受信したときに呼び出されます。受信したメッセージをシリアル モニターに出力します。

QoS (Quality of Service) レベルとセキュリティ機能の使用

リクエストを処理する際に使用される最も重要なテクニックの 1 つは、MQTT メッセージの QoS (Quality of Service) レベルを使用することです。QoS レベルは、ブローカーとサブスクライバーがメッセージを処理する方法を定義します。QoS には 0、1、2 の 3 つのレベルがあります。

QoS レベル 0 は、メッセージが 1 回だけ送信され、加入者に配信されることが保証されないため、信頼性が最も低くなります。QoS レベル 1 は、メッセージが少なくとも 1 回送信され、加入者に少なくとも 1 回配信されることが保証されているため、より信頼性が高くなります。QoS レベル 2 は、メッセージが 1 回だけ送信され、加入者に 1 回だけ配信されることが保証されるため、最も信頼性が高くなります。デバイスの通信方法は、他の一般的なモノのインターネット (IoT) のセキュリティ問題や常に把握しておきたい修正と一致しています。

QoS レベルを使用するには、 client.publish()関数を使用してメッセージをパブリッシュするときに目的のレベルを指定できます。

client.publish("topic", "Hello, world!", 1);

これにより、メッセージ「Hello, world!」が公開されます。QoS レベル1のトピックtopicに移動します。

もう 1 つの高度なテクニックは、遺言書 (LWT)メッセージを使用することです。LWT メッセージは、クライアントが予期せず切断されたときにブローカーによって送信されるメッセージです。これは、オフラインのデバイスを検出したり、デバイスが切断されたときにアクションをトリガーしたりするために重要であると考えています。

LWT メッセージを使用するには、 client.setWill()関数を使用してブローカーに接続するときに LWT メッセージを指定できます。

client.setWill("status", "offline", 1, true);

これにより、QoS レベル 1 と保持フラグがtrueに設定されたステータストピックでLWT メッセージがオフラインに設定されます。

次の IoT プロジェクトの準備をする

ESP-01 モジュールは、IoT プロジェクト向けの手頃な価格のコンパクトなソリューションであり、MQTT と併用することでプロジェクトを次のレベルに引き上げることができます。初期設定は気が遠くなるかもしれませんが、軽量な通信や高い拡張性などの MQTT の利点により、投資する価値があります。