はじめに
ESP32とwioLTE間でuart通信で文字列のやりとりをしてみました。
結構、長時間はまってしまったので書き記します。
配線
配線は下記の通りです。
wioLTEからはuartポートからGroveピンから配線を引っ張ってきます。
ポイントは下記の通りです。
- Tx-Rxをクロスさせること。
- ESP側はSerial0番ではなく、Serial2番をつかうこと(Serial1番でも可)。今回は、Serial2番を使っています(Rx:16、Tx:17)。他のマイコンとuart通信をする際はマイコン上に表記されているSerial0番は使うことを避けた方が無難です。パソコンとつなげたときに、そこの信号の流れと競合するようです(説明があっているかどうかは自信がありません)。

プログラム
ESP32側
# define RXD2 16
# define TXD2 17
void setup() {
// Note the format for setting a serial port is as follows: Serial2.begin(baud-rate, protocol, RX pin, TX pin);
Serial.begin(115200);
//Serial1.begin(9600, SERIAL_8N1, RXD2, TXD2);
Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
Serial.println("Serial Txd is on pin: "+String(TX));
Serial.println("Serial Rxd is on pin: "+String(RX));
}
void loop() {
while (Serial2.available()) {
Serial.print(char(Serial2.read()));
}
}
wioLTE
# include <WioLTEforArduino.h>
WioLTE Wio;
# define GroveUARTPort Serial
# define CONSOLE SerialUSB
void setup() {
Wio.Init();
Wio.PowerSupplyGrove(true);
CONSOLE.begin(115200);
GroveUARTPort.begin(115200);
delay(1000);
CONSOLE.println("rate = 115200)");
}
void loop() {
//受信
// while (GroveUARTPort.available()) {
// String recv_str = GroveUARTPort.readStringUntil('\n');
// CONSOLE.print("Recv: ");
// CONSOLE.println(recv_str);
// }
//送信
String sendstr = "esp32";
for (int i = 0; i < sendstr.length(); i++){
GroveUARTPort.write(sendstr.charAt(i));
}
delay(2000);
}
おわりに
シリアルモニタを確認すれば、動いているはずです。
もし動かないときは、下記を確認しましょう。
- 配線はかならずGNDを共通化しましよう。
- また通信のレートが両方で同じなっているか確認しましょう。
wioLTEではなくESP32-ESP32間でも上記のことに注意しましょう。
GNDを共通にするところを忘れないようにしましょう。
githubにコードを置いています。