SlideShare a Scribd company logo
17
Most read
20
Most read
23
Most read
ESP32特集の内容紹介
インターフェース オフ会 @ CQ出版
2020/01/17
Kenta IDA (@ciniml)
自己紹介
•井田 健太 (@ciniml)
•仕事:FPGAの論理設計?
•使用言語:C++, SystemVerilog, Go, Python
• 元は組み込み?ソフト屋
2020/1/17ESP32特集の内容紹介
特集の担当箇所
•インターフェース2020年1月号 ESP32特集
• 第1部第3章内コラム
• ESP32-S2の紹介
• 第3部第4章
• ESP32リアルタイム処理の研究
2020/1/17ESP32特集の内容紹介
ESP32-S2の紹介
2020/1/17ESP32特集の内容紹介
ESP32-S2とは
•ESP32シリーズの新しいSoC
•従来ESP32との違い
• CPUコアの更新 (Xtensa LX6 → Xtensa LX7)
• CPUコアがシングルコアの系統のみ
• 従来のESP32-S系の後継
• USB OTGサポート
• ULPコアが独自コアからRISC-Vに
2020/1/17ESP32特集の内容紹介
CPUコアの変化
•CPUコアが新しい世代のものになった
• Xtensa LX7
•特に性能が大きく変わることもなさそう
• LX7の資料は見つかるがLX6の資料はあまり出てこない
•動作周波数は従来通り、最大240[MHz]
•シングルコア版のみ
2020/1/17ESP32特集の内容紹介
USB OTGサポート
•USB2.0 FS OTGのペリフェラルが追加された
• USB2.0 (Full Speedまで)
• USB Host/Device機能が使えるように
•SPI接続のUSBコントローラが不要になる
•現時点ではAPI等がどうなるか不明
• ESP-IDFの開発版にも特にコードが見当たらない
2020/1/17ESP32特集の内容紹介
ULPコアの変更(1/3)
•ULP (Ultra Low Power)コプロセッサ
• Deep sleep中でも動かすことができるコプロセッサ
• センサの値読み出し→判定→スリープ解除などに使う
• 中にはサウンド・ドライバ用のコプロセッサとして使う人も
2020/1/17ESP32特集の内容紹介
ULPコアの変更(2/3)
•従来は独自のコア
• かなり使いにくい命令セット
• bitwise NOTとかが無いので
SUBとADDで代用したり
• 当然Cコンパイラなど使えない
2020/1/17ESP32特集の内容紹介
ULPコアの変更(3/3)
•ESP32-S2ではRISC-V系コアに変更 (RV32IMC)
• 32bitレジスタ32本、かなり普通の命令セット、乗算命令あり
•おそらくCコンパイラが使える
•詳細は不明だが処理性能は向上している模様
• センサ読み出し処理で平均消費電流が低下
• 100[uA] → 7[uA]
• 動作中の消費電流は増えたが、短時間で処理完了できる
2020/1/17ESP32特集の内容紹介
現時点での状況
•まだモジュールの発表はない
• 一部ユーザーにES品を提供している模様
•工事設計認証済みモジュールの供給までは
まだしばらく時間がかかると思われる
2020/1/17ESP32特集の内容紹介
ESP32リアルタイム処理の研究
2020/1/17ESP32特集の内容紹介
発端
•M5StickCの内蔵6軸IMUを使って計測処理
• 6軸IMUから一定周期でデータ取得
• 計測データを無線LANでPCに送信
• 計測値 + タイムスタンプ
•なぜかタイムスタンプがばらつく…
2020/1/17ESP32特集の内容紹介
処理内容
•周期的にセンサの値を読み出したい
• 信号処理のため周期の揺らぎは減らしたい
•タイマー割り込みはちょっと面倒そう
•ESP-IDFのドキュメントを眺める
•高分解能タイマとかいうのを見つける
• 高分解能だし今回の用途に良さそう
2020/1/17ESP32特集の内容紹介
高分解能タイマ
•ESP-IDFの機能の1つ
•マイクロ秒単位の周期で指定した処理を実行
• ただし、周期は100[us]以上でないと厳しい
•esp_timer_で始まるAPIで使える
2020/1/17ESP32特集の内容紹介
高分解能タイマの周期処理の精度
•周期処理開始時の時刻のばらつきを計測
• 無線LAN通信の動作パターンごと
• UDP通信あり・なし
• アクセスポイント検索
• 無線LAN無効
•使い物にならないほどばらつく
2020/1/17ESP32特集の内容紹介
表 2: 高分解能タイマのインターバル
動作パ
ターン
平均値
[us]
最大値
[us]
最小値
[us]
udp 500 1356 6
noudp 500 2339 7
apsca
n
500 12226 6
nowifi 500 550 450
ばらつく原因と対策
•高分解能タイマの実装の問題
•指定した処理を
無線通信よりも低い優先度でPRO CPUで実行
• 無線通信処理はPRO CPUで実行される
• →無線通信処理中は処理時刻が来ても実行されない
•対策:仕方ないのでタイマ割り込みを使う
2020/1/17ESP32特集の内容紹介
タイマ割り込みを使う場合
•timer_isr_register 関数で割り込みハンドラを指定
• ハンドラはtimer_isr_registerを呼び出したコアで実行される
•割り込みハンドラ内で時間のかかる処理はできない
• 他の処理に影響がでる
• 正にその時刻に実行する必要のある処理だけ実行
• e.g. センサの測定処理
• 時間のかかる処理は高優先度のタスクで実行する
• e.g. 測定結果の信号処理、送信処理など
2020/1/17ESP32特集の内容紹介
“時間のかかる処理”の実行方法
•ハンドラから高優先度のタスクに通知する
• FreeRTOSのxTaskNotifyFromISRなど
•高優先度のタスクの優先度はどれくらい?
• 無線LAN処理 (優先度23) より高い優先度が必要
• 通信処理とは別のコアの方が良い
•試しに優先度22, 24でPRO CPU, APP CPUで計測
2020/1/17ESP32特集の内容紹介
割り込みのインターバルとタスク実行の遅延
動作パターン 遅延 平均値[us] 遅延 最大値[us] 遅延 最小値[us]
インターバル 平均
値[us]
インターバル 最大
値[us]
インターバル 最小
値[us]
PRO_CPU,22,udp 20 919 14 500 513 497
PRO_CPU,22,nou
dp
20 1816 14 500 514 498
PRO_CPU,22,apsc
an
20 12432 14 500 775 497
PRO_CPU,22,now
ifi
14 16 14 500 502 498
PRO_CPU,24,udp 14 33 14 500 513 497
PRO_CPU,24,nou
dp
14 32 13 500 696 497
PRO_CPU,24,apsc
an
14 32 14 500 949 497
PRO_CPU,24,now
ifi
14 14 14 500 500 499
APP_CPU,22,udp 14 321 14 500 509 498
APP_CPU,22,nou
dp
14 24 14 500 501 498
APP_CPU,22,apsc
an
14 24 13 500 502 498
APP_CPU,22,nowi
fi
14 19 14 500 501 499
APP_CPU,24,udp 14 30 13 500 509 497
APP_CPU,24,nou
dp
14 19 14 500 502 498
2020/1/17ESP32特集の内容紹介
割り込みのインターバルとタスク実行の遅延
動作パターン 遅延 平均値[us] 遅延 最大値[us] 遅延 最小値[us]
インターバル 平均
値[us]
インターバル 最大
値[us]
インターバル 最小
値[us]
PRO_CPU,22,udp 20 919 14 500 513 497
PRO_CPU,22,nou
dp
20 1816 14 500 514 498
PRO_CPU,22,apsc
an
20 12432 14 500 775 497
PRO_CPU,22,now
ifi
14 16 14 500 502 498
PRO_CPU,24,udp 14 33 14 500 513 497
PRO_CPU,24,nou
dp
14 32 13 500 696 497
PRO_CPU,24,apsc
an
14 32 14 500 949 497
PRO_CPU,24,now
ifi
14 14 14 500 500 499
APP_CPU,22,udp 14 321 14 500 509 498
APP_CPU,22,nou
dp
14 24 14 500 501 498
APP_CPU,22,apsc
an
14 24 13 500 502 498
APP_CPU,22,nowi
fi
14 19 14 500 501 499
APP_CPU,24,udp 14 30 13 500 509 497
APP_CPU,24,nou
dp
14 19 14 500 502 498
2020/1/17ESP32特集の内容紹介
低優先度かつPRO CPUだとタスク実行がかなり遅れる
PRO CPUだと割り込みインターバルもばらつ
く
低優先度だとAPP CPUでもタスク実行が遅延するときがある
高優先度でAPP CPUだと通信処理の影響を受けない
ESP32周期処理まとめ
•高い精度で周期処理を行うには:
• APP CPUでタイマ割り込みを使用
• APP CPU, 優先度24以上のタスクで処理を実行
•Arduinoの場合は?
• Tickerクラスは高分解能タイマを使っているので避ける
• タイマ割り込みを使う
• timerで始まる関数で使える (RepeatTimerサンプルを参照)
2020/1/17ESP32特集の内容紹介
おしまい
2020/1/17ESP32特集の内容紹介

More Related Content

PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PDF
Dockerfile を書くためのベストプラクティス解説編
PPTX
Redisの特徴と活用方法について
PDF
JDKの選択肢とサーバーサイドでの選び方
PDF
これからのJDK/JVM 何を選ぶ?どう選ぶ?
PDF
DockerとPodmanの比較
PDF
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Dockerfile を書くためのベストプラクティス解説編
Redisの特徴と活用方法について
JDKの選択肢とサーバーサイドでの選び方
これからのJDK/JVM 何を選ぶ?どう選ぶ?
DockerとPodmanの比較
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」

What's hot (20)

PPTX
マイクロサービスにおける 結果整合性との戦い
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PPTX
このPHP QAツールがすごい!2019
PDF
シリコンバレーの「何が」凄いのか
PPTX
DDDモデリング勉強会 #6
PPTX
世界一わかりやすいClean Architecture
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PDF
分散システムの限界について知ろう
PDF
Serf / Consul 入門 ~仕事を楽しくしよう~
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
PDF
あなたの知らないPostgreSQL監視の世界
PDF
Docker道場オンライン#1 Docker基礎概念と用語の理解
PDF
Python 3.9からの新定番zoneinfoを使いこなそう
PPTX
本当は恐ろしい分散システムの話
PDF
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
PDF
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
PPTX
Apache Spark 2.4 and 3.0 What's Next?
PPTX
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
PDF
コンテナ環境でJavaイメージを小さくする方法!
PDF
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
マイクロサービスにおける 結果整合性との戦い
コンテナ未経験新人が学ぶコンテナ技術入門
このPHP QAツールがすごい!2019
シリコンバレーの「何が」凄いのか
DDDモデリング勉強会 #6
世界一わかりやすいClean Architecture
コンテナの作り方「Dockerは裏方で何をしているのか?」
分散システムの限界について知ろう
Serf / Consul 入門 ~仕事を楽しくしよう~
強いて言えば「集約どう実装するのかな、を考える」な話
あなたの知らないPostgreSQL監視の世界
Docker道場オンライン#1 Docker基礎概念と用語の理解
Python 3.9からの新定番zoneinfoを使いこなそう
本当は恐ろしい分散システムの話
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Apache Spark 2.4 and 3.0 What's Next?
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
コンテナ環境でJavaイメージを小さくする方法!
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
Ad

More from Kenta IDA (12)

PPTX
M5StackにFPGAをつないでみた
PPTX
カスタムブロックで自作モジュールをUIFlow対応にする
PPTX
Using SORACOM 3G Module From MicroPython
PPTX
M5StackをRustで動かす
PPTX
MicroPythonのCモジュールを作ってみる
PPTX
ESP32開発環境まとめ2
PPTX
ESP32開発環境まとめ
PPTX
EC2 F1 Virtual JTAG
PPTX
PYNQ単体でUIを表示してみる(PYNQまつり)
PPTX
PSoC4 BLEで作る簡単無線センサーユニット
PPTX
Windows10 IoT CoreとBLE
PPTX
おそらく明日から役にたつC++11新機能
M5StackにFPGAをつないでみた
カスタムブロックで自作モジュールをUIFlow対応にする
Using SORACOM 3G Module From MicroPython
M5StackをRustで動かす
MicroPythonのCモジュールを作ってみる
ESP32開発環境まとめ2
ESP32開発環境まとめ
EC2 F1 Virtual JTAG
PYNQ単体でUIを表示してみる(PYNQまつり)
PSoC4 BLEで作る簡単無線センサーユニット
Windows10 IoT CoreとBLE
おそらく明日から役にたつC++11新機能
Ad

ESP32特集の内容紹介