问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

RDK X3与ESP32串口通讯 - 非阻塞式互传字符串

创作时间:
作者:
@小白创作中心

RDK X3与ESP32串口通讯 - 非阻塞式互传字符串

引用
CSDN
1.
https://m.blog.csdn.net/SA2672873269/article/details/136834623

RDK X3和ESP32是两种常用的嵌入式开发平台,它们之间的串口通讯在物联网、智能家居等领域有着广泛的应用。本文将详细介绍如何通过UART实现RDK X3和ESP32之间的非阻塞式双向通讯,包括硬件连接、代码实现和回环测试等内容。

硬件连接图

RDK X3在40PIN上默认使能 UART3,物理管脚号 8 和 10,IO电压 3.3V,支持波特率:9600,19200,38400,57600,115200,921600。

我使用的ESP32开发板为ESP32-DevKitC-V1,基本上淘宝20元出头的都是这个板子,IO电压3.3V,有三个硬串口,分别为UART0,1,2,其中0用于固件下载和Debug串口输出。在这里我用的是UART2与RDK X3进行串口通讯。

如果您使用的是Arduino-UNO或者ESP8266,并且使用唯一的硬件串口与RDK X3进行通讯,烧录Arduino固件时需要断开与RDK X3的串口连接。

RDK X3 的代码(Python)

from time import sleep
from select import select
from sys import stdin
from serial import Serial

def main():
    try:
        x3_serial = Serial("/dev/ttyS3", 115200, timeout=1)
    except Exception as e:
        print("Open Serial /dev/ttyS3 failed!\n")
        exit()
    print("Open serial Successfully\n")

    while True:
        if x3_serial.in_waiting:
            data_receive_from_uart = x3_serial.read_until(b"\n").decode('UTF-8')
            print("\033[31m" + "--> RDK X3 Received Message From ESP32: \n%s"%data_receive_from_uart + "\033[0m")

        r, w, e = select([stdin], [], [], 0.0)
        if r:
            data_receive_from_shell = stdin.readline()
            print()
            x3_serial.write(data_receive_from_shell.encode('UTF-8'))

        sleep(0.001)

if __name__ == "__main__":
    main()

ESP32 的代码(Arduino)

void setup() {
  Serial.begin(115200);
  while (!Serial);
  Serial.println("Serial 0 init successfully.");
  Serial2.begin(115200);
  while (!Serial2);
  Serial.println("Serial 2 init successfully.");

  while (true) {
    if (Serial.available()) {
      String data_receive_from_DebugSerial = Serial.readStringUntil('\n');
      Serial2.println(data_receive_from_DebugSerial);
    }

    if (Serial2.available()) {
      String data_receive_from_uart = Serial2.readStringUntil('\n');
      Serial.print("--> ESP32 Received Message From RDK X3: \n" + data_receive_from_uart);
      Serial.println();
    }

    delay(10);
  }
}

void loop() {
}

RDK X3 的 UART回环测试

在2.0.0及以上版本的系统,参考手册:使用串口 | RDK X3用户手册 (horizon.cc)

短接RDK X3的40pin的RX和TX,也就是8和10号脚,运行测试程序:

python3 /app/40pin_samples/test_serial.py

出现以下内容说明RDK X3的串口正常:

请输出需要测试的串口设备名:/dev/ttyS3
请输入波特率(9600,19200,38400,57600,115200,921600):115200
Serial<id=0x7fbe32fc40, open=True>(port='/dev/ttyS3', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)
Starting demo now! Press CTRL+C to exit
Send:  AA55
Recv:  AA55
Send:  AA55
Recv:  AA55
Send:  AA55
Recv:  AA55

ESP32 的 UART回环测试

以下程序用于测试ESP32的UART2,使用Arduino-IDE将以下程序烧录进ESP32,短接TX2和RX2脚:

void setup() {
  Serial.begin(115200);
  while (!Serial);
  Serial.println("Serial 0 init successfully.");
  Serial2.begin(115200);
  while (!Serial2);
  Serial.println("Serial 2 init successfully.");
  int cnt = 1;

  while (true) {
    Serial.print("loop: "); Serial.println(cnt);
    cnt ++;
    String data = "AA55";
    Serial.println("Data Send:" + data);
    Serial.print("Data Receive:");
    Serial2.println(data);
    delay(10);

    while (Serial2.available()) {
      char data_rx = Serial2.read();
      Serial.print(data_rx);
    }
    Serial.println();
    delay(1000);
  }
}

void loop() {
}

串口调试器出现以下信息,说明ESP32的串口的回环测试通过:

loop: 1
Data Send:AA55
Data Receive:AA55
loop: 2
Data Send:AA55
Data Receive:AA55
loop: 3
Data Send:AA55
Data Receive:AA55
loop: 4
Data Send:AA55
Data Receive:AA55
...
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号