「MQTTで始めるIoTデバイスの作り方」もいよいよ核心に迫ります。今回はArduinoをプログラミングして、MQTTブローカーへ接続する手順を紹介します。あえてライブラリを利用しないことで、その基礎を学びます。
この連載では、電気電子の知識にあまり自信がないIT系あるいはWeb系のエンジニアが実際に簡単なIoTデバイスを製作し、通信プロトコル「MQTT」を用いてネット上のサービスに接続できるまでを目標としています。
デバイス側のマイコンは電子工作でよく利用される「Arduino」を用いますが、「Lチカ」程度は経験があり、TCP/IPについても基本的なところは習得されていることを前提に進めていきます。
前回はPCからターミナルエミュレーターをマニュアル操作してMQTTブローカーに接続しましたが、今回はArduinoあるいはその互換機をMQTTブローカーに接続します。
ArduinoにはMQTTプロトコルを扱うためのプロトコルスタックやライブラリが用意されていますが、こちらについてはネット上にも情報が多いので割愛し、今回はTCP/IPのレイヤーを直接たたいて、MQTTプロトコルの送受信を行います。
直接たたくおかげで、簡単なパブリッシュやサブスクライバーのプログラムならば、2Kb程度で実現できます。プロトコルスタックなどの利用に比べれば手間が掛かることは事実ですが、基礎を学び軽量なプログラムを実現するために学んで頂ければと思います。
今回紹介する内容の実践には、Arduino本体とArduino開発環境(Arduino IDE)が必要です。Arduinoそのものの扱いやArduino IDE構築方法は下記の参考文献を参照してください。LEDの点滅プログラムや、PC/Arduinoの間でシリアル通信ができるようになっていれば十分です。
参考:Arduinoで電子工作をはじめよう!全12回連載まとめ
下図がArduino NanoとWi-Fiモジュール「ESP8266」との配線です。
筆者はESP8266のブレークアウトボードとともにブレッドボードにさして使えるという理由から、Arduino Nanoを使っています。ですが、手元にあったArduino Nano互換機では、ESP8266が使う電流容量(3.3V/500mA)が不十分なようで、5Vから3.3Vを作るデバイスとして3端子レギュレーター(「AZ-1086H-3.3」)を用意しました。
Arduino NanoとESP8266の間に3端子レギュレーターを入れています。筆者は3端子レギュレーターを用いましたが、3.3Vを出力し500mA以上の電流容量があるものであれば同様に使えます。ただし種類によってはピンの配列が異なることがありますので注意してください。
下が上記配線をブレッドボードに実装した画像です(発光ダイオードが写っていますが、これは今回の実験では関係ありません)。
配線図ではESP8266のブレークアウトに隠れた配線もありますので、前回の記事(MQTTで始めるIoTデバイスの作り方 第3回:ESP8266でMQTT)を参考にしてください。
配線図ではESP8266のグランドは9番ピンに接続されていますが、写真では18ピンがグランドに接続されています。実はES8266の内部で両方のピンは互いにチップ内で接続されているのでどちらをグランドに落としてもよいのですが、両方ともグランドに落とすのがベターでしょう。
またオレンジ色の円筒形部品が写っていますが、これは電解コンデンサーです。3端子レギュレーターの出力側の3.3Vとグランド間に入れます。これを入れることにより、負荷に対する電源電圧が安定します。
今回の電源は全てPCからUSB経由で供給される5Vを使っているのですが、PCによってはこれらを全てまかなえないかもしれません。もし動作が安定しない場合は電源容量の問題かもしれませんので、3.3V側だけでも別の電源を用意したほうが良いかもしれません。
Copyright © ITmedia, Inc. All Rights Reserved.