MQTTで始めるIoTデバイスの作り方 第4回:ArduinoをMQTTブローカーに接続する:MQTTで始めるIoTデバイスづくり(4)(4/4 ページ)
「MQTTで始めるIoTデバイスの作り方」もいよいよ核心に迫ります。今回はArduinoをプログラミングして、MQTTブローカーへ接続する手順を紹介します。あえてライブラリを利用しないことで、その基礎を学びます。
subscriberスケッチ
次のリストはArduinoをサブスクライバーにするためのプログラムです。
#include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX char con[]={0x10,0x21,0x00,0x06,'M','Q','I','s','d','p',0x03,0x02,0x00,0x3c,0x00,0x13, 'm','o','s','q','s','u','b','/','1','2','5','1','6','-','h','i','r','o','3'}; char sub[]={0x82,0x06,0x00,0x01,0x00,0x01,'#',0x00}; void getResponse(int j){ int i; for (i=0;i<j;i++){ if (mySerial.available()) Serial.write(mySerial.read()); delay(1); } } void setup(){ int i,j; Serial.begin(9600); mySerial.begin(9600); while(!Serial); mySerial.print("AT+RST\r\n"); getResponse(5000); mySerial.print("AT+CIPSTART=\"TCP\",\"192.168.1.16\",1883\r\n"); getResponse(1000); mySerial.print("AT+CIPSEND=35\r\n"); getResponse(1000); for (i=0;i<35;i++)mySerial.write(con[i]); getResponse(1000); mySerial.print("AT+CIPSEND=8\r\n"); getResponse(1000); for (i=0;i<8;i++)mySerial.write(sub[i]); void loop(){ char c; while (!mySerial.available()); c = mySerial.read(); Serial.write(c); }
ほとんどの流れは先に紹介したpublishのプログラムと同様です。30行からのMQTTメッセージを送るところがsub[]に変わっており、ここでサブスクリプション要求を送っています。トピックが”#”になっていますので、全てのトピックのサブスクリプションを要求していますね。
loop関数内では、ESP8266がシリアルポートに送った全ての内容をPC側のシリアルポートに送達します。ESP8266がシリアルポートに送信した内容はPC側のターミナルエミューたーでモニターできます。
以下がターミナルエミュレーターのログです。前回はターミナルエミュレーターで行った処理をマイコンで肩代わりしたイメージですね。
T+RST OK WIFI DISCONNECT CLOSED ・"Bn"B・PBヨハ?SNタI ready WIFI CONNECTED WIFI GOT IP AT+CIPSTART="TCP","192.168.1.16",1883 CONNECT OK AT+CIPSEND=35 OK > Recv 35 bytes SEND OK +IPD,4: AT+CIPSEND=8 OK > Recv 8 bytes SEND OK +IPD,5: +IPD,16:0 arduino/d2/1
1行目は本来、「AT+RST」なのですが、シリアルポートの初期化のタイミングで最初の"A"が欠けることもあります。5行目はESP8266のリセット時のメッセージですが、リセット処理の直後はデフォルトのボーレートに戻るので文字化けしています。ログ最終行の「arduino/d2/1」が、他のノードからパブリッシュしたメッセージを受信したところです。
おわりに
今回はマイコン(Arduino)でMQTTメッセージのやりとりに挑戦してみました。次回はIoTらしく、「マイコンを使って部屋の明るさをパブリッシュする」作例に挑戦したいと思います。お楽しみに。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- MQTTで始めるIoTデバイスの作り方 第3回:ESP8266でMQTT
この連載では簡単なIoTデバイスを製作し、「MQTT」を利用してネットサービスに接続できるまでを紹介します。今回はマイコンに接続可能なWi-FiモジュールをMosquittoに接続するまでの下準備です。 - MQTTで始めるIoTデバイスの作り方 第2回:MQTTのプロトコルを解析して挙動を理解する
連載では「MQTT」を利用して簡単なIoTデバイスを製作し、ネットサービスに接続できるまでを紹介しますが、デバイスの自作を考えるとMQTTのプロトコルやメッセージシーケンスへの理解は欠かせません。 - MQTTで始めるIoTデバイスの作り方 第1回:「MQTT」を知り「Mosquitto」を導入する
この連載では「MQTT」を利用して簡単なIoTデバイスを製作して、ネット上のサービスに接続できるまでを紹介します。電子工作やアナログ制御に不慣れでも読み進められる内容としますので、気軽に挑戦してみてください。