ESP32 開発環境まとめ
インターフェース オフ会 @ CQ出版
2018/08/28
Kenta IDA (@ciniml)
自己紹介
•井田 健太 (@ciniml)
•仕事:FPGAの論理設計
•使用言語:Verilog
HDL,SystemVerilog,C++,Python
• 元は組み込み?ソフト屋
• 最近はなぜかGoのコードを書いている…
2018/08/28ESP32 開発環境まとめ
特集の担当箇所
•第3部
• 第2章 ESP32の主な開発環境
• Appendix2 純正ESP-IDFを導入する方法
• Appendix4 ESP32用Arduino開発環境を試す
•第4部
• 第1章 [実験1]ESP32のWi-Fiをマスタする
• ESP32同士でWi-Fi経由で双方向通信する実験
2018/08/28ESP32 開発環境まとめ
ESP32の開発環境
•ESP-IDF
•Arduino
•MicroPython
•その他
• MongooseOSとか
2018/08/28ESP32 開発環境まとめ
開発環境比較
項目 ESP-IDF Arduino MicroPython
簡単さ × 設定が複雑 〇 〇
パフォーマンス 〇 △ マルチタスク微妙* × バイトコード遅い
Wi-Fi 〇 〇 〇
Bluetooth 〇 〇 × サポートなし
ULP 〇 △ 要IDF直呼び 〇
*タスク周りの操作にIDF直呼びが必要
2018/08/28ESP32 開発環境まとめ
ESP-IDF
2018/08/28ESP32 開発環境まとめ
ESP-IDF (ESP-IoT Development
Framework)
• Espressif公式開発環境
• 言語:C/C++
• GCC toolchain + ESP32用ドライバ + 各種ライブラリ
• crosstool-NG (クロスコンパイル用ツールチェイン・ジェネレータ)を使
用
• ESP32用ドライバは一部はバイナリで提供される
(無線に関する部分など)
• 各種ライブラリにはオープンソースのライブラリが含まれる
• 例:lwip (TCP/IPスタック), mbedtls(TLSライブラリ) 2018/08/28ESP32 開発環境まとめ
2018/08/28ESP32 開発環境まとめ
ソースコード Makefile sdkconfig
アプリケーション
・プロジェクト
xtensa-
esp32
ツールチェイン
make
pytho
n
外部ツールgit
コンポーネント
(FreeRTOS, ドライバ, Bluedroid等)
ESP-IDF
入力・呼び出し
生成
ネイティブ・コード アプリケーション
Bluedroid
(Bluetoothスタッ
ク)
ライブラリ
lwIP
(TCP/IPスタック)
mbedtl
s
(TLS)
その他
コンポーネント
FreeRTOS OS・ドライバ
ESP32
ハードウェア・ドライバ
ESP32
ESP32モジュール
(ESP-WROOM-32等)
Flash ROM
書き込み
ESP-
IDF
2018/08/28ESP32 開発環境まとめ
ESP-IDFの特徴
•RTOS(FreeRTOS)標準搭載
• デュアルコアを有効活用するにはほぼ必須
• コアごとのタスク割り当て、排他制御、通信など
•そこそこ現代的なC/C++コンパイラ(GCC 5.2.0)
• 標準でC11 + GNU拡張、C++11+GNU拡張が有効
2018/08/28ESP32 開発環境まとめ
ESP-IDFの特徴
•コンポーネント・機能ごとに設定可能
• FreeRTOS、ESP32自体の設定
• タスクのスタックサイズ、ROMへのアクセス方法など
• 不要なものは除外してリソースを節約
• Wi-Fi, Bluetoothの有効・無効
• ライブラリの有効・無効
•各開発環境中、最も細かい調整が可能
• ただし、調整はそれなりに知識が必要
2018/08/28ESP32 開発環境まとめ
ESP-IDFの最近の更新
• 現時点のバージョン
• Toolchain: crosstool-NG 1.22.0-80 (GCC 5.2.0)
• ESP-IDF: v3.0.3 (release), v3.1-rc1
• v3.0→v3.1の変更点
• Automatic Light Sleep
• おそらく実行状態のタスクが無いときに自動的にLight Sleepする機能
• ESP-MESH
• Espressif独自のWi-Fiを使ったメッシュ・ネットワーク機能
• 詳細は公式GitHubリポジトリのReleaseを参照
• https://github.com/espressif/esp-idf/releases
2018/08/28ESP32 開発環境まとめ
ESP-IDF更新時の注意点
•メジャーバージョン変更時に結構APIが変わる
• e.g. Bluetooth Low EnergyのGATTまわりのAPI
•メジャーバージョンを上げるときは注意
2018/08/28ESP32 開発環境まとめ
Arduino
2018/08/28ESP32 開発環境まとめ
Arduino (Arduino core for ESP32)
•Arduino core for ESP32
• https://github.com/espressif/arduino-esp32
• ESP32をArduinoとして使えるようにするもの
• ESP-IDFを使って作られている
2018/08/28ESP32 開発環境まとめ
Arduino core for ESP32のインストール
•インストール
• ボードマネージャでのインストール不可
• 手動でGitHubからダウンロード
• いくつかのコマンド実行
2018/08/28ESP32 開発環境まとめ
Arduino core for ESP32のインストール
•ボードマネージャでインストール
• 7月末くらいにサポート
• 追加のボードマネージャURL
• ESP8266と同様
• 全プラットフォームで推奨の方法
2018/08/28ESP32 開発環境まとめ
Arduino core for ESP32の特徴
•Arduino用のライブラリが利用可能
• ESP32向けのライブラリ
• Wi-Fi通信、HTTP(S)、mDNS、MQTT
• Bluetooth、Bluetooth Low Energy
• Arduino汎用のライブラリ
• I2Cを使ったセンサ用ライブラリ
• 全てのライブラリが動くわけではないので確認は必要
2018/08/28ESP32 開発環境まとめ
Arduino core for ESP32の特徴
•ベースのESP-IDFはかなり新しい
• リリース版固定ではなくmasterブランチ
• →ほぼ最新の機能が利用可能
• e.g. Bluetooth SPPプロファイルのサポート (ESP-IDF v3.1の機
能)
•C++11を使うことも可能
• ただし、他のArduinoボードとの互換性はなくなる
2018/08/28ESP32 開発環境まとめ
MicroPython
2018/08/28ESP32 開発環境まとめ
MicroPython
• 組み込み向けのPython実装
• CPython 3.4 + 3.5の一部の言語機能
• 3.5の機能:type hintsなど
• もともとはSTM32向け
• 公式のPyBoardはSTM32F405 (Arm Cortex-M4F)
• 複数のマイコンに移植されている
• Nordic nRF51822 (Arm Cortex-M0) → micro:bit
• ESP8266
• ESP32
2018/08/28ESP32 開発環境まとめ
他の環境との比較
•C/C++に比べて記述量が少ない
•メモリ管理はGC任せにできる
•メモリ確保処理削減
• 大体の通信処理にXXXinto形式のメソッドがある
• 確保済みのbuffer-likeに結果を格納する形式
• UART.readinto、I2C.readmem_intoなど
2018/08/28ESP32 開発環境まとめ
MicroPythonの便利なところ
•REPL環境 (Read Evaluation Print Loop)
• 対話型の実行環境
• CPythonをPCで使ったときと同様
• ターミナル・ソフトウェア経由で入力した
コマンドを実行可能
• 変数の内容表示などもできるので
動作確認やデバッグに便利
2018/08/28ESP32 開発環境まとめ
MicroPythonのパフォーマンス
•MicroPythonの部分の動作は遅い
• バイトコード・インタプリタ
•Cで書かれたPythonモジュールの動作速度は速い
• 重たい処理はCモジュールを作成するなどの検討が必要
2018/08/28ESP32 開発環境まとめ
MicroPythonのESP32ポートのパフォーマン
ス
•アセンブラ周りは使えない
• インライン・アセンブラ
• ネイティブコード・エミッタ
• バイトコードではなく機械語を出力して実行する機能
• ESP8266用実装はあるがESP32はない
• たぶんESP32用のXtensa LX6の命令セットの情報が無いため
2018/08/28ESP32 開発環境まとめ
MicroPython使用時の注意点
•CPythonのライブラリは使えない
• MicroPython向けのライブラリがある
• pipにmicropython-XXXの名前で登録されている
•Bluetoothは未サポート
• ESP-IDF 2.x用の実装はあり
• ESP-IDF 3.xでBluetooth APIの仕様が変わったため動作
しない
• →Bluetoothを使うなら他の開発環境を使用する 2018/08/28ESP32 開発環境まとめ
まとめ
•各開発環境に利点・欠点あり
•チップの機能を限界まで使う→ESP-IDF
• 低消費電力化
• デュアルコアをフルに活用
•手早くプロトタイプ作成→Arduino/MicroPython
• Bluetoothが必要ならArduino
2018/08/28ESP32 開発環境まとめ
おしまい
2018/08/28ESP32 開発環境まとめ

ESP32開発環境まとめ