このレッスンでは、NodeMCUボード上でのMQTTプロトコルの基本的な使い方を紹介します。ここでは、MQTTクライアントとしてMQTTBoxを使用し、NodeMCUを使って以下の処理を行います:
ブロッキング再接続関数を使用して、接続が切れた場合にサーバーに再接続する。メインループをブロックせずに同じ結果を得る方法については、’mqtt_reconnect_nonblocking’ の例を参照のこと。
NodeMCUとPCをUSBケーブルで接続します。
MQTTブローカーと通信するためにMQTTエンドポイントライブラリ(PubSubClient)をインストールします:
https://osoyoo.com/wp-content/uploads/samplecode/pubsubclient.zip
上記のファイルを解凍し、解凍したフォルダをアルドゥイーノIDEライブラリフォルダに移動します。
アルドゥイーノIDEを開くと、”Examples “欄に “pubsubclient “があります:
これらのレッスンでは、MQTTクライアントとしてMQTTBoxを使用します。(他のクライアントを使用することもできます )
インストールが完了するとこのような画面が表示されます:
以上の操作が完了したら、アルドゥイーノIDE->File->Example->pubsubclient->mqtt esp8266を開くと、以下のコードが表示されます:
以下のように、自分のWiFiとMQTTの設定に合わせてコードを編集してください:
1)WIFIの設定:
const char* ssid = “your_hotspot_ssid”;
const char* password = “your_hotspot_password”;
上記のコード行を探し、そこに自分のssidとパスワードを記述します。
2)MQTTサーバーアドレスの設定
const char* mqtt_server = “broker.mqtt-dashboard.com”;
上記のmqtt_serverの値には、自分のMQTTブローカーのURLやIPアドレスを使うことができます。また、”broker.mqtt-dashboard.com”、”iot.eclipse.org “などの有名なフリーのMQTTサーバーを使用してプロジェクトをテストすることもできます。
3)MQTT Client Settings
MQTTブローカーがclientID、ユーザー名、パスワード認証を必要とする場合は、次のように変更する必要があります。
if (client.connect(clientId.c_str()))
to
if (client.connect(clientId,userName,passWord)) //put your clientId/userName/passWord here
そうでなければ、デフォルトのままにしておく。
その後、以下のように対応するボード タイプとポート タイプを選択し、スケッチを NodeMCU にアップロードします。
このステップでは、MQTTBox上にMQTTクライアントを作成する方法を説明します。
MQTTBoxを開き、青いボタンをクリックして新しいMQTTクライアントを追加します。
すると
MQTT CLIENT SETTINGSを以下のように設定します:
クリックして変更を保存します。
上記の設定が全て正しければ、”Not Connected “が “Connected “に変わり、MQTTクライアント名とホスト名がこのページの上部に表示されます。
トピックの設定
MQTTクライアントのパブリッシュトピックが、アルドゥイーノスケッチのサブスクライブトピック(トピックはこちら)と同じであることを確認してください。
MQTTクライアントのサブスクライブトピックが、アルドゥイーノスケッチのパブリッシュトピック(outTopic)と同じであることを確認してください。
スケッチ側
アップロードが完了し、無線LANホットスポットの名前とパスワードの設定に問題がなく、MQTTブローカーが接続されていれば、シリアルモニターを開くと、次のような結果が表示されます:
次にMQTTクライアントを開き、ペイロード “1 “をトピックにパブリッシュすると、NodeMCUは “inTopic “にサブスクライブしてこれらのメッセージを受信し、LEDが点灯します。
このトピックにペイロード「0」を発行すると、NodeMCUのLEDが消灯します。
下図右のように、Subscribeボタンをクリックすると、このNodeMCUが発行したメッセージをSubscribeし続けます。
DownLoad Url osoyoo.com
You must be logged in to post a comment.
I could not get this to work correctly “if (client.connect(clientId,userName,passWord))”
If your MQTT server requires a password I had success with adding 3 lines.
#Add these up near the wifi ssid and password and change the values in the quotes
const char* mqtt_username = “mqttuser”;
const char* mqtt_password = “mqttpass”;
#Replace this line with
if (client.connect(clientId.c_str()))
#This line
if (client.connect((char*) clientId.c_str(), mqtt_username, mqtt_password))