📖

SenseCAP Indicatorで、ESP32S3とRP2040間でUART通信する方法

2023/08/12に公開


SenseCAP IndicatorはESP32S3とRP2040の2つのマイコンを内蔵し、480×480pxのタッチパネル液晶を持った汎用マイコンボード?です。Groveポートも2つあって、一つがI2C、一つがADCの機能があります。電池は内蔵していないのでUSBタイプCでの電源供給が必要です。


内部ブロック図を見るとわかりますが、2つのGroveポートはRP2040側に接続されています。
例えば、Groveポートに接続したセンサデータを取得し、ESP32のWiFiでクラウドにアップロードしたい場合、RP2040からESP32へ、UART通信でデータを転送する必要があります。

公式のGithubで、ESP32とRP2040、それぞれのUART通信サンプルコードは公開されています。
https://github.com/Seeed-Solution/SenseCAP_Indicator_ESP32
https://github.com/Seeed-Solution/SenseCAP_Indicator_RP2040

ただ、ESP32は開発環境としてESP-IDFが前提になっており、初心者には難易度が高いです。というか私はArduinoIDEしか使ったことがないです。
なので、今回はとりあえずArduinoIDE環境で、ESP32とRP2040に書き込み、UARTで相互に通信可能なところまで確認しましたので、その内容をメモします。

PC環境

・Linux Mint 20.3
・ArduinoIDE 1.8.19

ArduinoIDE環境

ボードマネージャ
・ESP32 2.0.11
・Rapsberry Pi Pico/RP2040 3.3.2

ESP32S3プログラム

String c; 

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200,SERIAL_8N1,20,19);
}

void loop() {
  Serial1.println("ESP32_test");
  if(Serial1.available()){
    c = Serial1.readStringUntil('\n');
    Serial.println(c);
  }
  delay(1);
}

ボード設定
・ESP32S3 Devmodule を選択
・Upload Speedは460800を選択
・PSRAMはOPI PSRAMを選択
・シリアルポートはdev/ttyusb0を選択(PC依存かも)

RP2040プログラム

String c;

void setup() {
  Serial.begin(115200);
  Serial1.setRX(17);
  Serial1.setTX(16);
  Serial1.begin(115200);
}

void loop() {
  Serial1.println("RP2040_test");
  if(Serial1.available()){
    c = Serial1.readStringUntil('\n');
    Serial.println(c);
  }
  delay(1);
}

ボード設定
以下のマニュアル参照
https://files.seeedstudio.com/products/SenseCAP/SenseCAP_Indicator/SenseCAP Indicator User Manual_2023.4.21.pdf

動作確認

一本のUSBで接続しながら、二つのポートの状態が確認できなかったので、以下サイトを参考に一つはLinuxのターミナルでモニタしました。
https://qiita.com/sttn/items/567c9f49b88ff275b51a

確認結果が以下の動画

左側のArduinoIDEのターミナルでESP32で受信したデータを、右側のLinuxのターミナルでRP2040で受信したデータを表示しています。

Discussion