一、准备工具
1、安装好platformio扩展的vscode
2、Esp32S3开发板(我这里用的是M5stack的CoreS3 SE)
二、软件部分
串口函数介绍
首先在ESP32有提供了三个UART,分别是UART0,UART1,UART2,分别对应了arduino库里的Serial,Serial1,Serial2。
Serial.begin(unsigned long baud)
串口的初始化函数,参数填所使用的波特率,常用115200。
void uart_init()
{
Serial.begin(115200);
}
Serial.write(const char *buffer, size_t size)
串口的写函数,第一个参数是写入的数据内容,第二个是数据内容的长度,我这里为了方便阅读代码,另外做了函数封装
void uart_send(const char *str)
{
Serial.write(str,strlen(str));
}
Serial.read(uint8_t *buffer, size_t size)
串口的读函数,用来读取缓冲区的数据
Serial.available()
用来判断串口接收缓冲区是否有可读数据,返回值是缓冲区数据的长度
Serial.printf()
串口打印函数,arduino库提供了三种串口打印函数,有Serial.print、Serial.printf、Serial.println
三者的区别如下:
Serial.print | 打印字符串(无自动换行) |
---|---|
Serial.println | 打印字符串(自动换行) |
Serial.printf | 打印格式化字符串 |
这里常用到的是Serial.printf();
实验代码
const char str[] = {"hello world!\r\n"};
void uart_init()
{
Serial.begin(115200);
}
void uart_send(const char *str)
{
Serial.write(str,strlen(str));
}
void uart_transparent()
{
if(Serial.available()>0)
{
u_char str[] = {0};
u_char len = Serial.available();
Serial.printf("Len: %d\r\n",len);
Serial.read(str,len);
Serial.write(str,len);
}
}
void setup() {
uart_init();
}
void loop() {
uart_send(str);
delay(500);
uart_transparent();
}
以上代码实现了循环输出helloworld的字符串的同时,能够在串口接收到数据后转发出串口,具体效果如下截图