目录

Esp32-Uart串口

ESP32的uart接口

ESP32定义了三路UART通道:uart0、uart1、uart2

其中,一般的esp开发板上uart0已经作为串口转USB使用,基本只能用作烧录和日志输出,所以一般调用的是uart1uart2

GPIO交换矩阵

这三路UART都定义了默认管脚,但ESP32使用的是GPIO交换矩阵,所以也可以重新定义其他管脚来使用

注意,不是全部管脚都可以被作为输入输出管脚被重新定义,详见esp32文档-4.1 概述

默认管脚,详见esp32文档-4.10 IO_MUX Pad 列表:

UART TX RX RTS CTS
0 1 3 22 19
1 10 9 11 6
2 17 16 7 8

重点关注 TXRX 即可

基本使用

环回测试

使用platformIO新建一个工程,framwork选择arduino即可,如果是参考esp32的开发例程,则需要选择esp32 iot

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <Arduino.h>

// 测试选择的是uart2
void setup()
{
  Serial.begin(9600);
  // 重新把RX、TX映射到GPIO22、23,不映射则使用默认16、17
  Serial2.begin(9600, 134217756U, 22, 23);
}

void loop()
{
  Serial2.write("hello\n");
  if (Serial2.available())
  {
    Serial.println(Serial2.readStringUntil('\n'));
  }
  delay(1000);
}

烧录之后,短接GPIO22、23,就可以看到输出 hello

GPS测试

手头上有一个GPS模块(Goouuu Tech GT-U8),使用uart输出信息,可以测试一下

注意,esp32和GPS模块需要交叉连接,TX-RX,RX-TX

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include <Arduino.h>

void setup()
{
  Serial.begin(9600);
  Serial2.begin(9600);
}

void loop()
{
  if (Serial2.available())
  {
    Serial.println(Serial2.readStringUntil('\n'));
    Serial.println("++++++++++++++++");
  }
}

这个GPS模块波特率9600

搜星可能需要稍等一会,成功之后,可以看到GPS模块输出的信息,信息内容具体可以参考这篇博客GPS NMEA-0183 标准