esp8266でMQTTを使ってみる

MQTTを利用してesp8266とRaspberry Pi間でメッセージの送受信をしてみた。

  • 使用した物

   ・esp8266

   ・Raspberry Pi2

   ・タクトスイッチ×1

  • 開発環境

   ・ArduinoIDE 1.6.12

   ・Python2.7.9 (Python3.4.2でも動作確認)

   ・sango

  • ネットワーク構成図

f:id:dev-moyashi:20161119214455p:plain

MQTTブローカーを立てる

MQTTブローカーの構築が面倒くさかったので、MQTTブローカーサービス「sango」を利用しました。メッセージ数の上限が気になる人はMosquittoやRabbitMQで構築してください。

 

esp8266からpublishする

  1.  プルダウン回路を組む(今回はIO12を使用)
  2. ArduinoIDEのライブラリマネージャーから「Adafruit MQTT Library」をインストールする
  3. スケッチの例→Adafruit MQTT Library→mqtt_esp8266
  •  サンプルスケッチ

60行目 : 接続を維持するためにpingを送信していると、あっという間にメッセージ数の上限に達してしまうのでコメントアウトしました。

esp8266にサンプルのプログラムを書き込み、WiFi接続ができたらタクトスイッチを押します。sangoのダッシュボードを開いてコネクション数とメッセージ数が増えていることが確認できたら完了です。

 

Raspberry Piでsubscribeする

paho-mqttというライブラリをインストールします

$ pip install paho-mqtt

 

次にpythonでsubscribeするプログラムを書きます。

  • サンプルプログラム

 

動作確認

タクトスイッチを押したときに"Hello!"と表示されれば成功です。

今回は1台だけでメッセージを受信しましたが、MQTTは1対多の通信が可能なのでRaspberry Piを複数個同時に遠隔操作することも可能です。