Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
IoT デバイスから AWS IoT へ:Zephyr RTOS でOver the Air
Search
jun1_hirata
October 27, 2025
0
20
IoT デバイスから AWS IoT へ:Zephyr RTOS でOver the Air
Zephyr Project meetup: Osaka, Japanの資料
https://zephyr-rtos.connpass.com/event/368403/
jun1_hirata
October 27, 2025
Tweet
Share
More Decks by jun1_hirata
See All by jun1_hirata
年末の風物詩 Qiita Advent Calendar開催? みんなでZephyrの記事を投稿しよう
jun1_hirata
0
71
IoT デバイスから AWS IoT へ:Zephyr RTOS でやってみた
jun1_hirata
0
290
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
5.9k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
It's Worth the Effort
3n
187
28k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
940
Producing Creativity
orderedlist
PRO
348
40k
Balancing Empowerment & Direction
lara
5
710
Optimizing for Happiness
mojombo
379
70k
4 Signs Your Business is Dying
shpigford
186
22k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Transcript
IoT デバイスから AWS IoT へ: Zephyr RTOSでOver The Air Zephyr
Project meetup: Osaka, Japan October 20 2025 Junichi Hirata OSAKA
アジェンダ • 自己紹介、応募した経緯 • 今回やること • AWS IoT Coreについて •
AWS IoT Coreを使ったOver the Air(OTA)技術的な概要 • ZephyrでAWS IoT Coreを使ったOTAをステップバイステップで説明
応募した経緯 最近日本のZephyr RTOS User Group Japnのイベントに参加しています → Zephyr RTOSはIoTに強いらしいと聞く →
connpassでAWS IoT 10周年イベント※を見つける → そういや、Zephyr RTOSってAWS IoTどんなのか気になるな → 調べてAWS IoTサンプルプログラムを評価ボードで動かした → せっかくだし、JAWSのイベントのLTに応募してみようか → サンプルプログラムを拡張してみよ、OTAとかええな → 10/20にZephyr meetupあるので、エントリしよ ※JAWS-UG IoT専門支部「AWS IoT 10年の歩みを振り返る」 https://jawsug-iot.connpass.com/event/367418/
AWS IoT Core 今回やること Zephyr RTOSが動作するマイコン評価ボードのファームウェアをリモート操作で アップデートします いわゆるOver The Air
(OTA)をやります! リモートサービスとして AWS IoT Coreを使用します Zephyr on 評価ボード ・ファームウェアアップデートの開始指示 ・評価ボードのファームウェアイメージ ①アップデート開始指示 ②ダウンロード ③新ファームウェアの適用
AWS IoT Core おことわり 本セッションではAWS IoT Coreを使ったOTAの基本的な流れを説明します。 そのため理解しやすさやまず動かすことを優先するため実運用向けではない面が あります。(例えばセキュリティの設定など) 随時フォローしていくつもりですが、至らない点もありますがご了承ください
Zephyr on 評価ボード ・ファームウェアアップデートの開始指示 ・評価ボードのファームウェアイメージ ①アップデート開始指示 ②ダウンロード ③新ファームウェアの適用
AWS IoT Core 図の引用 What is AWS IoT https://jawsug-iot.connpass.com/event/367418/
スライド引用 AWS IoT超入門2025 https://speakerdeck.com/hattori/aws-iot-chao-ru-men-2025?slide=18
AWS IoT Core と IoTデバイスとの通信プロトコル ※1 HTTPS、MQTT over WebSocketなども使える ※2
参考 AWS IoTコンソールの画面 基本はMQTT over TLS ※1 ・TLSのクライアント認証は必須 (x509証明書を使った認証) → 得体の知れないデバイスは接続させない → IoTデバイスの身元を保証する & AWS側で管理しているモノ (Thing)と結び付けえる※2
AWS IoT Core OTA構成 (AWSのサービスとIoTデバイス) IoTデバイス Zephyr on 評価ボード ②ダウンロード
HTTP over TLS ③新ファームウェアの適用 Amazon S3 ①更新指示 S3上のファイルのURLなど MQTT over TLS 新ファームウェア イメージファイル Amazon S3 Simple Storage Servie
Zephyrで必要な機能を列挙 機能 用途 MQTT (over TLS) AWS IoT Coreとの通信 JSON
AWS IoT Coreとの通信のデータ 部がJSON形式 受信データのパース 送信データの生成 HTTPSクライアント Amazon S3から ファームウェアのイメージファ イルをダウンロード Flash ダウンロードしたファームウェ アのイメージファイルの書き込 み ブートローダー (MCUBoot) 新ファームウェアの適用
Zephyrの機能 (あるといいもの) 機能 用途 セキュアストレージ 、セキュアエレメント AWS IoT Coreの接続に使用する 秘匿データ(鍵と証明書)を安全
に格納 Flashにハードコーディング 暗号化もしないので秘匿データ が流出するかもしれないず危険 ではあるが手順が複雑になるの 今回は使用しない
Zephyrアプリケーション拡張の方針 ベースとなるサンプルを一つきめ、そこに拡張および他のサンプルをマージ ベースはsamples/net/cloud/aws_iot_mqttというAWS IoTと通信する サンプルプログラム ・MQTT通信 ・AWS IoTへ接続 JSONのパースなど ファイル
ダウンロード フラッシュの 消去/書き込み APIドキュメントから実装 新ファームウェア 適用 Zephyr動作前の 独立したプログラム ブートローダー(MCU Boot) HTTPクライアントのサンプル AWS IoT Coreサンプル これをベースに拡張していく 追加 マージ
再度Zephyrで必要な機能を列挙 機能 用途 サンプルプログラムのパスなど MQTT (over TLS) AWS IoT Coreとの通信
samples/net/cloud/aws_iot_ mqtt JSON AWS IoT Coreとの通信のデータ 部がJSON形式 受信データのパース 送信データの生成 APIドキュメントを参照して アプリケーションを実装 HTTPSクライアント Amazon S3から ファームウェアのイメージファ イルをダウンロード samples/net/sockets/http_cli ent Flash ダウンロードしたファームウェ アのイメージファイルの書き込 み APIドキュメントを参照して アプリケーションを実装 ブートローダー (MCUBoot) 新ファームウェアの適用 ../bootloader/mcuboot/boot/ zephyr
使用するボード Zephyr Projectのボード説明 https://docs.zephyrproject.org/latest/boards/st/nucleo_h563zi/doc/index.html
AWS IoT Coreサンプルプログラム AWS IoT Core Zephyr_sample/downlink Zephyr_sample/data Zephyr AWS
IoT サンプルプログラムが 動作しているボード サブスクライブ サブスクライブしているトピックへ メッセージがPublishされたら、 Zephyr_sample/dataへメッセージを Publishする ①メッセージPublish ②①のメッセージを受信 ③メッセージPublish
サンプルプログラムのドキュメントを表示して調整するパラメータを確認して、 プロジェクトへ反映します。 https://docs.zephyrproject.org/latest/samples/net/cloud/aws_iot_mqtt/README.html CONFIG_AWS_ENDPOINT以外はデフォルト値でもとりあえず動作します CONFIG_AWS_ENDPOINTはAWS IoTのコンソールでエンドポイントを確認して入 力します。
ビルド ビルドしたプログラムをボードへ書き込み
ビルド ビルドしたプログラムをボードへ書き込み
実行結果 (Zephyr側) テストクライアントが Publishしたメッセージを受信後 メッセージをPublishしている
実行結果 (AWSで観測) Zephyrが Publishしたメッセージを受信している
JSON処理の実装 … その前に AWS IoT Coreでジョブを発行したときのJSONデータを AWS IoT Coreのテストクライアントで確認しておく
ジョブ発行時にIoTデバイスへ配信されるデータ AWS IOTのテストクライアントで観測 MQTTのトピック 長いURLがある これがAmazon S3に格納 しているIoTデバイスの ファームウェア
ZEPHYRで受信してJSONをパース 先のAWS IoTサンプルプログラムのサブスクライブするトピックを変 更prj.confを編集 → これで先のJSONを受信できる
ZEPHYRで受信してJSONをパース パース処理 ChatGPTにお願いしました。微調整はしました。 「Zephyrで次のJSONをパースする処理を書いて、パース後にURLとJobIdを表示 して」
ZEPHYRで受信してJSONをパース 動作確認
HTTPクライアント 特に語ることなしです。 サンプルプログラムのURL記述を先のAWS IoTから取得したURL に変更すれば動作しました (Amazon S3からデータを受信できました)
FLASHメモリへの書き込み API仕様 ※1を参考にプログラムを組みました。 フラッシュメモリのSlot1※2へデータを書き込めることを確認しました。 ※1 https://docs.zephyrproject.org/apidoc/latest/group__flash__interface.html ※2 後述するMCUBootは起動時にSlot1へ新ファームウェアが書き込まれていれば、このファームウェアを適用するらしい… ボードのデバイスツリーからメモリマップを確認
ここまでの状況 ・MQTT通信 ・AWS IoTへ接続 JSONのパースなど ファイル ダウンロード フラッシュの 消去/書き込み APIドキュメントから実装
新ファームウェア 適用 ブートローダー(MCU Boot) HTTPクライアントのサンプル AWS IoT Coreサンプル これをベースに拡張していく 追加 マージ clear clear clear clear これから説明
MCUBoot 組込み向けのブートローダー ファームウェアの更新、その際の署名確認など多機能 Slot1へ新しいファームウェアのイメージが書き込まれていれば、 Slot0(ファームウェアを実行するアドレス)へコピーすることでらしいファーム ウェアを更新するらしい…
ターゲットボードでMCUBootの機能 確認できたこと ・MCUBootをビルドしてST-LINKで書き込み動作することを確認した ・MCUBootからZephyrアプリケーション(ST-LINKで書き込み)が起動することを 確認した
ターゲットボードでMCUBootの機能 確認できなかったこと ・Slot1へ書き込んだファームウェアイメージをMCUBootが新ファームウェアと認識して ファームウェアを更新する メモリマップ、署名、コンフィグレーションを見直したが、時間切れで本日 OTAの実装に失敗しました
結果 ・MQTT通信 ・AWS IoTへ接続 JSONのパースなど ファイル ダウンロード フラッシュの 消去/書き込み APIドキュメントから実装
新ファームウェア 適用 ブートローダー(MCU Boot) HTTPクライアントのサンプル AWS IoT Coreサンプル これをベースに拡張していく 追加 マージ clear clear clear clear 失敗!
敗因 ・本人の力量不足 ・MCUBootの機能を浅い所でしか知ろうとしない ・ボードの特性、特にSTM32内蔵のフラッシュメモリについてよく理解していない
まとめ AWS IoT Coreで必要となる要素をステップバイステップで説明し ました 個人的には次のようにかんじました。 ・ネットワークやJSONのパース処理などハードウェアに依存しない 部分は他のボードでも流用できそう ・ハードウェアに依存する部分(フラッシュ書き込みやブートローダー) は一工夫要る..
ボードやSoCの仕様も理解しましょう
最後に 今回のセッションでは時間の関係で詳細は説明しきれていませんし、 いろいろと省略しているところがあります 次に挙げるZephyrが関連したドキュメントの中で優良なので 参考資料としてください ・AWS FOTA (Nordic Semicondoctor) https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/libraries/networking/aws_fota.html
ご清聴ありがとうございました。