ESP32-WROOM-32Eを使っていたデバイスの試作で、実装スペースをより小さくする目的で、XIAO ESP32C3に置き換えることを検討中。
実際に置き換えてみて、動作するかどうかを試してみた。
コードの移植
現在、ESP32のコードはPlatformIOのArduinoフレームワークで組んでいる。新しくXIAO用のプロジェクトを作成し、そのままコードをコピーしてビルドしたところ、エラーが出た。
ESP32SPISlaveというライブラリを使用しているが、その中の記述でエラーとなっている。ESP32-WROOM-32Eと、XIAO ESP32C3の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と同様に問題なく動作することが確認できた。