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

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)等。
————————————————
版权声明:本文为CSDN博主「Naisu_kun」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Naisu_kun/article/details/86004049

  • 12
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您介绍如何使用 ArduinoESP32 来控制 LED 并通过 MQTT 协议实现远程控制。 在开始之前,您需要准备以下材料: - Arduino UNO 板子 - ESP32 板子 - LED 灯 - 杜邦线若干 - 电阻 接下来,我们将分以下几个步骤进行操作: 1. 硬件连接 将 ESP32Arduino UNO 连接起来,可以通过以下方式实现: - 将 ESP32 的 GND 引脚接到 Arduino UNO 的 GND 引脚上。 - 将 ESP32 的 3.3V 引脚接到 Arduino UNO 的 3.3V 引脚上。 - 将 ESP32 的 RX 引脚接到 Arduino UNO 的 TX 引脚上。 - 将 ESP32 的 TX 引脚接到 Arduino UNO 的 RX 引脚上。 在连接完成后,将电阻与 LED 并联连接,将电阻的一端连接到 ESP32 的引脚上,将 LED 的正极连接到电阻的另一端,将 LED 的负极连接到 ESP32 的 GND 引脚上。 2. MQTT 的安装 在 Arduino IDE 中,点击“工具”栏,选择“管理”,搜索 MQTT 并安装。 3. 编写代码 接下来,我们要编写代码,将其上传到 ESP32 板子中。以下是代码实现的具体步骤: - 在代码开头引入所需的,包括 WiFiClient、PubSubClient 和 WiFi。 - 设置 WiFi 的 SSID 和密码。 - 设置 MQTT 服务器的地址,端口和主题。 - 在 setup() 函数中,连接 WiFi 和 MQTT 服务器。 - 在 loop() 函数中,通过 MQTT 接收控制信息并控制 LED 灯。 以下是完整的代码: ``` #include <WiFi.h> #include <PubSubClient.h> // Replace with your network credentials const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // Replace with your MQTT Broker IP address const char* mqtt_server = "your_MQTT_BROKER_IP"; const int mqtt_port = 1883; const char* topic = "led_control"; WiFiClient espClient; PubSubClient client(espClient); void setup() { Serial.begin(115200); delay(100); // Connect to Wi-Fi network with SSID and password Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); client.setServer(mqtt_server, mqtt_port); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived in topic: "); Serial.println(topic); String message = ""; for (int i = 0; i < length; i++) { message += (char)payload[i]; } Serial.println("Message received: " + message); if (message == "on") { digitalWrite(LED_BUILTIN, HIGH); } else if (message == "off") { digitalWrite(LED_BUILTIN, LOW); } } void reconnect() { while (!client.connected()) { Serial.print("Connecting to MQTT..."); if (client.connect("ESP32Client")) { Serial.println("connected"); client.subscribe(topic); } else { Serial.print("failed with state "); Serial.print(client.state()); delay(2000); } } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); } ``` 4. 测试 将 ESP32 板子连接到电脑并上传代码后,打开串口监视器。如果一切正常,您应该能够看到 ESP32 成功连接到 WiFi 和 MQTT 服务器,并等待接收 LED 控制信息。 接下来,可以使用任何 MQTT 客户端向主题“led_control”发送“on”或“off”消息来控制 LED 灯的开关状态。 以上就是使用 ArduinoESP32 来控制 LED 并通过 MQTT 协议实现远程控制的实验步骤,希望对您有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值