#Arduino Ethernetで MQTT-SN クライアントを動かしてみよう#
Arduino Ethernet は8ビットマイコンを使用したコンピュータでEthernetコントローラーを内蔵しています。 主な仕様は以下の通りです。
- マイクロコントローラ ATmega328
- 作動電圧 5V
- 入力電圧 7-12V
- デジタルI/O ピン 14 (そのうち4本が PWM 出力可能)
- アナログ入力ピン 6
- I/Oピン出力電流 40 mA
- フラッシュメモリ 32 KB (ATmega328)
- SRAM 2 KB (ATmega328)
- EEPROM 1 KB (ATmega328)
- Clock Speed 16 MHz
- W5100 TCP/IP Embedded Ethernet Controller
1970年代ならば最先端のコンピューターです。
##用意するもの##
- Linux、Windows、Macなんでも良い。 開発環境として ArduinoIDE バージョン1.6.4
- Arduino Ethernet Rev3
- USB-シリアル変換アダプター
- インターネットルーター DHCPサーバー付
##Arduinoクライアントの作成##
step1. ソースコードの準備
必要なソースコードは その1で githubからホームディレクトリーにダウンロードされています。
AsyncMQTT-SN/AsyncClient/src/libにあるソースコードを全てzip形式で一つに圧縮して名前を MQTT-SNAsyncClient.zip にします。
step2. ライブラリーとしてIDEに登録します。
- AruduinoIDEを起動します。
- スケッチ > Include Library > Add .ZIP Library... とクリックして、MQTT-SNAsyncClient.zip ファイルを指定します。 これで登録は完了です。
- もう一つ、Arduinoが提供するEthernetUDPライブラリにマルチキャスト機能を追加します。追加方法は ここ を参照してください。
step3. クライアントのソースコードを作成します。
- スケッチ > Include Library とクリックするとメニューの一番下に 今登録したライブラリーがMQTT-SNAsyncClient と表示されているはずなので、これを選択します。 エディターにライブラリーに登録されたincludeファイルが表示されます。
- エディターに表示されている内容すべてを AsyncClient/src にある Application.ino ファイルの内容で上書きします。
- Linux用のコードとは、PUBLISHするトピックとsetup()関数の内容が少しだけ違います。
step4. クライアントのソースコードを修正します。
- Arduino Ethernet は DHCPプロトコルをサポートしないため、IPアドレスに固定アドレスを割り当てます。(DHCPサーバに手動でMACとIPアドレスを設定します)
- Arduino Etherは基盤毎にMACアドレスが6個の16進数で表示されていますので、この値と固定で割り当てたIPアドレスでソースコードを書き換えます。
変更する箇所を太文字で表記しています。
{ 192, 168, 1 , 10 }, // Local IP (for Arduino App)
{ 0x90, 0xa2, 0xda, 0x01, 0x01, 0x01 } // MAC address (for Arduino App)
#ifdef NETWORK_UDP
UDP_APP_CONFIG = {
{
"LinuxClient", //ClientId
{225,1,1,1}, // Multicast group IP
1883, // Multicast group Port
{0,0,0,0}, // Local IP (for Arduino App)
12001, // Local PortNo
{0,0,0,0,0,0} // MAC address (for Arduino App)
},
step5. コードをコンパイルしてArduinoに書き込む。
- 黄色で囲ってあるボタンを押すとコンパイルが実行され、エラーが無ければシリアル通信でFlashメモリにロードモジュールが書き込まれます。
リセットするとロードしたプログラムが起動します。
これで、LinuxクライアントとArduinoクライアントとゲートウェイの完成です。
LEDの点滅が確認できましたか。