本人是初学者,非常愿意与大家交流。
想象一下,UART 和 USB 就像两种不同的“对话方式”:
| 特性 | UART(老式对讲机) | USB(智能电话) |
|---|---|---|
| 通信方式 | 两根线直接聊天(TX发,RX收) | 四根线智能对话(D+/D-数据线+电源+地线) |
| 速度 | 慢速(常见9600-115200比特/秒) | 极快(USB2.0可达480M比特/秒) |
| 协议复杂度 | 简单(只需约定语速“波特率”) | 复杂(需遵守严格通信规则,自动协商) |
| 连接对象 | 一对一聊天 | 一对多聊天(支持Hub扩展) |
| 供电能力 | 不供电(纯数据) | 可供电(5V/500mA) |
| 典型场景 | 单片机与传感器、模块间通信 | 电脑与外设(鼠标、U盘、开发板)连接 |
ESP32 的 Arduino 示例(UART 和 USB 联合作战)
场景描述
用 ESP32 同时演示 UART 和 USB 的功能:
-
USB 接收电脑发送的消息
-
UART 将消息转发给另一个设备(这里模拟自发自收)
-
UART 收到消息后通过 USB 回传给电脑
引脚说明(UART 自发自收测试)
ESP32 引脚说明:
UART1:TX = GPIO12, RX = GPIO13
用杜邦线短接 GPIO12 和 GPIO13(让UART1自己发给自己)
代码实现
#include <HardwareSerial.h>
// 初始化硬件串口 UART1(使用GPIO12/13)
HardwareSerial MySerial(1);
void setup() {
// USB串口(用于和电脑通信)
Serial.begin(115200);
// UART1初始化(波特率115200)
MySerial.begin(115200, SERIAL_8N1, 13, 12); // RX=13, TX=12
Serial.println("=== UART vs USB 演示 ===");
Serial.println("输入任意字符,ESP32将通过UART转发并回显!");
}
void loop() {
// 从USB(电脑)读取数据 → 通过UART1发送
if (Serial.available()) {
char usbData = Serial.read();
MySerial.write(usbData); // 通过UART1发送
Serial.print("[USB→UART] 发送: ");
Serial.println(usbData);
}
// 从UART1读取数据 → 通过USB发回电脑
if (MySerial.available()) {
char uartData = MySerial.read();
Serial.print("[UART→USB] 收到: ");
Serial.println(uartData);
}
}
操作步骤
-
用 USB线 连接 ESP32 和电脑
-
用杜邦线 短接 GPIO12 和 GPIO13(模拟另一个UART设备)
-
打开 Arduino 串口监视器(波特率115200)
-
发送字母
A→ 将看到:[USB→UART] 发送: A [UART→USB] 收到: A
结论
-
USB 的便利性:
ESP32 通过 USB 与电脑高速通信(Serial对象),无需额外转换芯片。 -
UART 的灵活性:
用HardwareSerial可创建多组UART(ESP32有3组),连接GPS、传感器等模块。 -
协同工作:
USB 负责“人机交互”,UART 负责“设备间通信”,二者在物联网项目中缺一不可!
💡 趣味类比:
USB 像顺丰快递(高速可靠,直达电脑)
UART 像小区快递柜(短距离传输,连接本地设备)
ESP32 则是聪明的快递站长,协调两者高效运作!
UART与USB的区别及应用
1万+

被折叠的 条评论
为什么被折叠?



