株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

IoT Raspberry Pi

Raspberry PiでIoT(MQTTで遠隔操作編 その3)Raspberry PiのGPIOとHeroku連動Sub編

投稿日:2017年4月23日 更新日:

Raspberry PiでIoT MQTTで遠隔操作編の3回目です。2台のRaspberry Piでインターネット経由でGPIOを操作するというテーマで書いています。前回はHerokuでMQTT Brokerを構築しました。今回からそのMQTT BrokerとRaspberry Piを連動させてみます。

今回のシリーズ一覧です
RaspiでIoT(MQTTで遠隔操作編 その1)MQTTでの通信
RaspiでIoT(MQTTで遠隔操作編 その2)MQTT Brokerの構築とPythonでのpub/sub
RaspiでIoT(MQTTで遠隔操作編 その3)Raspberry PiのGPIOとHeroku連動Sub編
RaspiでIoT(MQTTで遠隔操作編 その4)Raspberry PiのGPIOとHeroku連動Pub編

以下の順番に書きます。
1.Raspberry Piとリレーとライトの接続
2.Sub側のPythonプログラムの実行
3.HerokuのCloudMQTT ConsoleからPublishでライトのon/off

1.Raspberry Piとリレーとライトの接続
リレー関連は以下で書いたものを利用しました。ライトは家電量販店で買った普通のクリップ型のライトです。
Raspberry PiでAC100V(ソリッド・ステート・リレー)制御
今回はこのように接続しました。

リレーの部分が以下です。

左側の端子ブロックがAC100Vで右側の端子ブロックがRaspberry Piです。Raspberry Piの配線は以下です。
赤 -> 5V
赤 -> GND
灰色 -> GPIO21

これで、Raspberry Piの電源を入れてインターネットに接続します。AC100Vはコンセントに差し込みます。これで準備完了です。(※実際に動作させる場合は十分に気を付けて下さい。)ライトにはもちろん手元にスイッチがあるのでこれはオンにしておきます。

2.Sub側のPythonプログラムの実行
次にこのRaspberry PiをMQTTのSub側にして指定されたTopicからメッセージを受信した際にGPIO21をONにしてリレー経由でライトを点灯します。そのためのPythonプログラムが以下です。


import paho.mqtt.client as mqtt
import RPi.GPIO as GPIO
import time

def on_connect(client, userdata, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("isyjp/gpio21")

def on_message(client, userdata, msg):
     print(msg.topic+" "+str(msg.payload))

     if msg.payload == "on":
         GPIO.output(21,1)
     else:
         GPIO.output(21,0)

GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.OUT)

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.tls_set("/etc/ssl/certs/ca-certificates.crt")

client.username_pw_set("cloudMQTTのユーザ名", "パスワード")
client.connect("cloudMQTTのURL", SSLポート番号)

client.loop_forever()

前回のプログラムにGPIOの制御を追加しました。isyjp/gpio21のTopicをSubscribeしていて、onというメッセージが来たら、GPIOをHIGHにして、on以外のメッセージでLOWにします。このPythonプログラムを実行すると、待ちの状態になりますので実行してpublishを待ちます。

3.HerokuのCloudMQTT ConsoleからPublishでライトのon/off
subscribeの状態で待っているRaspberry PiにHerokuのCloudMQTT Consoleでメッセージを送信してライトをon/offします。

前回の「2.構築したCloudMQTTをブラウザで試す」で動作させたように画面からisyjp/gpio21のTopicにonをSendします。これでリレーのLEDが点灯して、ライトが点灯します。on以外で例えばoffとSendすれば、リレーのLEDとライトが消灯すると思います。

HerokuのCloudMQTT Console

Sub側のPythonプログラムの出力

(※やり直したのでGPIOのWarningも表示されています)

ライトの状態です。元々ライト自体に手元のスイッチがあるのでそれはもちろんONにしたままです。


以上で動作が確認出来ました。

今回はここまでです。次回はスイッチ側のRaspberry Piからpublishを実行してライトを制御します。



AdSense

AdSense

-IoT, Raspberry Pi

執筆者:

関連記事

Raspberry PiのPL2303内蔵コンソールケーブルのWindows8.1の対応について

Raspberry PiのコンソールケーブルでProlific社のUSBシリアル変換チップのPL-2303を内蔵している製品について、Windowsのバージョンの対応状況についてです。 まず、Rasp …

Raspberry PiでIoT(MQTTで遠隔操作編 その2)MQTT Brokerの構築とPythonでのpub/sub

Raspberry PiでIoT MQTTで遠隔操作編の2回目です。2台のRaspberry Piでインターネット経由でGPIOを操作するというテーマで書いています。前回はMQTTの基本的な内容とMo …

Raspberry PiでAC100V(ソリッド・ステート・リレー)制御

Raspberry PiでAC100VのON/OFF制御を試してみました。今回そのために以下のソリッド・ステート・リレーキットを利用しました。この製品を選んだ理由としては「扱いが簡単」かなと思ったから …

Raspberry Piでも温度センサADT7310をつかってみる

以下の記事でArduino Unoで温度センサのADT7310を使ってみました。 Arduino UnoでSPI通信(その2)温度センサADT7310 以下の製品です。 ADT7310使用 高精度・高 …

SkyWayでRaspberry Piの遠隔操作(その2)SkyWayからの操作

前回の続きです。全体的にはSkyWayを利用してRaspberry Piの遠隔操作をしてみようという内容です。 前回はRaspberry Pi側でのブラウザ(JavaScript)からMQTT ove …


Notice: Trying to access array offset on value of type null in /virtual/indpsys/public_html/independence-sys.net/main/wp-content/plugins/amazonjs/amazonjs.php on line 637

Notice: Trying to access array offset on value of type null in /virtual/indpsys/public_html/independence-sys.net/main/wp-content/plugins/amazonjs/amazonjs.php on line 637

Notice: Trying to access array offset on value of type null in /virtual/indpsys/public_html/independence-sys.net/main/wp-content/plugins/amazonjs/amazonjs.php on line 637

Notice: Trying to access array offset on value of type null in /virtual/indpsys/public_html/independence-sys.net/main/wp-content/plugins/amazonjs/amazonjs.php on line 637