简介
欢迎来到另一篇 Velxio 教程!今天我们将为 Raspberry Pi Pico (RP2040) 构建一个串口回显测试。这个项目非常适合想要了解微控制器上串行通信工作原理的初学者。你将学习如何通过 UART 发送和接收数据、使用 LED 添加视觉指示器,以及实现一个简单的心跳定时器。

电路讲解
这个电路非常简单。我们只需要两个元件:
- Raspberry Pi Pico(大脑)
- 黄色 LED(串口活动的视觉指示器)
接线
- 将黄色 LED 的阳极 (A) 连接到 Pico 的 TX 引脚。TX 引脚用于串行传输,因此每次 Pico 发送数据时,LED 都会闪烁。
- 将 LED 的阴极 (C) 连接到 GND(Pico 上的任意接地引脚)。
就这样!LED 与 TX 线串联,因此当 Pico 传输数据时它会亮起。这为你提供了串行数据流动的视觉确认。

代码讲解
让我们深入代码。打开 Velxio 编辑器,你会看到以下草图:
// Raspberry Pi Pico — Serial Echo Test
// Echoes received characters and prints a heartbeat every 2 seconds
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("=== Pico Serial Echo ===");
Serial.println("Type something and press Enter.");
Serial.println();
}
unsigned long lastHeartbeat = 0;
void loop() {
// Echo any incoming characters
while (Serial.available()) {
char c = Serial.read();
Serial.print("Echo: ");
Serial.println(c);
}
// Heartbeat every 2 seconds
if (millis() - lastHeartbeat >= 2000) {
lastHeartbeat = millis();
Serial.print("[Heartbeat] Uptime: ");
Serial.print(millis() / 1000);
Serial.println("s");
}
}
工作原理
setup():以 115200 波特率初始化串行通信。短暂延迟后,打印一条欢迎消息。loop():两个主要任务:- 回显:检查串口是否有可用数据。如果有,则读取一个字符,并以 “Echo:” 前缀将其打印回来。
- 心跳:每 2000 毫秒(2 秒)打印一条心跳消息,显示系统运行时间(以秒为单位)。
lastHeartbeat 变量跟踪上次打印心跳的时间,使用 millis() 实现非阻塞定时。
关键概念
串行通信 (UART)
UART(通用异步收发器)是一种简单的串行协议。Pico 的 TX 引脚发送数据,RX 引脚接收数据。在此示例中,我们仅使用 TX 进行输出,但回显功能也使用了 RX(通过串行监视器)。
使用 millis() 的非阻塞定时
我们使用 millis() 检查经过的时间,而不是使用会暂停整个程序的 delay()。这样,回显循环可以持续运行,同时仍能按固定间隔打印心跳。
LED 作为视觉指示器
通过将 LED 连接到 TX 引脚,我们可以实时看到串行活动。每次 Pico 发送一个字符时,LED 都会短暂闪烁。
常见陷阱与调试技巧
- 波特率不匹配:确保串行监视器设置为 115200 波特率。如果看到乱码字符,请检查波特率。
- LED 不闪烁:检查 LED 极性(阳极接 TX,阴极接 GND)。同时确认 Pico 确实在传输数据(例如,在串行监视器中输入一些内容)。
- 无回显:确保你正在向 Pico 的 RX 引脚发送数据。在 Velxio 中,串行监视器会自动处理此操作。
- 心跳不打印:检查
lastHeartbeat是否声明为unsigned long类型,并且比较逻辑是否正确。

建议的扩展
在基本回显功能正常工作后,尝试以下增强:
- 添加 RX LED:将另一个 LED 连接到 RX 引脚,以显示何时接收到数据。
- 命令解析:不只是回显,而是解释诸如 “LED ON” 或 “LED OFF” 之类的命令,以控制外部 LED。
- 多波特率:允许用户通过串行命令更改波特率。
- 日志到控制台:将接收到的数据存储在缓冲区中,并在请求时打印出来。

行动号召
准备好亲自尝试了吗?在 Velxio 上打开实时示例并开始实验:Pico Serial Echo on Velxio。你可以修改代码、更改 LED 颜色或添加新组件。祝你编程愉快!