两个 ESP32 之间的串行通信
Serial Communication between two ESP32
我找到了基本的 arduino 到 arduino 串行通信的示例,但无法让它们在 ESP32 板上工作。我正在尝试在两个 ESP32 之间实现相同的功能两者已连接:
esp1 esp2
gnd to gnd
tx2 to rx2
rx2 to tx2
简单的草图:
//transmit sketch
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("test...");
delay(1000);
}
//receive sketch
void setup() {
Serial.begin(9600);
}
void loop() {
String received = "";
while (Serial.available())
{
received = Serial.read();
Serial.println(received);
}
}
完成这项工作还需要什么?
我认为您的代码来自一个更简单的世界,在这个世界中,引脚总是固定的,只有一个 UART 可用。对于 ESP32,您可能应该更多地按照以下思路寻找解决方案:
#include <HardwareSerial.h>
HardwareSerial Serial2(2); // use uart2
Serial2.begin(19200, SERIAL_8N1, 16, 17); // pins 16 rx2, 17 tx2, 19200 bps, 8 bits no parity 1 stop bit
希望对您有所帮助。如果在此之后您仍然遇到问题,它们可能是 a) 您使用的电路板不使用 16 和 17 作为 rx2 和 tx2,或者 b) 您需要 10k pull-up(不是系列)两条线上的电阻器可以阻止它们 "floating" - 但是有些电路板会为您处理 pull-ups。
必须满足以下所有条件才能使其正常工作:
ESP32 开发板不应使用您要用于任何嵌入式功能的串口。所以应该可以免费使用。
确保您使用的引脚正确:
U
Rx
Tx
Serial
40
41
Serial1
9
10
Serial2
16
17
确保线交叉,因此 Tx 绑定到另一块板上的 Rx,反之亦然。
确保两块板的速度相同。
要查看结果,ESP32 板应通过 USB 连接到 PC,并且控制台应连接到 USB 端口。为此,您可以使用 Putty 连接 USB 端口。两个实例可以运行为两个USB口。确保 putty 中的速度设置与代码中的相同。
无论您在一个控制台中键入什么,都将被传输并显示在另一个控制台上。
将此代码上传到两个 ESP32 板:
HardwareSerial &hSerial = Serial1; //can be Serial2 as well, just use proper pins
void setup()
{
Serial.begin(115200);//open serial via USB to PC on default port
hSerial.begin(115200);//open the other serial port
}
void loop()
{
if (Serial.available()) //check incoming on default serial (USB) from PC
{
hSerial.write(Serial.read()); // read it from UBS and send it to hSerial
}
if (hSerial.available()) //check incoming on other serial from the other board
{
Serial.write(hSerial.read()); //read it from hSerial and send it to UBS
}
}
我找到了基本的 arduino 到 arduino 串行通信的示例,但无法让它们在 ESP32 板上工作。我正在尝试在两个 ESP32 之间实现相同的功能两者已连接:
esp1 esp2
gnd to gnd
tx2 to rx2
rx2 to tx2
简单的草图:
//transmit sketch
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("test...");
delay(1000);
}
//receive sketch
void setup() {
Serial.begin(9600);
}
void loop() {
String received = "";
while (Serial.available())
{
received = Serial.read();
Serial.println(received);
}
}
完成这项工作还需要什么?
我认为您的代码来自一个更简单的世界,在这个世界中,引脚总是固定的,只有一个 UART 可用。对于 ESP32,您可能应该更多地按照以下思路寻找解决方案:
#include <HardwareSerial.h>
HardwareSerial Serial2(2); // use uart2
Serial2.begin(19200, SERIAL_8N1, 16, 17); // pins 16 rx2, 17 tx2, 19200 bps, 8 bits no parity 1 stop bit
希望对您有所帮助。如果在此之后您仍然遇到问题,它们可能是 a) 您使用的电路板不使用 16 和 17 作为 rx2 和 tx2,或者 b) 您需要 10k pull-up(不是系列)两条线上的电阻器可以阻止它们 "floating" - 但是有些电路板会为您处理 pull-ups。
必须满足以下所有条件才能使其正常工作:
ESP32 开发板不应使用您要用于任何嵌入式功能的串口。所以应该可以免费使用。
确保您使用的引脚正确:
U Rx Tx Serial 40 41 Serial1 9 10 Serial2 16 17 确保线交叉,因此 Tx 绑定到另一块板上的 Rx,反之亦然。
确保两块板的速度相同。
要查看结果,ESP32 板应通过 USB 连接到 PC,并且控制台应连接到 USB 端口。为此,您可以使用 Putty 连接 USB 端口。两个实例可以运行为两个USB口。确保 putty 中的速度设置与代码中的相同。 无论您在一个控制台中键入什么,都将被传输并显示在另一个控制台上。
将此代码上传到两个 ESP32 板:
HardwareSerial &hSerial = Serial1; //can be Serial2 as well, just use proper pins
void setup()
{
Serial.begin(115200);//open serial via USB to PC on default port
hSerial.begin(115200);//open the other serial port
}
void loop()
{
if (Serial.available()) //check incoming on default serial (USB) from PC
{
hSerial.write(Serial.read()); // read it from UBS and send it to hSerial
}
if (hSerial.available()) //check incoming on other serial from the other board
{
Serial.write(hSerial.read()); //read it from hSerial and send it to UBS
}
}