クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

MQTTでセンサーの値を読む

このレッスンのあとで: MQTTのメッセージを読み、トピックと値に分けることができる。

50分のレッスンコマンド2件MQTT メッセージングラボ:機器がブローカーと話す仕組みをブラウザーで

センサーのメッセージとは何ですか

MQTT(Message Queuing Telemetry Transport)は、通信の約束の名前です。センサーのような小さな機器が、短いメッセージを送り合うときに使います。メッセージには、行き先を表すトピックと、中身の値が付きます。

このレッスンでは、家の気温や、ドアの開け閉めのメッセージを読んで、トピックと値に分けます。

このレッスンのゴール

メモ

MQTTのメッセージを読み、トピックと値に分けることができる。

キーワード

ことばいみれい
メッセージ機器が送る、トピックと値の組
トピックメッセージの宛先を表す、パスのような名前home/door/state
ペイロードメッセージの中身の値
ブローカーメッセージを受け取って、配る係
サブスクライブ読みたいトピックをブローカーに伝えること

学生が入力するセルは、このプレビューでは空白です。

メッセージはトピックと値でできている

ドアのセンサーは、home/door/state というトピックに、open か closed を送ります。気温のセンサーは、home/kitchen/temperature に整数を送ります。

トピックは、フォルダのように、スラッシュで区切って書きます。左が大きな分類、右が細かい分類です。

このラボでできないこと

重要

ラボには、家のセンサーを真似た仕組みと、ブローカーがあります。実機は、名前とパスワードで接続し、通信を暗号化します。ラボはそれを省いています。ブラウザの画面はないので、端末を使います。

ラボの4つのトピック

トピック値の形
home/livingroom/temperature整数
home/livingroom/humidity整数
home/kitchen/temperature整数
home/door/stateopen か closed

学生が入力するセルは、このプレビューでは空白です。

居間の気温を3回読む

コマンド
docker exec broker mosquitto_sub -t home/livingroom/temperature -v -C 3 -W 10

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

1行がトピックと値

-v を付けると、1行に、トピック、空白1つ、値の順で出ます。-C 3 は3件で止まり、-W 10 は10秒で止まります。

出る数は、押した時刻で変わります。確かなのは、3行とも home/livingroom/temperature で始まり、値が整数であることです。

家のすべてのメッセージを読む

次の Run は、home/# を読みます。# は、home の下のすべてのトピックを表します。くわしくは、次のレッスンで学びます。

8行が出ます。最初の数行は、保存されたメッセージで、すぐに出ることがあります。気温と湿度は整数、ドアは open か closed です。

家のすべてを8件読む

コマンド
docker exec broker mosquitto_sub -t 'home/#' -v -C 8 -W 10

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

1行をトピックと値に分ける

コード: python
line = "home/kitchen/temperature 19"
parts = line.split(" ", 1)     # 最初の空白で、2つに分ける
topic = parts[0]
value = parts[1]
print("トピック:", topic)
print("値:", int(value) + 1)   # 整数に直すと、計算できる
levels = topic.split("/")      # スラッシュで、階層に分ける
print("階層:", levels)
# 練習: line を "home/door/state open" に変えて、int の行を消しましょう。

よくある間違い

注意

「値は、受け取ったときから数である」と考える人が多くいます。メッセージの値は、文字の並びです。19 も、文字の 19 として届きます。計算する前に、int で整数に直します。

このラボとソースについて: MQTT メッセージングラボ:機器がブローカーと話す仕組みをブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。