概要
ESP32はArduinoの標準ライブラリ以外にEspressif社が管理しているESP-IDF用のコンポーネントライブラリ集があります。Arduinoでも一部のライブラリが標準で使えるようなので、どんなものが入っているのかを確認してみたいと思います。
一覧
フォルダ | esp32 | esp32s2 | esp32s3 | esp32c3 | esp32c6 | esp32h2 |
---|---|---|---|---|---|---|
espressif__cbor | O | O | O | O | O | O |
espressif__esp_diag_data_store | O | O | O | O | O | O |
espressif__esp_diagnostics | O | O | O | O | O | O |
espressif__esp_insights | O | O | O | O | O | O |
espressif__esp_modem | O | O | O | O | O | O |
espressif__esp_rainmaker | O | O | O | O | O | O |
espressif__esp_schedule | O | O | O | O | O | O |
espressif__esp_secure_cert_mgr | O | O | O | O | O | O |
espressif__esp32-camera | O | O | O | X | X | X |
espressif__esp-dl | O | O | O | X | X | X |
espressif__esp-dsp | O | O | O | O | O | O |
espressif__esp-nn | O | O | O | O | O | O |
espressif__esp-sr | X | X | O | X | X | X |
espressif__esp-tflite-micro | O | O | O | O | O | O |
espressif__esp-zboss-lib | O | O | O | O | O | O |
espressif__esp-zigbee-lib | O | O | O | O | O | O |
espressif__jsmn | O | O | O | O | O | O |
espressif__json_generator | O | O | O | O | O | O |
espressif__json_parser | O | O | O | O | O | O |
espressif__mdns | O | O | O | O | O | O |
espressif__qrcode | O | O | O | O | O | O |
espressif__rmaker_common | O | O | O | O | O | O |
chmorgan__esp-libhelix-mp3 | O | O | O | O | O | O |
joltwallet__littlefs | O | O | O | O | O | O |
基本はすべてのボードで使える物が多いですが、esp-srはESP32-S3にのみ対応。カメラ系もCなど通常接続しないボードには対応していませんでした。
個別紹介
cbor
上記のライブラリでJSONみたいな構造でバイナリを管理でするConcise Binary Object Representation(CBOR)用のライブラリとなります。単体での利用はなかったのですがesp_insightsの内部で利用されているようでした。
esp_diag_data_store
こちらもesp_insightsの内部で利用されているライブラリです。esp_insightsで利用する内部的なメモリ等の情報を管理するためのライブラリのようです。
esp_diagnostics
こちらも同じくesp_insightsの内部で利用されているもの。
esp_insights
ボードの稼働状態を定期的に報告するesp_insightsライブラリです。
上記で試したことがありますが、複数台を常時動かしてクラッシュレポートとかを受け取りたい場合には便利そうな機能でした。
esp_modem
ATコマンドなどを利用してモデム経由でネットワークに接続するためのライブラリです。USBに対応しているボードだとUSBモデムなども利用可能なようです。
esp_rainmaker
AWS連携をするESP RainMaker用のライブラリです。
esp_schedule
ESP RainMakerの内部で利用されているスケジュール用ライブラリです。サンプルをみたかぎりスケジュールを設定しておくとコールバック関数が呼び出されるような動きでした。
esp_secure_cert_mgr
Espressif社のサービスメニューとして、事前プロビジニングしてくれるものがあるようです。その場合に中に保存されている証明証を利用するためのライブラリのようです。
esp32-camera
ESP32、ESP32-S2、ESP32-S3で利用できるカメラ用のライブラリです。
esp-dl
ニューラルネットワーク用のライブラリです。ESP-WHOで利用されています。
上記にドキュメントがありますがC3にも対応しているようですがArduinoだと同梱されていませんでした。
esp-dsp
アセンブラで多くの部分が実装されているDSP用ライブラリです。
- 行列の乗算
- ドット積
- FFT
- IIR
- FIR
- ベクトル演算
- カルマンフィルタ
上記の実装があると書いてありました。
esp-nn
ニューラルネットワーク用のライブラリです。DLとNNの違いがわかりにくいですが、TensorFlow Lite Microを利用するのがNNみたいです。
esp-sr
AI音声ソリューション用ライブラリです。本来はESP32とESP32-S3に対応していますが、高速なESP32-S3しかArduinoでは同梱されていませんでした。
- オーディオフロントエンドAFE
- ウェイクワードエンジン WakeNet
- 音声コマンド単語認識 MultiNet
- 音声合成
上記の機能が含まれているようでした。
esp-tflite-micro
TensorFlow Lite Microのライブラリです。ESP-IDFでは昔からサポートされていましたが、Arduinoにも同梱されるようになりました。
esp-zboss-lib
ZBOSS Zigbee用のライブラリです。
esp-zigbee-lib
Zigbee用のライブラリです。
jsmn
ESPがついていないライブラリなので、Espressif社で移植してきたものです。JSONパーサーで動的メモリ割り当てなしに動く軽くて小さいライブラリのようです。
json_generator
JSON生成用ライブラリです。
json_parser
こちらもJSONパーサーライブラリです。jsmnとの使い分けが気になりますが、jsmmのラッパーライブラリのようでした。
mdns
ローカルネットワークをUDPで名前解決を行うmDNSライブラリです。
qrcode
QRコードを作成するライブラリです。シリアルコンソールに文字で作成したQRコードを表示するようなときに利用しやすいライブラリです。
rmaker_common
ESP RainMakerの内部で利用されるライブラリです。命名的にはesp_rmaker_commonにすべきだったと思います。
chmorgan/esp-libhelix-mp3
Espressif社が管理していないライブラリですがArduinoに同梱してありました。mp3のデコードライブラリになります。
joltwallet/littlefs
マイコン向けファイルシステムのLittleFS用ライブラリです。
Arduinoでの使い方
#include "qrcode.h"
void setup() {
Serial.begin(115200);
}
void loop() {
String ssid = "SSID";
String key = String(millis());
String text = "WIFI:T:WPA;S:" + ssid + ";P:" + key + ";;";
Serial.printf("TEXT = %s\n", text.c_str());
esp_qrcode_config_t cfg = ESP_QRCODE_CONFIG_DEFAULT();
esp_qrcode_generate(&cfg, text.c_str());
delay(1000);
esp_qrcode_config_t cfg2 = {};
cfg2.display_func = my_qrcode_print;
cfg2.max_qrcode_version = 10;
cfg2.qrcode_ecc_level = ESP_QRCODE_ECC_LOW;
esp_qrcode_generate(&cfg2, text.c_str());
delay(1000);
}
void my_qrcode_print(esp_qrcode_handle_t qrcode) {
int size = esp_qrcode_get_size(qrcode);
int border = 2;
Serial.printf("my_qrcode_print\n");
for (int y = -border; y < size + border; y++) {
for (int x = -border; x < size + border; x++) {
if (esp_qrcode_get_module(qrcode, x, y)) {
Serial.printf("■");
} else {
Serial.printf(" ");
}
}
Serial.printf("\n");
}
Serial.printf("\n");
}
とくに必要なことはなく、includeするだけでそのまま利用可能です。上記はQRコードを出力するサンプルです。デフォルトはコンソールに出力されるので画像などにしたい場合には自分でコールバック関数を登録して処理を行います。
ただし、Arduino IDEだと行間が空きすぎているためシリアルモニタからはQRコードの認識はできません。等角フォントのテキストエディタなどにコピペしてから読み込んでみてください。そしてサンプル実装の全角版はたぶん文字間などの影響があり読み込めないと思います。
ESP-IDFでの使い方
idf.py add-dependency "espressif/qrcode^0.1.0~2"
本来はidf.pyを使ってプロジェクトに追加が可能です。ただしArduinoにはidf.pyが添付されていないので利用することができません。
espressif/qrcode:
version: "^0.1.0~1"
rules:
- if: "target != esp32c2"
もしくはidf_component.ymlに上記のように必要なライブラリを列挙すればビルド時に自動的に取り込んでくれます。しかしながらこちらもArduinoでは利用できません。基本的に同梱されていないコンポーネントはArduinoで使うのは諦めてください。
コンポーネント一覧
上記が公式サイトですが、いまいち一覧性がわるいです。
そこで、どんなものがあるのか気になったので上記のページを作ってみました。いろいろ便利そうなライブラリはあるのですが、Arduinoからだと追加がかなり面倒です。
Arduino/librariesにいれることで使えるライブラリもありますが、フォルダ構成などがArduino向けになっていないためにファイルの位置などの修正が必要なものもありました。基本的にはESP-IDF用のコンポーネントは同梱しているもの以外は利用できないと思った方が良さそうです。
まとめ
JSONまわりやesp-dspなどについてはArduino用のライブラリを利用するより、ESP-IDFコンポーネントを利用したほうがよいのかもしれません。
またM5Unifiedなどもリポジトリには登録されていましたが、古いバージョンでしたのでArduino版のライブラリを利用するのがおすすめです。
コメント