ESP32-WROOM-32Eを使っていたデバイスの試作で、実装スペースをより小さくする目的で、XIAO ESP32C3に置き換えることを検討中。

実際に置き換えてみて、動作するかどうかを試してみた。

コードの移植

現在、ESP32のコードはPlatformIOのArduinoフレームワークで組んでいる。新しくXIAO用のプロジェクトを作成し、そのままコードをコピーしてビルドしたところ、エラーが出た。

ESP32SPISlaveというライブラリを使用しているが、その中の記述でエラーとなっている。ESP32-WROOM-32Eと、XIAO ESP32C3のSPIの違いについて調べてみた。

ESP32(無印)のSPIについて

ESP32-C3のSPIについて

それぞれの説明からわかることとして、

  • ESP32(無印)ではSPI2とSPI3が使えたが、ESP32-C3ではSPI2だけ
  • SPI2がHSPI、SPI3がVSPIと呼ばれていたが、ESP32C3ではHSPI、VSPIの呼称がない

という違いがあり、このことでエラーが生じる原因となっている。実際のヘッダファイルの記述も確認し、以下のように定義することで問題ないだろうと考えた。

#define VSPI HSPI
#define HSPI_HOST SPI2_HOST
#define VSPI_HOST SPI2_HOST
#include <ESP32SPISlave.h>

端子設定

SPIや他の出力に使う端子の設定についても変更が必要。SPIのデフォルトの端子については、ESP32-C3のデータシートでの記載と、XIAOのピン配置の記載とで違っているが、XIAOのピン配置にしたがっている。

テスト結果

以上のようにして、ESP32-WROOM-32Eを使っていた試作デバイスの回路で動作テストを行った結果、WROOMと同様に問題なく動作することが確認できた。