LoginSignup
0
2

Picoを使用してAWS IoTに接続する

Last updated at Posted at 2023-11-08

本日はRaspberry Pi Picoの有線イーサネット製品であるW5100S-EVB-Picoボードを使用し、AWS IoT Coreに接続する方法について説明します。

  • MicropythonとMQTTを使用します。
  • ホストPC環境はWindows 10 64bitを使用しており、WSL2環境を併用しています。 (OpenSSL使用)

image.png

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'
  • デバイスID:生成されたThing名
  • ホスト名(エンドポイント):AWS IoT - Settingで確認できます
    image.png

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にアップロードしてください
image.png

左側のエクスプローラーウィンドウは、「表示」-「ファイル」オプションを使って使用できます。

image.png

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キーを押してアプリケーションを実行します。

デバッグメッセージは以下のように出力されます。
image.png

接続エラーが発生した場合、ほとんどの場合は 証明書の問題です。
Pathが正しく設定されているか、そして.derに変換された証明書が挿入されているかを確認してください。

Monitor AWS IoT

AWS IoTサービス内のMQTTテストクライアントを使用して、デバイスデータをモニタリングできます。
image.png

Subscribe to a topicタブでトピックを入力した後、Subscribeボタンを押せば、MQTTメッセージの購読を開始し、デバイスから送信されたメッセージを監視することができます。
image.png


これまでのところ、 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

0
2
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
0
2