4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[2020年1月版] B-L475E-IOT01A - STM32L4 Discovery kit IoT nodeでAmazon FreeRTOSを動かす

Last updated at Posted at 2019-12-17

他の記事でも大活躍?のB-L475E-IOT01A - STM32L4 Discovery kit IoT nodeにおいて、、、
改めてAmazon FreeRTOSデモプログラム導入、AWS IoTへの接続確認をしてみましたので、紹介いたします!

はじめに

本記事の肝

まず、**「2019年12月 2020年1月 現在の最新版での確認」**であることです!
加えて、誰でも簡単に導入できるよう、可能な限り(他の記事の参照は避け、)手順を詳細に記載しております。

環境

なお前述の通り、ビルド環境に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

次に、左側メニューより「管理」 - 「モノ」を選択し、「モノの登録」をクリック。

SnapCrab_AWS IoT - Google Chrome_2019-12-11_16-30-26_No-00.png

「単一のモノを作成する」をクリック。

SnapCrab_AWS IoT - Google Chrome_2019-12-11_16-30-38_No-00.png

モノに適当に名前を付けます。ここでは「MyThing」としました。
その後、下にスクロールし、、、

SnapCrab_AWS IoT - Google Chrome_2019-12-11_16-30-53_No-00.png

「次へ」をクリック。

SnapCrab_AWS IoT - Google Chrome_2019-12-11_16-31-0_No-00.png

「モノに証明書を追加」画面となります。
推奨とある一番上、「証明書の作成」をクリック。

SnapCrab_AWS IoT - Google Chrome_2019-12-11_16-35-15_No-00.png

晴れて証明書が作成されました!笑
3つともダウンロードした後、最後に「有効化」をクリックしてください。

SnapCrab_AWS IoT - Google Chrome_2019-12-11_16-37-4_No-00.png

有効化するとボタンが「無効化」に変わります。
いったんここは「完了」をクリックしてやると、、、

SnapCrab_AWS IoT - Google Chrome_2019-12-11_16-41-20_No-00.png

モノ「MyThing」が作成されました!

SnapCrab_AWS IoT - Google Chrome_2019-12-11_16-41-32_No-00.png

1-2. ポリシーづくり

左側メニューより「安全性」 - 「ポリシー」を選択し、「ポリシーの作成」をクリック。

SnapCrab_AWS IoT - Google Chrome_2019-12-12_16-24-49_No-00.png

名前は「MyPolicy」としました。

SnapCrab_AWS IoT - Google Chrome_2019-12-12_16-25-2_No-00.png

同じ画面で、以下4つのステートメントを追加してやります。
リソースARNは自動入力されますが、末尾の「replaceなんちゃら」を「*(アスタリスク)」に「手動で」置き換えるのがポイントです。

アクション リソース ARN 効果
iot:Connect replaceWithAClientIdを*に置換 許可にチェック
iot:Publish replaceWithATopicを*に置換 許可にチェック
iot:Subscribe replaceWithATopicFilterを*に置換 許可にチェック
iot:Receive replaceWithATopicを*に置換 許可にチェック

2020/1/6追記
アクションを「iot:*」リソース ARNを単純に「*」としたほうが1つで済み、とっても楽です。

入力が済んだら、「作成」をクリックしてやると、、、

SnapCrab_AWS IoT - Google Chrome_2019-12-13_11-43-36_No-00.png

「MyPolicy」が作成されました。

SnapCrab_AWS IoT - Google Chrome_2019-12-13_11-43-51_No-00.png

1-3. ポリシーのアタッチ

左側メニューより「安全性」 - 「証明書」を選択すると、作成済みの証明書が表示されます。
その証明書の右上「・・・」より、「ポリシーのアタッチ」をクリック。

SnapCrab_AWS IoT - Google Chrome_2019-12-13_11-48-0_No-00.png

先ほど作成した「MyPolicy」にチェックを付け、「アタッチ」をクリックします。

SnapCrab_AWS IoT - Google Chrome_2019-12-13_11-48-12_No-00.png

(画面は割愛しますが、これで証明書にポリシーがアタッチされます)

1-4. エンドポイントを控える

左側メニューより「設定」をクリックし、「カスタムエンドポイント」の文字列を控えておきます。

SnapCrab_AWS IoT - Google Chrome_2019-12-16_15-42-38_No-00.png

2. Amazon FreeRTOSデモプログラム準備(ビルドまで)

参考元のYutaka Kato様の記事や、AmazonドキュメントではSystem Workbench for STM32を使用することとなっていますが、前述の通り、最新のIDEであるSTM32CubeIDEを使います。

2-1. ダウンロードと展開

以下からデモプログラムをダウンロードします。

このうち「Connect to AWS IoT - STM32-B-L475E-IOT01A」の「ダウンロード」から実施。

SnapCrab_AWS IoT - Google Chrome_2019-12-16_9-52-56_No-00.png

その後、適当なフォルダに展開してやりましょう。

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を起動します。
ワークスペースのディレクトリは展開先にしておくとよさそう。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-16_14-30-3_No-00.png

起動後、「File」 - 「Import」をクリック。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-16_14-30-55_No-00.png

「Import ac6 System Workbench for STM32 Project」を選び、「Next >」。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-16_14-31-6_No-00.png

「AmazonFreeRTOS/projects/st/stm32l475_discovery/ac6/aws_demos」を選び、「開く(O)」。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-16_14-31-57_No-00.png

変更元のプロジェクトが選択されています。
ここでは特に何も変えず、「Finish」でOK。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-16_14-32-13_No-00.png

メッセージボックスは何も考えず「OK」。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-16_14-32-27_No-00.png

MCU選択画面では「STM32L475VGTx」を選び、「OK」で、、、

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-16_14-33-32_No-00.png

無事変換されたというメッセージボックスが表示され、、、

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-16_14-33-42_No-00.png

はい、見事に取り込まれています!

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-16_14-33-55_No-00.png

2-3. ビルドしてみる

プロジェクトの上で右クリック - 「Build project」してやります。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-16_15-24-9_No-00.png

ワーニングは出ますが、無事ビルドが通りました。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-16_15-24-58_No-00.png

3. デモプログラム編集

当然このままでは動かないので、適宜編集してやります。

3-1. aws_clientcredential.hの編集

IDEにてdemos/include/aws_clientcredential.hを開きます。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-16_16-3-53_No-00.png

値を下表の通りとします。

設定値 入力値
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)

SnapCrab_Amazon FreeRTOS Developer Demos Certificate Configuration Tool - Google Chrome_2019-12-16_16-25-3_No-00.png

生成したファイルを、**AmazonFreeRTOS/demos/include/aws_clientcredential_keys.h**に上書きしましょう。
AmazonFreeRTOS/tests配下にも同名のファイルがありますので注意!)

3-4. 再度ビルドしてみる

念のためビルドが通るか再確認してください。

4. ついにデモ!

4-1. AWSテスト設定

AWS IoT画面の左側メニュー、「テスト」をクリック。

次の画面で、「トピックのサブスクリプション」に「iotdemo/topic/#」と入力し、「トピックへのサブスクライブ」をクリック。

SnapCrab_AWS IoT - Google Chrome_2019-12-17_9-5-10_No-00.png

待ち画面に入ります。ワクワクしますね。笑

SnapCrab_AWS IoT - Google Chrome_2019-12-17_9-5-26_No-00.png

4-2. デモプログラムを動かす

STM32CubeIDEでもってデモプログラムを動かします。

動作確認にはシリアル通信ソフトが必要です。私はgtktermを使いました。設定値は以下参照。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-17_9-10-36_No-00.png

動かしてみて、以下のようなログが出れば成功です。

SnapCrab_Ubuntu [実行中] - Oracle VM VirtualBox_2019-12-17_9-12-52_No-00.png

対してAWS側の画面には、Hello Worldがたくさん届いているかと思います!万歳!

SnapCrab_AWS IoT - Google Chrome_2019-12-17_9-14-3_No-00.png

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)

おわりに

導入にあたりなかなか(いや、かなり)苦労したので、記事にしてみました。
少しでも皆様のお役に立てれば幸いです。

疑問・質問等あれば、遠慮なくコメントください!

4
4
2

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
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?