LoginSignup
12
13

More than 5 years have passed since last update.

IBM Bluemix で IoT (2) - Raspberry PiでIoT Lチカ

Last updated at Posted at 2015-08-14

前回でpythonからのpublish/subscribeができたので、Raspberry PiでIoT版Lチカをやってみる。プロトタイプのコードは github fnishio/mqtt-sampleを参照。

IoT版Lチカ

Android Phoneでボタンを押すと、IoT FoundationにつながっているRaspberry PiのLEDが点灯/消灯する。

  • RasbperriPi側
    • MQTT で toggle コマンドを受け取るたびに、LEDのoff/onを切り替
  • コントローラ側
    • Do Buttonを使ってWeb APIにアクセスする。
  • サービス側
    • Web APIを叩かれるたびに、APIで指定されたIDの機器に対してtoggleコマンドをpublishする。

Raspberry Pi側

接続機器の登録

IoT Foundationのdashboardを開いて接続する機器を登録する。
登録後に表示される認証用のAuthentication TokenはMQTT Broker接続時の認証パスワードとして使う。
device_reg.png

MQTT Brokerにつなぐ

device2.py
client_id = "d:{org_id}:{type_id}:{device_id}"
endpoint = "{org_id}.messaging.internetofthings.ibmcloud.com"
client = mqtt.Client(client_id)
client.username_pw_set("use-token-auth", PASSWORD)
client.on_connect = on_connect
client.on_message = on_message
client.connect(endpoint, 1883)

org_id, type_id, device_id, PASSWORDはIoT Foundationへの登録情報を元に適切に設定する。

Command Subscribe

  • Brokerに接続したらiot-2/cmd/led/fmt/jsonをsubscribe
  • toggleコマンドが来たらGPIO PINの状態を変える
device2.py
def on_connect(client, userdata, flags, rc):
    client.subscribe("iot-2/cmd/led/fmt/json")

def on_message(client, userdata, msg):
    payload = json.loads(msg.payload.decode())
    if payload['cmd'] == "toggle":
       # control GPIO
       global on_off
       on_off = ~on_off
       GPIO.output(LED_PIN, on_off)

サービス側

サービス側のアプリはNode-REDで以下のフローを実装。
control_app_flow.png

Web API

POSTで操作対象となる機器のdeviceIdを受け取る Web API。
control_app_api.png

Method URL
POST led/v1/toggle
Type Params Valuse Description
json deviceId string 操作対象のdevice ID

Command payload

toggle操作を行うcommand payloadを組み立てる。
control_app_toggle.png

Command publish

deviceId の機器に対して、トピックiot-2/cmd/led/fmt/jsonにコマンドをpublishする。
control_app_out.png

Controller側

Do Buttonで/led/v1/toggleのWebAPIに、制御対象となる機器のdeviceIdをPOSTする。

Recipe

Do ButtonにRecipeを設定。
controller_recipe.png

実行

実行の様子

12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13