連載
MQTTで始めるIoTデバイスの作り方 第6回:スマホからのデバイス制御:MQTTで始めるIoTデバイスづくり(6)(2/4 ページ)
今回は「MQTTを利用して、スマホからの操作でデバイスを制御する」というテーマで、Arduinoに接続されたLEDの無線ON/OFF操作を行います。QoSやセキュリティを考慮しない簡易的なものですが、「MQTTを使ったIoTデバイス製作」の端緒となる内容です。
発光ダイオードを点灯させるMQTTメッセージ
パブリッシャーが送信したメッセージで、サブスクライバー側の発光ダイオードを点灯/消灯させるためには、パブリッシャーとサブスクライバーとの間で「どのトピックに対してどの様なメッセージを送ったとき、発光ダイオードをON/OFFさせるか」という取り決めが必要となります。
今回は以下のようにしました。
>mosquitto_pub -h 192.168.1.16 -t arduino/d2/ -m "1" >mosquitto_pub -h 192.168.1.16 -t arduino/d2/ -m "0" >mosquitto_sub -h 192.168.1.16 -t "#" -v arduino/d2/ 1 arduino/d2/ 0
LED ON/OFFのためのパブリッシュメッセージ
これはmoquittoのインストールキットに同梱されている「mosquitto_pub」と「mosquitto_sub」でメッセージをやりとりした例です。トピックが「arduino/d2/で、メッセージが1」の場合に発光ダイオードを点灯させ、トピックが「arduino/d2/で、メッセージが0」の場合は発光ダイオードを消灯させることとします。
スケッチ
以下のリストが、Arduinoをサブスクライバーにしてメッセージに応じて発光ダイオードをON/OFFさせるプログラムです。ここで説明しない行については過去の記事(ArduinoをMQTTブローカーに接続する)など連載のバックナンバーを参考にしてください。
#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};
char ledOn[] ="arduino/d2/1";
char ledOff[]="arduino/d2/0";
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);
pinMode(2, OUTPUT);
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(){
static int i=0,j=0;
char c;
while (!mySerial.available());
c = mySerial.read();
if (ledOn[i++]!=c)i=0;
if (i==12)digitalWrite(2, HIGH);
if (ledOff[j++]!=c)j=0;
if (j==12)digitalWrite(2, LOW);
}
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
MQTTで始めるIoTデバイスの作り方 第5回:部屋の明るさを「パブリッシュ」する
「MQTTで始めるIoTデバイスの作り方」実践編です。今回は光センサーをArduinoに接続して部屋や屋外の明るさを測定し、その値をMQTTでスマートフォンへ送ります。
MQTTで始めるIoTデバイスの作り方 第4回:ArduinoをMQTTブローカーに接続する
「MQTTで始めるIoTデバイスの作り方」もいよいよ核心に迫ります。今回はArduinoをプログラミングして、MQTTブローカーへ接続する手順を紹介します。あえてライブラリを利用しないことで、その基礎を学びます。
MQTTで始めるIoTデバイスの作り方 第3回:ESP8266でMQTT
この連載では簡単なIoTデバイスを製作し、「MQTT」を利用してネットサービスに接続できるまでを紹介します。今回はマイコンに接続可能なWi-FiモジュールをMosquittoに接続するまでの下準備です。
MQTTで始めるIoTデバイスの作り方 第2回:MQTTのプロトコルを解析して挙動を理解する
連載では「MQTT」を利用して簡単なIoTデバイスを製作し、ネットサービスに接続できるまでを紹介しますが、デバイスの自作を考えるとMQTTのプロトコルやメッセージシーケンスへの理解は欠かせません。
MQTTで始めるIoTデバイスの作り方 第1回:「MQTT」を知り「Mosquitto」を導入する
この連載では「MQTT」を利用して簡単なIoTデバイスを製作して、ネット上のサービスに接続できるまでを紹介します。電子工作やアナログ制御に不慣れでも読み進められる内容としますので、気軽に挑戦してみてください。