Slide 1

Slide 1 text

Nature Remo SDKアップデートの軌跡
 2022年9月28日 IoTぶっちゃけNight Vol. 1 Nature 中林智之


Slide 2

Slide 2 text

- 中林智之 @tnakabayashi - Nature Firmware Engineer ちょっと咳は出ちゃうかも >< 
 自己紹介


Slide 3

Slide 3 text

PRODUCT 製品について


Slide 4

Slide 4 text

Nature Remo / Nature Remo mini

Slide 5

Slide 5 text

How It Works スマートデバイス Nature Remo 家電 赤外線 インターネット 例: Alexa、書斎照明消して

Slide 6

Slide 6 text

How It Works スマートデバイス Nature Remo 家電 赤外線 インターネット !? ※登壇者の居室が真っ暗になるデモ中です 


Slide 7

Slide 7 text

Firmwareエンジニア視点のRemo3

Slide 8

Slide 8 text

BLE Central BLE Peripheral HTTP Server (mDNS) HTTP / WebSocket Client 赤外線 センサ 温度、湿度 人感、輝度 Nature Remo3の機能 BLE連携 setup Local API server

Slide 9

Slide 9 text

Nature Remo3の中身 ※分解は自己責任でお願いします! ぱかっと開けると… ESP32 - Espressif - xtensa デュアルコア@240MHz - SRAM: 520KiB - Bluetooth & Wireless LAN

Slide 10

Slide 10 text

Nature RemoのSDK - ESP-IDF (Espressif IoT Development Framework) - 大部分がOSS - GitHubでissueやパッチの受け入れも - 無線通信部分などはバイナリ配布

Slide 11

Slide 11 text

ぶっちゃけESP32 (ESP-IDF) ってどうなの? - (カタログスペック比で) 破格の安さ - ソフトウェア開発環境は使いやすい - ログシステム / デバッグ環境 / テスト環境 - ビルド用のDocker image完備 - menuconfig / kconfig - ソフトウェアに力入れているのは感じる - SDKの変更量 - LLVMのxtensa対応 - Rust - ただし… - 続きは発表の最後で! - チャンネルはそのまま! Ferrous Systemsがやっている Rustチュートリアル用ボードとかも製造

Slide 12

Slide 12 text

Firmware Updateについての考え方

Slide 13

Slide 13 text

なぜFirmware Updateをするのか? > ソフトウェアには…簡単に変更できることが求められる。 > 簡単に変更したくないなら、ハードウェアと呼ぶべきだ。 > (中略) > ソフトウェアが簡単に変更できないなら、 > ソフトウェアの存在意義を妨害している。 Nature Remoをハードウェアと呼ばせないため

Slide 14

Slide 14 text

- ESP-IDF v3.3.4を2年ほど使用 - メンテナンス期限切れ - security issueとか発生したら…? - 機能追加 / バグフィックス / 開発環境改善 - WPA3対応 - gcc 5.4 -> 8.4 なぜSDKをアップデートするのか?

Slide 15

Slide 15 text

SDK Updateの軌跡

Slide 16

Slide 16 text

中林のテンション 2022/1 SDK Updateの軌跡 2022/4 2022/2 2022/3 2022/5 2022/8 2022/6 2022/7

Slide 17

Slide 17 text

楽しい冒険の始まり - 直前にリリースされた ESP-IDF v4.3.2を移行対象に決定 - 機能開発は凍結 (ぼっちファームなので問題なし ! - 短期決戦を目指して最優先でやる (3ヶ月でケリをつける! 残された希望に満ちたメモ … 100日後に折れるフラグ

Slide 18

Slide 18 text

中林のテンション 2022/1 SDK Updateの軌跡 2022/4 2022/2 2022/3 2022/5 2022/8 2022/6 2022/7

Slide 19

Slide 19 text

- v3.3.4で困っていたバグがいくつか直ってそう - WPA3対応してる! - メモリアロケータが変わった…だと…?(v4.3から - TLSF (Two-Level Segregate Fit) アロケータに - 教科書通りのフリーリストアロケータから O(1) アロケータに - これは重要な変更だ!じっくり調査するしかあるまい? - アロケータの論文 / コード読んだり楽しい時間を過ごす 夢の広がるリリースノート

Slide 20

Slide 20 text

中林のテンション 2022/1 SDK Updateの軌跡 2022/4 2022/2 2022/3 2022/5 2022/8 2022/6 2022/7

Slide 21

Slide 21 text

ヒープ残量が・・・ - v4.3.2に上げるとヒープ残量ががっつり減った… - 60KB -> 50KB - 何もしてないのにヒープ残量が減った! - SDKのコンフィギュレーションが何か変わったか?と調査を開始 - TLSFアロケータのテーブルが10KB使っている

Slide 22

Slide 22 text

しかも実際のヒープ残量は・・・ - なんかヒープ残量計算がバグってない・・・? - 確保したバッファの管理領域分が計算されていない - 最新バージョンでは直ってます - https://github.com/espressif/esp-idf/issues/8270

Slide 23

Slide 23 text

ま、いっか 減った分はコード見直せばなんとか…、ということで立ち直る 詳しくは ESP-IDF v4.3でESP32のヒープ残量が10KB減る問題の調査 を参照

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

中林のテンション 2022/1 SDK Updateの軌跡 2022/4 2022/2 2022/3 2022/5 2022/8 2022/6 2022/7

Slide 26

Slide 26 text

Releaseできちゃうのでは・・・? - 社内リリースして2週間、順調に動いている - サーバー側で段階リリースの仕組みを作ってもらった - 大量の文鎮化を一番恐れている - 本番前に何度かお試し - 全ては順調に見えた・・・

Slide 27

Slide 27 text

中林のテンション 2022/1 SDK Updateの軌跡 2022/4 2022/2 2022/3 2022/5 2022/8 2022/6 2022/7

Slide 28

Slide 28 text

v4.3.2の評価結果は・・・? - ダメでした! - 2週間くらい動かすと WiFi 止まる現象がちらほら… - ここから長く苦しいバグ調査の日々が始まる - 真相はバイナリの中 - なので、現象をファームのアプリ層でキャッチする条件調査 - 死活監視入れたり

Slide 29

Slide 29 text

中林のテンション 2022/1 SDK Updateの軌跡 2022/4 2022/2 2022/3 2022/5 2022/8 2022/6 2022/7

Slide 30

Slide 30 text

嬉しい悲報の時間です - 4月からファームウェアエンジニアが入社!めでたい! - ファームウェア開発、しちゃうよね…? - v4.3.2にしてしまったから、v3.3.4で開発できるように戻さにゃ - リポジトリをmonorepo化して開発しやすいように - 各種CIやリリースワークフロー再整備 remo3 remo-e products-common network-manager sensor echonet-lite app remo3 remo-e components sensor products-common echonet-lite network-manager

Slide 31

Slide 31 text

中林のテンション 2022/1 SDK Updateの軌跡 2022/4 2022/2 2022/3 2022/5 2022/8 2022/6 2022/7

Slide 32

Slide 32 text

新たなる希望v4.4.1 > Fixed failing to transmit data or getting stuck in WiFi sleep if running WiFi and BT with modem-sleep together これは…まさか…?

Slide 33

Slide 33 text

中林のテンション 2022/1 SDK Updateの軌跡 2022/4 2022/2 2022/3 2022/5 2022/8 2022/6 2022/7

Slide 34

Slide 34 text

またヒープ減ってるやんけ・・・ - 4KBくらい ESP-IDF v4.4でまたもやヒープ残量が4KBも減った問題の調査

Slide 35

Slide 35 text

中林のテンション 2022/1 SDK Updateの軌跡 2022/4 2022/2 2022/3 2022/5 2022/8 2022/6 2022/7

Slide 36

Slide 36 text

こいつ、止まらないぞ・・・! - 1ヶ月の安定稼働を確認してからリリース準備 - メトリクスを仕込んだり - Remo <-> server 間の通信は s3 に保存されており、Athenaでクエリできる

Slide 37

Slide 37 text

中林のテンション 2022/1 SDK Updateの軌跡 2022/4 2022/2 2022/3 2022/5 2022/8 2022/6 2022/7

Slide 38

Slide 38 text

ナーバス期 - アップデート対象は数十万台…! - CSチームと連携しながら (直接話しながら - prime dayと重なっていたのでちょっとリリース時期調節したり - 自分で毎朝サポートチケット見たり

Slide 39

Slide 39 text

中林のテンション 2022/1 SDK Updateの軌跡 2022/4 2022/2 2022/3 2022/5 2022/8 2022/6 2022/7 祝!100%リリース!!!

Slide 40

Slide 40 text

ぶっちゃけESP32 (ESP-IDF) ってどうなの? - 破格の安さ - なぜか割と入手できる - 開発環境は使いやすい - ログシステム / デバッグ環境 / テスト環境 - ビルド用のDocker image完備 - menuconfig / kconfig - ソフトウェアに力入れているのは感じる - SDKの変更量 - LLVMのxtensa対応 - Rust - ただし…安定性は慎重な評価が必要 - 場合によっては死活監視も・・・ Ferrous Systemsがやっている Rustチュートリアル用ボードとかも製造

Slide 41

Slide 41 text

まとめ - Nature RemoのESP-IDFをv3.3.4からv4.4.1にアップデートできた! - ESP32 & ESP-IDFは… - 使いやすいが安定性は慎重に評価が必要 - バイナリ配布の通信部分はどうしようもない… - 見ての通りOSの自作は人生の役に立つんだ!

Slide 42

Slide 42 text

ご清聴ありがとうございました