本日はRaspberry Pi Picoの有線イーサネット製品であるW5100S-EVB-Picoボードを使用し、AWS IoT Coreに接続する方法について説明します。
- MicropythonとMQTTを使用します。
- ホストPC環境はWindows 10 64bitを使用しており、WSL2環境を併用しています。 (OpenSSL使用)
AWS
AWSサービスに接続された外部コンテンツでデバイスを作成する方法。
このコンテンツは、C言語を基にWizFi360-EVB-PicoをAWS IoT Coreに接続するプロセスを要約したものです。AWS IoTでデバイスを作成するプロセスがよく説明されています。
WizFi360-EVB-PicoをAWS IoT Coreに接続
機能に関する完全な説明は、公式ガイドドキュメントで確認できます。
AWS IoTリソースの生成
デバイスの生成を完了したら、デバイス証明書とルート証明書を取得できます。
ガイドにも強調されていますが、証明書の生成時に表示される デバイスダウンロード証明書ページで証明書を保存する必要があります。
そうしないと、生成プロセスを再度行う必要があります。
ここではデバイス証明書とプライベートキーのみが使用されます。
Micropython setting up
Micropythonファームウェアのアップロード
W5100S-EVB-Pico Micropython Official FW
ファームウェアのダウンロードとthonnyの使い方はこちらをご覧ください
Raspberry Pi Pico MicroPython Guide
コードの作成
完全なサンプルコードは、以下のリンクから確認できます。
GitHubのサンプルコードへのリンク
ここでは、次の変数を変更する必要があります。
- デバイスID
- MQTTトピック(割り当てられたトピックまたはフリートピック)
- ホスト名(エンドポイント)
- デバイス証明書の設定(デバイス証明書とプライベートキー)
- デバイスリソースの情報
当該トピックはフリートピックとして使用することも、事前に定義されたトピックを使用することもできます。
ここでは指定されたトピックを使用するので、特に指定する必要はありません。
device_id = '<Device Id>'
hostname = '<Hostname or Endpoint>'
mqtt_topic = f'$aws/things/{device_id}/shadow/update'
Config device certificate
AWSリソース設定セクションからダウンロードした証明書をW5100S-EVB-Picoにアップロードし、パスを設定してください。
ダウンロードされた証明書は以下の形式になります。
- (Certificate Id)-certificate.pem.crt
- (Certificate Id)-private.pem.key
- (Certificate Id)-public.pem.key
- AmazonRootCA1.pem
- AmazonRootCA3.pem
それらの中で、certificate.pem.crtとprivate.pem.keyが使用されます。
Convert certificates
Micropythonライブラリが認識できる形式に証明書を変換する必要があります。
ダウンロードされた証明書はbase64ベースのPEM形式であり、これをbinary.der形式に変換します。
証明書の変換にはOpenSSLを使用し、Windows 10以上の環境ではWSL(Windows Subsystem for Linux)環境の使用を推奨します。
以下のコマンドを使用して、デバイス証明書とプライベートキーをder形式に変換します。
# Convert Device Certificate
openssl x509 -outform der -in certificate.pem.crt -out certificate.crt.der
# Convert Key
openssl rsa -inform pem -in private.pem.key -outform DER -out private.key.der
Upload certificates
変換された証明書をPicoにアップロードし、Pathを設定します。
例をクローンした場合、certという名前のディレクトリがあります。ここに.derに変換したデバイス証明書とキーファイルをコピーし、このフォルダをPicoにアップロードしてください
左側のエクスプローラーウィンドウは、「表示」-「ファイル」オプションを使って使用できます。
cert
ディレクトリ上でカーソルを置き、右クリックして、「Upload to /」メニューを選択し、フォルダをそのままアップロードします。
パスやファイル名が異なる場合は、main.py
の証明書パスを変更できます。
# Certificate path
cert_file = 'cert/certificate.crt.der'
key_file = 'cert/privateKey.key.der'
Install MQTT library for Micropython
MQTT用のライブラリumqtt.simple lib
をダウンロードします。
いくつかの方法がありますが、私は直接ダウンロードしてアップロードする方法を好みます。
pypi: micropython-umqtt.simple 1.3.4
Demo
Monitor Application
Thonnyでmain.pyを開いた状態で、上部のRunボタンをクリックするか、F5キーを押してアプリケーションを実行します。
接続エラーが発生した場合、ほとんどの場合は 証明書の問題です。
Pathが正しく設定されているか、そして.derに変換された証明書が挿入されているかを確認してください。
Monitor AWS IoT
AWS IoTサービス内のMQTTテストクライアントを使用して、デバイスデータをモニタリングできます。
Subscribe to a topicタブでトピックを入力した後、Subscribeボタンを押せば、MQTTメッセージの購読を開始し、デバイスから送信されたメッセージを監視することができます。
これまでのところ、 W5100S-EVB-Picoデバイスを使用してMicropythonでAWS IoT Coreに接続する方法 をまとめました。
original contens
How to connect AWS IoT with Micropython using W5100S-EVB-Pico
Related contents
Connect to Azure IoT Hub using Micropython on W5100S-EVB-Pico
Reference
RP2040-HAT-MicroPython Repository
Micropython forum post from nickehallgren