[2020年1月版] B-L475E-IOT01A - STM32L4 Discovery kit IoT nodeでAmazon FreeRTOSを動かす
他の記事でも大活躍?のB-L475E-IOT01A - STM32L4 Discovery kit IoT nodeにおいて、、、
改めてAmazon FreeRTOSデモプログラム導入、AWS IoTへの接続確認をしてみましたので、紹介いたします!
はじめに
本記事の肝
まず、「2019年12月 2020年1月 現在の最新版での確認」であることです!
加えて、誰でも簡単に導入できるよう、可能な限り(他の記事の参照は避け、)手順を詳細に記載しております。
環境
- ビルド環境: Ubuntu 18.04 LTS(じゃなくてもよいと思うが、WindowsはNG)
- IDE: STM32CubeIDE 1.1.0
- 評価用ボード: STM32L4 Discovery kit IoT node - 型番はB-L475E-IOT01A
- Amazon FreeRTOS: バージョン201910.00に続き、バージョン201912.00でも確認済み
なお前述の通り、ビルド環境にWindowsを用いた場合、残念ながらエラーとなります。のでLinuxを使いましょう。
(詳細は割愛しますが、Makefile自動生成に不具合があり、不正なコマンドラインとなってしまう - こちらに情報を載せました)
参考1
先駆者でおられるYutaka Kato 様の、以下の記事を参考にさせていただきました。超絶ありがとうございます!
(2017年12月の記事ですが、これ以降FreeRTOSパッケージは大きく?変更となっています)
STM32L4 Discovery Kit IoT Node に Amazon FreeRTOS を導入する · Yutaka 🍊 Kato
https://mikan.github.io/2017/12/13/setup-amazon-freertos-on-stm32l4-discovery-kit-iot-node/
参考2
STM32CubeIDEのインストール方法、デバッグ方法は、以下の記事(手前味噌)を参考になさってください。
STM32CubeIDEで速攻FreeRTOS - Qiita
https://qiita.com/imagou/items/8af2ad999b2a80009c6f
本編
1. AWS IoTの設定
以下、AWSアカウントは既に登録済みとして扱います。
1-1. モノづくり
まずは、AWS IoTに接続。
https://console.aws.amazon.com/iot
次に、左側メニューより「管理」 - 「モノ」を選択し、「モノの登録」をクリック。
「単一のモノを作成する」をクリック。
モノに適当に名前を付けます。ここでは「MyThing」としました。
その後、下にスクロールし、、、
「次へ」をクリック。
「モノに証明書を追加」画面となります。
推奨とある一番上、「証明書の作成」をクリック。
晴れて証明書が作成されました!笑
3つともダウンロードした後、最後に「有効化」をクリックしてください。
有効化するとボタンが「無効化」に変わります。
いったんここは「完了」をクリックしてやると、、、
モノ「MyThing」が作成されました!
1-2. ポリシーづくり
左側メニューより「安全性」 - 「ポリシー」を選択し、「ポリシーの作成」をクリック。
名前は「MyPolicy」としました。
同じ画面で、以下4つのステートメントを追加してやります。
リソースARNは自動入力されますが、末尾の「replaceなんちゃら」を「*(アスタリスク)」に「手動で」置き換えるのがポイントです。
アクション | リソース ARN | 効果 |
---|---|---|
iot:Connect | replaceWithAClientIdを*に置換 | 許可にチェック |
iot:Publish | replaceWithATopicを*に置換 | 許可にチェック |
iot:Subscribe | replaceWithATopicFilterを*に置換 | 許可にチェック |
iot:Receive | replaceWithATopicを*に置換 | 許可にチェック |
2020/1/6追記
アクションを「iot:*」リソース ARNを単純に「*」としたほうが1つで済み、とっても楽です。
入力が済んだら、「作成」をクリックしてやると、、、
「MyPolicy」が作成されました。
1-3. ポリシーのアタッチ
左側メニューより「安全性」 - 「証明書」を選択すると、作成済みの証明書が表示されます。
その証明書の右上「・・・」より、「ポリシーのアタッチ」をクリック。
先ほど作成した「MyPolicy」にチェックを付け、「アタッチ」をクリックします。
(画面は割愛しますが、これで証明書にポリシーがアタッチされます)
1-4. エンドポイントを控える
左側メニューより「設定」をクリックし、「カスタムエンドポイント」の文字列を控えておきます。
2. Amazon FreeRTOSデモプログラム準備(ビルドまで)
参考元のYutaka Kato様の記事や、AmazonドキュメントではSystem Workbench for STM32を使用することとなっていますが、前述の通り、最新のIDEであるSTM32CubeIDEを使います。
2-1. ダウンロードと展開
以下からデモプログラムをダウンロードします。
このうち「Connect to AWS IoT - STM32-B-L475E-IOT01A」の「ダウンロード」から実施。
その後、適当なフォルダに展開してやりましょう。
user@user-VirtualBox:~/STM32CubeIDE$ ls -la
合計 16
drwxrwxr-x 4 user user 4096 12月 16 14:28 .
drwxr-xr-x 58 user user 4096 12月 16 14:27 ..
drwxrwxr-x 3 user user 4096 11月 25 09:09 .metadata
drwx------ 5 user user 4096 12月 16 14:28 AmazonFreeRTOS
2-2. プロジェクト変換
STM32CubeIDEを起動します。
ワークスペースのディレクトリは展開先にしておくとよさそう。
起動後、「File」 - 「Import」をクリック。
「Import ac6 System Workbench for STM32 Project」を選び、「Next >」。
「AmazonFreeRTOS/projects/st/stm32l475_discovery/ac6/aws_demos」を選び、「開く(O)」。
変更元のプロジェクトが選択されています。
ここでは特に何も変えず、「Finish」でOK。
メッセージボックスは何も考えず「OK」。
MCU選択画面では「STM32L475VGTx」を選び、「OK」で、、、
無事変換されたというメッセージボックスが表示され、、、
はい、見事に取り込まれています!
2-3. ビルドしてみる
プロジェクトの上で右クリック - 「Build project」してやります。
ワーニングは出ますが、無事ビルドが通りました。
3. デモプログラム編集
当然このままでは動かないので、適宜編集してやります。
3-1. aws_clientcredential.hの編集
IDEにてdemos/include/aws_clientcredential.h
を開きます。
値を下表の通りとします。
設定値 | 入力値 |
---|---|
clientcredentialMQTT_BROKER_ENDPOINT | "エンドポイント値" |
clientcredentialIOT_THING_NAME | "MyThing" |
clientcredentialWIFI_SSID | "Wi-Fi SSID" |
clientcredentialWIFI_PASSWORD | "Wi-Fi パスワード" |
clientcredentialWIFI_SECURITY | ( eWiFiSecurityOpen | eWiFiSecurityWEP | eWiFiSecurityWPA | eWiFiSecurityWPA2 ) |
パスワードが平文でいいのかよ、という気もしますが、あくまでデモなので。笑
3-2. aws_wifi_config.hの編集
2020/1/6追記
改めて確認したところ、本ファイルは編集不要でした。
続いてconfig_files/aws_wifi_config.h
を開き、(似たような雰囲気ですが)値を以下の通りとします。
| 設定値 | 入力値 |
|------------------------------------|------------------------------------------------------------------------------------------------|
| wificonfigACCESS_POINT_SSID_PREFIX | "Wi-Fi SSID" |
| wificonfigACCESS_POINT_PASSKEY | "Wi-Fi パスワード" |
| wificonfigACCESS_POINT_SECURITY | ( eWiFiSecurityOpen | eWiFiSecurityWEP | eWiFiSecurityWPA | eWiFiSecurityWPA2 ) |
3-3. aws_clientcredential_keys.hを生成
AmazonFreeRTOS/tools/certificate_configuration/CertificateConfigurator.html
を開きます。
その後、保存済みの証明書ファイルを指定してから「Generate and save aws_clientcredential_keys.h」をクリック、ヘッダファイルを生成してやります。
- Certificate PEM file: xxxxxxxxxx-certificate.pem.crt
- Private Key PEM file: xxxxxxxxxx-private.pem.key
(画像ではWindowsからsambaでアクセスしていますが、何でもOK)
生成したファイルを、AmazonFreeRTOS/demos/include/aws_clientcredential_keys.h
に上書きしましょう。
(AmazonFreeRTOS/tests
配下にも同名のファイルがありますので注意!)
3-4. 再度ビルドしてみる
念のためビルドが通るか再確認してください。
4. ついにデモ!
4-1. AWSテスト設定
AWS IoT画面の左側メニュー、「テスト」をクリック。
次の画面で、「トピックのサブスクリプション」に「iotdemo/topic/#」と入力し、「トピックへのサブスクライブ」をクリック。
待ち画面に入ります。ワクワクしますね。笑
4-2. デモプログラムを動かす
STM32CubeIDEでもってデモプログラムを動かします。
動作確認にはシリアル通信ソフトが必要です。私はgtktermを使いました。設定値は以下参照。
動かしてみて、以下のようなログが出れば成功です。
対してAWS側の画面には、Hello Worldがたくさん届いているかと思います!万歳!
5. トラブルシュートなど
5-1. Windowsビルドエラー情報
unterminated quoted string
なMakefileを自動生成してしまっています。
[^1]:
20:50:30 **** Incremental Build of configuration Debug for project aws_demos ****
make all
arm-none-eabi-gcc "C:/Users/imagou/Documents/STM32CubeIDE/AmazonFreeRTOS/vendors/st/stm32l475_discovery/BSP/B-L475E-IOT01/stm32l475e_iot01.c" -mcpu=cortex-m4 -std=gnu11 -g3 -DUSE_HAL_DRIVER -DSTM32L475xx '-DMQTTCLIENT_PLATFORM_HEADER=MQTTCMSIS.h' -DENABLE_IOT_INFO -DENABLE_IOT_ERROR -DSENSOR -DRFU -DUSE_OFFLOAD_SSL -c -O0 -ffunction-sections -Wall -fstack-usage -MMD -MP -MF"vendors/st/stm32l475_discovery/BSP/B-L475E-MT"vendors/st/stm32l475_discovery/BSP/B-L475E-IOT01/stm32l475e_iot01.o" -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "vendors/st/stm32l475_discovery/BSP/B-L475E-IOT01/stm32l475e_iot01.o" @"vendors/st/stm32l475_discovery/BSP/B-L475E-IOT01/stm32l475e_iot01.c_includes.args"
c:/st/stm32cubeide_1.1.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.make.win32_1.1.0.201910081157/tools/bin/sh: syntax error: unterminated quoted string
make[1]: *** [vendors/st/stm32l475_discovery/BSP/B-L475E-IOT01/subdir.mk:39: vendors/st/stm32l475_discovery/BSP/B-L475E-IOT01/stm32l475e_iot01.o] Error 2
make: *** [makefile:69: all] Error 2
"make all" terminated with exit code 2. Build might be incomplete.
20:50:58 Build Failed. 2 errors, 0 warnings. (took 28s.531ms)
おわりに
導入にあたりなかなか(いや、かなり)苦労したので、記事にしてみました。
少しでも皆様のお役に立てれば幸いです。
疑問・質問等あれば、遠慮なくコメントください!
Author And Source
この問題について([2020年1月版] B-L475E-IOT01A - STM32L4 Discovery kit IoT nodeでAmazon FreeRTOSを動かす), 我々は、より多くの情報をここで見つけました https://qiita.com/imagou/items/428a362d06d7ca401930著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .