SlideShare a Scribd company logo
1 of 23
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

What's hot

組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
 

What's hot (20)

プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
 
素晴らしきメガデモの世界
素晴らしきメガデモの世界素晴らしきメガデモの世界
素晴らしきメガデモの世界
 
第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
Intel RealSense for ROSConJP20221121.pdf
Intel RealSense for ROSConJP20221121.pdfIntel RealSense for ROSConJP20221121.pdf
Intel RealSense for ROSConJP20221121.pdf
 
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
SSII2022 [TS2] 自律移動ロボットのためのロボットビジョン〜 オープンソースの自動運転ソフトAutowareを解説 〜
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
 
KiCadで雑に基板を作る チュートリアル
KiCadで雑に基板を作る チュートリアルKiCadで雑に基板を作る チュートリアル
KiCadで雑に基板を作る チュートリアル
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたOpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
 

Similar to ESP32特集の内容紹介

45分で理解する 最近のスパコン事情 斉藤之雄
45分で理解する 最近のスパコン事情 斉藤之雄45分で理解する 最近のスパコン事情 斉藤之雄
45分で理解する 最近のスパコン事情 斉藤之雄
Yukio Saito
 

Similar to ESP32特集の内容紹介 (20)

GTC Japan 2017
GTC Japan 2017GTC Japan 2017
GTC Japan 2017
 
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
 
Singularityで分散深層学習
Singularityで分散深層学習Singularityで分散深層学習
Singularityで分散深層学習
 
【A-1】AIを支えるGPUコンピューティングの今
【A-1】AIを支えるGPUコンピューティングの今【A-1】AIを支えるGPUコンピューティングの今
【A-1】AIを支えるGPUコンピューティングの今
 
Esp32でiot
Esp32でiotEsp32でiot
Esp32でiot
 
200625material naruse
200625material naruse200625material naruse
200625material naruse
 
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
 
ESP32開発環境まとめ
ESP32開発環境まとめESP32開発環境まとめ
ESP32開発環境まとめ
 
M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話
 
ESP32開発環境まとめ2
ESP32開発環境まとめ2ESP32開発環境まとめ2
ESP32開発環境まとめ2
 
45分で理解する 最近のスパコン事情 斉藤之雄
45分で理解する 最近のスパコン事情 斉藤之雄45分で理解する 最近のスパコン事情 斉藤之雄
45分で理解する 最近のスパコン事情 斉藤之雄
 
M5Stack互換機を作った話
M5Stack互換機を作った話M5Stack互換機を作った話
M5Stack互換機を作った話
 
Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めCell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始め
 
Getting Started with Jetson Nano
Getting Started with Jetson NanoGetting Started with Jetson Nano
Getting Started with Jetson Nano
 
Imaocande LT
Imaocande LTImaocande LT
Imaocande LT
 
福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験
 
【MySQL編】サーバ環境が進化する今話題のPCIe SSDを評価してみた
【MySQL編】サーバ環境が進化する今話題のPCIe SSDを評価してみた【MySQL編】サーバ環境が進化する今話題のPCIe SSDを評価してみた
【MySQL編】サーバ環境が進化する今話題のPCIe SSDを評価してみた
 
20170421 tensor flowusergroup
20170421 tensor flowusergroup20170421 tensor flowusergroup
20170421 tensor flowusergroup
 
20221018_IoTLT_vol92_kitazaki_v1.pdf
20221018_IoTLT_vol92_kitazaki_v1.pdf20221018_IoTLT_vol92_kitazaki_v1.pdf
20221018_IoTLT_vol92_kitazaki_v1.pdf
 
20170726 py data.tokyo
20170726 py data.tokyo20170726 py data.tokyo
20170726 py data.tokyo
 

More from Kenta IDA

More from Kenta IDA (10)

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

Recently uploaded

Recently uploaded (10)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

ESP32特集の内容紹介