Help us understand the problem. What is going on with this article?

RaspberryPiとAWS IoT CoreでMQTT通信をしてみた

More than 1 year has passed since last update.

とにかくAWS IoTとRaspberryPiをMQTT通信させたい。という方に作業内容だけをまとめました。

まず、全体の作業内容を説明します。大きく作業は3つです。
1. AWS IoTにRaspberryPiを登録
- 証明書の取得
- ポリシーの追加
2. RaspberryPiプログラムの作成
3. 通信テスト

以上です。今回はAWS IoT側がデータの送信側です。RaspberryPiは受信側。

AWS IoTへRaspberryPiを登録

AWSのWebページ⇨コンソールへログイン⇨サービス⇨IoTCore

管理→モノ→作成行きます。
image.png

単一のモノを登録する
image.png

モノの名前を登録(他の項目は自由に。未記入でも大丈夫です)
image.png

証明書を取得します

image.png
ダウンロード(モノの証明書、パブリックキー、プライベートキー、ルートCA)
image.png

ポリシーを設定します

セキュリティ機能の一つ、ポリシーを設定します。ポリシーとは操作やAWS上のデータベースなどの他のリソースアクセスを決めるモノです。
下の写真のようにアクションとリソースを設定します。
image.png

証明書のページから-ポリシーの
アタッチを行って、上で作成したポリシーをアタッチします。
image.png

RaspberryPiのプログラムを作成します。

MQTTのクライアントにはpaho mqttを利用します。
RaspberryPiに入って、pipを利用してpaho mqttを入れます。

sudo apt-get install python-pip

pip install paho-mqtt

ラズパイのプログラムです

下記コードを作成ください。XXXX.〜は各々のパラメータを入れてください。
作成後はscpモジュールなどでPC→MQTTに転送できます。証明書とプライベートキー、パブリックキーも転送します。同じ階層に入れてください。

paho_mqtt_test.py
import paho.mqtt.client
import ssl
import subprocess
import json

endpoint = "XXXX.amazonaws.com"#AWSのエンドポイント
port = 8883#AWSのポート
topic_to_aws ="Raspi3_to"
topic_from_aws = "Raspi3_from"
rootCA = "VeriSign.pem"#ルート証明書
cert = "XXXX-certificate.pem.crt"#デバイス証明書
key = "XXXX-private.pem.key"#keyを設定

def on_connect(client, userdata, flags, respons_code):
    print("Connected")
    client.subscribe(topic_to_aws)#サブスクライブする

def on_message(client, userdata, msg):
    print(msg.topic)

if __name__ == '__main__':
    #ここら辺はpahoのリファレンスを参照。
    #https://www.eclipse.org/paho/clients/python/docs/#connect-reconnect-disconnect 
    client = paho.mqtt.client.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    client.tls_set(ca_certs=rootCA, certfile=cert, keyfile=key, cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None)
    client.connect(endpoint, port=port, keepalive=60)
print("StartScript")
client.loop_forever()

通信テスト

テスト→発行のトピック名を記入して、"トピックスに発行"をクリック
image.png
成功していたら、RaspberryPiのコンソールへ(ソースコード)のon_message文字列出力される。

以上

pega
組込みソフトエンジニアです。組込みソフトとWeb技術でサービスを開発するべく日々勉強と行動!気になる技術など雑多に投稿します。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away