ESP32のArduinoで利用できる追加ライブラリ

概要

ESP32はArduinoの標準ライブラリ以外にEspressif社が管理しているESP-IDF用のコンポーネントライブラリ集があります。Arduinoでも一部のライブラリが標準で使えるようなので、どんなものが入っているのかを確認してみたいと思います。

一覧

フォルダesp32esp32s2esp32s3esp32c3esp32c6esp32h2
espressif__cborOOOOOO
espressif__esp_diag_data_storeOOOOOO
espressif__esp_diagnosticsOOOOOO
espressif__esp_insightsOOOOOO
espressif__esp_modemOOOOOO
espressif__esp_rainmakerOOOOOO
espressif__esp_scheduleOOOOOO
espressif__esp_secure_cert_mgrOOOOOO
espressif__esp32-cameraOOOXXX
espressif__esp-dlOOOXXX
espressif__esp-dspOOOOOO
espressif__esp-nnOOOOOO
espressif__esp-srXXOXXX
espressif__esp-tflite-microOOOOOO
espressif__esp-zboss-libOOOOOO
espressif__esp-zigbee-libOOOOOO
espressif__jsmnOOOOOO
espressif__json_generatorOOOOOO
espressif__json_parserOOOOOO
espressif__mdnsOOOOOO
espressif__qrcodeOOOOOO
espressif__rmaker_commonOOOOOO
chmorgan__esp-libhelix-mp3OOOOOO
joltwallet__littlefsOOOOOO

基本はすべてのボードで使える物が多いですが、esp-srはESP32-S3にのみ対応。カメラ系もCなど通常接続しないボードには対応していませんでした。

個別紹介

cbor

espressif/cbor • v0.6.0~1 • ESP Component Registry
Detail of component espressif/cbor - 0.6.0~1

上記のライブラリでJSONみたいな構造でバイナリを管理でするConcise Binary Object Representation(CBOR)用のライブラリとなります。単体での利用はなかったのですがesp_insightsの内部で利用されているようでした。

esp_diag_data_store

espressif/esp_diag_data_store • v1.0.1 • ESP Component Registry
Detail of component espressif/esp_diag_data_store - 1.0.1

こちらもesp_insightsの内部で利用されているライブラリです。esp_insightsで利用する内部的なメモリ等の情報を管理するためのライブラリのようです。

esp_diagnostics

espressif/esp_diagnostics • v1.1.0 • ESP Component Registry
Detail of component espressif/esp_diagnostics - 1.1.0

こちらも同じくesp_insightsの内部で利用されているもの。

esp_insights

espressif/esp_insights • v1.1.0 • ESP Component Registry
Detail of component espressif/esp_insights - 1.1.0

ボードの稼働状態を定期的に報告するesp_insightsライブラリです。

上記で試したことがありますが、複数台を常時動かしてクラッシュレポートとかを受け取りたい場合には便利そうな機能でした。

esp_modem

espressif/esp_modem • v1.1.0 • ESP Component Registry
Detail of component espressif/esp_modem - 1.1.0

ATコマンドなどを利用してモデム経由でネットワークに接続するためのライブラリです。USBに対応しているボードだとUSBモデムなども利用可能なようです。

esp_rainmaker

espressif/esp_rainmaker • v1.1.0 • ESP Component Registry
Detail of component espressif/esp_rainmaker - 1.1.0

AWS連携をするESP RainMaker用のライブラリです。

esp_schedule

espressif/esp_schedule • v1.2.0 • ESP Component Registry
Detail of component espressif/esp_schedule - 1.2.0

ESP RainMakerの内部で利用されているスケジュール用ライブラリです。サンプルをみたかぎりスケジュールを設定しておくとコールバック関数が呼び出されるような動きでした。

esp_secure_cert_mgr

espressif/esp_secure_cert_mgr • v2.4.1 • ESP Component Registry
Detail of component espressif/esp_secure_cert_mgr - 2.4.1

Espressif社のサービスメニューとして、事前プロビジニングしてくれるものがあるようです。その場合に中に保存されている証明証を利用するためのライブラリのようです。

esp32-camera

espressif/esp32-camera • v2.0.9 • ESP Component Registry
Detail of component espressif/esp32-camera - 2.0.9

ESP32、ESP32-S2、ESP32-S3で利用できるカメラ用のライブラリです。

esp-dl

espressif/esp-dl • v2.0.0 • ESP Component Registry
Detail of component espressif/esp-dl - 2.0.0

ニューラルネットワーク用のライブラリです。ESP-WHOで利用されています。

ESP-DL User Guide - ESP32 - — ESP-DL User Guide latest documentation

上記にドキュメントがありますがC3にも対応しているようですがArduinoだと同梱されていませんでした。

esp-dsp

espressif/esp-dsp • v1.4.12 • ESP Component Registry
Detail of component espressif/esp-dsp - 1.4.12

アセンブラで多くの部分が実装されているDSP用ライブラリです。

  • 行列の乗算
  • ドット積
  • FFT
  • IIR
  • FIR
  • ベクトル演算
  • カルマンフィルタ

上記の実装があると書いてありました。

esp-nn

espressif/esp-nn • v1.0.2 • ESP Component Registry
Detail of component espressif/esp-nn - 1.0.2

ニューラルネットワーク用のライブラリです。DLとNNの違いがわかりにくいですが、TensorFlow Lite Microを利用するのがNNみたいです。

esp-sr

espressif/esp-sr • v1.7.1 • ESP Component Registry
Detail of component espressif/esp-sr - 1.7.1

AI音声ソリューション用ライブラリです。本来はESP32とESP32-S3に対応していますが、高速なESP32-S3しかArduinoでは同梱されていませんでした。

  • オーディオフロントエンドAFE
  • ウェイクワードエンジン WakeNet
  • 音声コマンド単語認識 MultiNet
  • 音声合成

上記の機能が含まれているようでした。

esp-tflite-micro

espressif/esp-tflite-micro • v1.3.1 • ESP Component Registry
Detail of component espressif/esp-tflite-micro - 1.3.1

TensorFlow Lite Microのライブラリです。ESP-IDFでは昔からサポートされていましたが、Arduinoにも同梱されるようになりました。

esp-zboss-lib

espressif/esp-zboss-lib • v1.3.2 • ESP Component Registry
Detail of component espressif/esp-zboss-lib - 1.3.2

ZBOSS Zigbee用のライブラリです。

esp-zigbee-lib

espressif/esp-zigbee-lib • v1.3.2 • ESP Component Registry
Detail of component espressif/esp-zigbee-lib - 1.3.2

Zigbee用のライブラリです。

jsmn

espressif/jsmn • v1.1.0 • ESP Component Registry
Detail of component espressif/jsmn - 1.1.0

ESPがついていないライブラリなので、Espressif社で移植してきたものです。JSONパーサーで動的メモリ割り当てなしに動く軽くて小さいライブラリのようです。

json_generator

espressif/json_generator • v1.1.2 • ESP Component Registry
Detail of component espressif/json_generator - 1.1.2

JSON生成用ライブラリです。

json_parser

https://components.espressif.com/components/espressif/json_parser

こちらもJSONパーサーライブラリです。jsmnとの使い分けが気になりますが、jsmmのラッパーライブラリのようでした。

mdns

espressif/mdns • v1.3.2 • ESP Component Registry
Detail of component espressif/mdns - 1.3.2

ローカルネットワークをUDPで名前解決を行うmDNSライブラリです。

qrcode

espressif/qrcode • v0.1.0~2 • ESP Component Registry
Detail of component espressif/qrcode - 0.1.0~2

QRコードを作成するライブラリです。シリアルコンソールに文字で作成したQRコードを表示するようなときに利用しやすいライブラリです。

rmaker_common

espressif/rmaker_common • v1.4.5 • ESP Component Registry
Detail of component espressif/rmaker_common - 1.4.5

ESP RainMakerの内部で利用されるライブラリです。命名的にはesp_rmaker_commonにすべきだったと思います。

chmorgan/esp-libhelix-mp3

chmorgan/esp-libhelix-mp3 • v1.0.3 • ESP Component Registry
Detail of component chmorgan/esp-libhelix-mp3 - 1.0.3

Espressif社が管理していないライブラリですがArduinoに同梱してありました。mp3のデコードライブラリになります。

joltwallet/littlefs

joltwallet/littlefs • v1.14.5 • ESP Component Registry
Detail of component joltwallet/littlefs - 1.14.5

マイコン向けファイルシステムの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で使うのは諦めてください。

コンポーネント一覧

ESP Component Registry
Discover, download and publish components and examples for ESP-IDF

上記が公式サイトですが、いまいち一覧性がわるいです。

Espressif Components一覧

そこで、どんなものがあるのか気になったので上記のページを作ってみました。いろいろ便利そうなライブラリはあるのですが、Arduinoからだと追加がかなり面倒です。

Arduino/librariesにいれることで使えるライブラリもありますが、フォルダ構成などがArduino向けになっていないためにファイルの位置などの修正が必要なものもありました。基本的にはESP-IDF用のコンポーネントは同梱しているもの以外は利用できないと思った方が良さそうです。

まとめ

JSONまわりやesp-dspなどについてはArduino用のライブラリを利用するより、ESP-IDFコンポーネントを利用したほうがよいのかもしれません。

またM5Unifiedなどもリポジトリには登録されていましたが、古いバージョンでしたのでArduino版のライブラリを利用するのがおすすめです。

コメント