ESP32 Hardware Serial2 Example


Có ba cổng nối tiếp trên ESP32 được gọi là U0UXD, U1UXD và U2UXD, tất cả đều hoạt động ở Mức TTL 3.3V. Có ba giao diện nối tiếp được hỗ trợ phần cứng trên ESP32 được gọi là UART0, UART1 và UART2. Giống như tất cả các thiết bị ngoại vi, các chân của UART có thể được ánh xạ một cách hợp lý đến bất kỳ chân nào có sẵn trên ESP32. Tuy nhiên, UART cũng có thể có quyền truy cập trực tiếp để cải thiện một chút hiệu suất. Bảng ánh xạ pin cho hỗ trợ phần cứng này như sau.

UARTRX IOTX IOCTSRTS
UART0GPIO3GPIO1N/AN/A
UART1GPIO9GPIO10GPIO6GPIO11
UART2GPIO16GPIO17GPIO8GPIO7

Phải nói rằng, các UART drivers mà tôi khuyên bạn nên sử dụng không được tích hợp sẵn mức độ tối ưu hóa này và do đó, bạn có thể sử dụng khá thoải mái bất kỳ chân nào bạn chọn.

Introduction to UART

UART là viết tắt của Universal Asynchronous Receiver / Transmitter. Nó không phải là một giao thức truyền thông như SPI và I2C, mà là một mạch vật lý trong bộ vi điều khiển hoặc một vi mạch độc lập. Mục đích chính của UART là truyền và nhận dữ liệu nối tiếp. Giới thiệu về Giao tiếp UART Trong giao tiếp UART, hai UART giao tiếp trực tiếp với nhau. UART truyền chuyển đổi dữ liệu song song từ một thiết bị điều khiển như CPU ​​thành dạng nối tiếp, truyền nó nối tiếp đến UART nhận, sau đó chuyển đổi dữ liệu nối tiếp trở lại thành dữ liệu song song cho thiết bị nhận. Chỉ cần hai dây để truyền dữ liệu giữa hai UART. Dữ liệu chảy từ chân Tx của UART truyền đến chân Rx của UART nhận.

UART truyền dữ liệu không đồng bộ, có nghĩa là không có tín hiệu đồng hồ để đồng bộ hóa đầu ra của các bit từ UART truyền đến việc lấy mẫu các bit bởi UART nhận. Thay vì tín hiệu đồng hồ, UART truyền thêm các bit bắt đầu và dừng vào gói dữ liệu được truyền. Các bit này xác định đầu và cuối của gói dữ liệu để UART nhận biết khi nào bắt đầu đọc các bit. Khi UART nhận phát hiện một bit bắt đầu, nó bắt đầu đọc các bit đến ở một tần số cụ thể được gọi là tốc độ truyền. Tốc độ truyền là thước đo tốc độ truyền dữ liệu, được biểu thị bằng bit trên giây (bps).

Cả hai UART đều phải hoạt động ở cùng tốc độ truyền. Tốc độ truyền giữa UART truyền và nhận chỉ có thể chênh lệch khoảng 3% trước khi thời gian của các bit bị lệch quá xa. Cả hai UART cũng phải được cấu hình để truyền và nhận cùng một cấu trúc gói dữ liệu.

ESP32 Pinout for serial

ESP32 Hardware Serial2 Example



ESP32 Hardware Serial2 Arduino Example Code


  
  /*
  * There are three serial ports on the ESP known as U0UXD, U1UXD and U2UXD.
  * 
  * U0UXD is used to communicate with the ESP32 for programming and during reset/boot.
  * U1UXD is unused and can be used for your projects. Some boards use this port for SPI Flash access though
  * U2UXD is unused and can be used for your projects.
  * 
  */

  #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(9600, SERIAL_8N1, RXD2, TXD2);
    Serial.println("Serial Txd is on pin: "+String(TX));
    Serial.println("Serial Rxd is on pin: "+String(RX));
  }

  void loop() { //Choose Serial1 or Serial2 as required
    while (Serial2.available()) {
      Serial.print(char(Serial2.read()));
    }
  }


Chương trình này đọc dữ liệu từ Serial2 và gửi đến Serial0 tức là Serial Monitor. Nhiều Serial rất hữu ích khi sử dụng hệ thống GPS và GSM cùng nhau.

No comments:

Post a Comment