5. @MQTTを使用したクラウド呼び出しシステム

Message Queuing Telemetry Transport(MQTT)はシンプルなメッセージングプロトコルです。 また、IoT(Internet of Things)の最も一般的なメッセージングプロトコルでもあります。

MQTTプロトコルは、IoTデバイスがデータを転送する方法を定義します。 これらはイベント駆動であり、Pub/Subモデルを使用して相互接続されています。 送信者(Publisher)と受信者(Subscriber)は、トピックを介して通信します。 デバイスが特定のトピックでメッセージを公開すると、そのトピックに登録されたすべてのデバイスがメッセージを受け取ります。

このセクションでは、Pico W、HiveMQ(無料の公開MQTTブローカーサービス)、および4つのボタンを使用してサービスベルシステムを作成します。 4つのボタンはレストランの4つのテーブルを意味し、顧客がボタンを押すとHiveMQでどのテーブルのゲストがサービスが必要かが表示されます。

1. 必要なコンポーネント

このプロジェクトには、以下のコンポーネントが必要です。

全体のキットを購入するのが確かに便利です、リンクはこちら:

名前

このキットに含まれるアイテム

リンク

Kepler Kit

450以上

Kepler Kit

以下のリンクから個別にも購入できます。

SN

コンポーネント

数量

リンク

1

Raspberry Pi Pico W

1

BUY

2

Micro USBケーブル

1

3

ブレッドボード

1

BUY

4

ジャンパーワイヤー

数本

BUY

5

抵抗器

4(10KΩ)

BUY

6

ボタン

4

BUY

7

Li-po充電モジュール

1

8

18650バッテリー

1

9

バッテリーホルダー

1

2. 回路を組み立てる

警告

図に示されているようにLi-po充電モジュールが接続されていることを確認してください。それ以外の場合、短絡が原因でバッテリーや回路が壊れる可能性があります。

../_images/5.mqtt_pub.png

3. HiveMQにアクセス

HiveMQは、IoTデバイスへの迅速かつ効率的な信頼性の高いデータ転送を可能にするMQTTブローカーおよびクライアントベースのメッセージングプラットフォームです。

  1. ブラウザで HiveMQ Web Client を開きます。

  2. クライアントをデフォルトの公開プロキシに接続します。

    ../_images/mqtt-1.png
  3. 新しいトピックの購読を追加 をクリックします。

    ../_images/mqtt-2.png
  4. フォローしたいトピックを入力し、 購読 をクリックします。ここで設定するトピックは、他のユーザーからメッセージを受け取らないように、より個別化されるべきです。また、大文字と小文字に注意してください。

    ../_images/mqtt-3.png

4. MQTTモジュールのインストール

プロジェクトを開始する前に、Pico W用のMQTTモジュールをインストールする必要があります。

  1. 既に書いた do_connect() をShellで実行してネットワークに接続します。

    注釈

    • 以下のコマンドをShellに入力し、 Enter を押して実行します。

    • もしPico Wに do_connect.pysecrets.py スクリプトがない場合は、 1. ネットワークへのアクセス を参照して作成してください。

    from do_connect import *
    do_connect()
    
  2. 成功したネットワーク接続の後、シェルで mip モジュールをインポートし、MicroPython用の簡易化されたMQTTクライアントである umqtt.simple モジュールを mip でインストールします。

    import mip
    mip.install('umqtt.simple')
    
  3. インストールが完了したら、 umqtt モジュールがPico Wの /lib/ パスにインストールされていることがわかります。

    ../_images/5_calling_system1.png

5. スクリプトを実行する

  1. kepler-kit-main/iot のパス下で 5_mqtt_publish.py ファイルを開きます。

  2. 現在のスクリプトを実行する ボタンをクリックするか、F5キーを押して実行します。

    ../_images/5_calling_system2.png
  3. 再度 HiveMQ Web Client に戻って、ブレッドボード上のボタンのいずれかを押すと、HiveMQ上でメッセージプロンプトが表示されます。

    ../_images/mqtt-4.png
  4. このスクリプトが起動できるようにしたい場合、それをRaspberry Pi Pico Wに main.py として保存できます。

動作の仕組みは?

Raspberry Pi Pico Wは、 1. ネットワークへのアクセス で説明されているように、インターネットに接続する必要があります。このプロジェクトではそのまま使用します。

from do_connect import *
do_connect()

4つのボタンピンを初期化します。

sensor1 = Pin(16, Pin.IN)
sensor2 = Pin(17, Pin.IN)
sensor3 = Pin(18, Pin.IN)
sensor4 = Pin(19, Pin.IN)

MQTTブローカーに接続するために使用する URLclient ID を保存するための2つの変数を作成します。 公開ブローカーを使用しているので、 client ID は必須ではありません。

mqtt_server = 'broker.hivemq.com'
client_id = 'Jimmy'

MQTTエージェントに接続し、1時間保持します。失敗した場合は、Pico Wをリセットします。

try:
    client = MQTTClient(client_id, mqtt_server, keepalive=3600)
    client.connect()
    print('Connected to %s MQTT Broker'%(mqtt_server))
except OSError as e:
    print('Failed to connect to the MQTT Broker. Reconnecting...')
    time.sleep(5)
    machine.reset()

変数 topic を作成します。これは、購読者がフォローする必要があるトピックです。それは上記の 2. HiveMQに訪れるステップ4 で記入したトピックと同じでなければなりません。 ちなみに、ここでの b は、MQTTがバイナリベースのプロトコルであるため、文字列をバイトに変換します。

topic = b'SunFounder MQTT Test'

各ボタンに割り込みを設定します。ボタンが押されたら、 topic の下にメッセージが投稿されます。

def press1(pin):
    message = b'button 1 is pressed'
    client.publish(topic, message)
    print(message)

sensor1.irq(trigger=machine.Pin.IRQ_RISING, handler=press1)