使用Arduino开发ESP32:串口(Serial port) HardwareSerial库使用说明

本文详细介绍了ESP32中HardwareSerial库的使用方法,包括如何声明对象、配置串口参数、设置波特率以及使用各种串口操作方法。此外,还提供了串口资源管理和调试信息设置的相关说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HardwareSerial库使用
使用演示

上图中通过HardwareSerial库实现了对串口1的使用,具体说明见下文。

详细说明
使用HardwareSerial库需要先声明一个对象,例如上文图中的HardwareSerial mySerial1(1);;
HardwareSerial类在声明对象时接收一个输入参数(0、1、2),分别代表Serial、Serial1、Serial2;
声明对象后就可以按一般串口的方法使用了,方法说明如下:

void begin(unsigned long baud, uint32_t config=SERIAL_8N1, int8_t rxPin=-1, int8_t txPin=-1, bool invert=false, unsigned long timeout_ms = 20000UL);
使能串口,参数如下:
baud:串口波特率,该值写0则会进入自动侦测波特率程序;
config:串口参数,默认SERIAL_8N1为8位数据位、无校验、1位停止位;
rxPin:接收管脚针脚号;
txPin:发送管脚针脚号;
invert:翻转逻辑电平,串口默认高电平为1、低电平为0;
timeout_ms:自动侦测波特率超时时间,如果超过该时间还未获得波特率就不会使能串口;

void end();
失能串口,释放资源;

void updateBaudRate(unsigned long baud);
重新设置波特率;

int available(void);
返回接收缓存可读取字节数;

int availableForWrite(void);
ESP32默认有128字节的硬件TX FIFO,该方法返回TX FIFO空闲字节数;

int peek(void);
返回接收缓存中第一个字节数据,但并不从中删除它;

int read(void);
返回接收缓存中第一个字节数据,读取过的数据将从接收缓存中清除;

void flush(void);
等待串口收发完毕;

size_t write(uint8_t);
写数据到TX FIFO,在发送FIFO中的数据会自动输出到TX端口上;
该方法有很多重载,可以用来发送字符串、长整型、整形;
如果TX FIFO已满,则该方法将阻塞;

size_t write(const uint8_t *buffer, size_t size);
写数据到TX FIFO,如果发送FIFO已满,则该方法将阻塞;

uint32_t baudRate();
返回当前串口波特率;

size_t setRxBufferSize(size_t);
设置接收缓存大小(默认为256字节);
ESP32默认有128字节的硬件RX FIFO,在RX FIFO收到数据后会移送到上面的接收缓存中;

void setDebugOutput(bool);
设置该串口打印Debug信息(默认为0,失能后也会置为0);这个方法是用来设置从哪个串口打印的,需要在Arduino IDE>工具中启用Debug才会真正打印信息;(这里有一点点问题,这个库里如果没有别的串口用于打印调试信息,则Serial,即uart0一定会被用于打印调试信息,并且至少会打印Error信息)


除上面方法外,因为继承自Stream类所以也可以用该类的方法:如size_t readBytes(char *buffer, size_t length);和size_t readBytes(uint8_t *buffer, size_t length)等。
————————————————
版权声明:本文为优快云博主「Naisu_kun」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/Naisu_kun/article/details/86004049

### ArduinoESP32之间通过串口进行通讯的方法 #### 方法概述 ArduinoESP32之间的串口通信可以通过硬件连接和软件编程两部分实现。硬件上,需将两者的数据发送引脚(TX)与接收引脚(RX)交叉相连;即Arduino的TX接至ESP32的RX,反之亦然。此外还需确保共地(GND)。在软件方面,则是在各自的程序中设置相同的波特率以及配置相应的串行对象用于数据交换。 对于ESP32而言,其支持多个逻辑上的串行接口,如`Serial`, `Serial1`等[^1]。而标准版Arduino Uno通常只提供了一个默认的`Serial`实例用来处理USB转TTL芯片模拟出来的UART接口。当涉及到板间通信时,可能还需要额外安装特定版本的驱动以便电脑识别并调试电路中的节点状态。 #### 示例代码展示 ##### ESP32端代码片段 ```cpp // 导入必要的文件 #include <Arduino.h> void setup() { Serial.begin(9600); // 初始化串行通信, 设置波特率为9600 bps } void loop() { if (Serial.available()) { // 如果有来自其他设备的信息可用 String receivedData = Serial.readString(); // 读取全部收到的内容作为一个字符串 Serial.println("Received from Arduino: " + receivedData); delay(500); // 向另一个设备回传消息 Serial.print("Echo back to Arduino:"); Serial.println(receivedData); } } ``` ##### Arduino端代码片段 ```cpp const int ledPin = LED_BUILTIN; void setup(){ pinMode(ledPin, OUTPUT); while (!Serial){ ; // wait for serial port to connect. Needed for native USB port only } Serial.begin(9600); // 初始化串行通信, 设置波特率为9600 bps } void loop(){ static unsigned long lastSendTime; const char* messageToSend = "Hello ESP32!"; if(millis()-lastSendTime>2000){ // 每隔2秒向ESP32发送一次问候语句 Serial.println(messageToSend); lastSendTime=millis(); } if(Serial.available()){ String responseFromEsp32 = Serial.readStringUntil('\n'); // 接收直到遇到换行符'\n' digitalWrite(ledPin,!digitalRead(ledPin)); // 收到回应后切换LED灯的状态 Serial.print("Response from ESP32: "); Serial.println(responseFromEsp32); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值