用 ESP8266 和 CH32V003 搭建房间信号灯
将红黄绿信号灯模块连接到 ESP8266 或 CH32V003,实现基本循环:红灯 5 秒、黄灯 1 秒、绿灯 5 秒并闪烁。这个项目展示 GPIO 配置、延时和循环,无需外部库。非常适合嵌入式开发的入门实践。
ESP8266 使用 GPIO 13(红)、12(黄)、14(绿)。CH32V003 使用 PC5、PC6、PC7 端口。代码精简,模拟真实信号灯的过渡准备。
ESP8266 的 GPIO 配置
定义引脚并设置为输出模式。使用限流电阻保护 LED。
const byte redLedPin = 14;
const byte yellowLedPin = 12;
const byte greenLedPin = 13;
void setup() {
pinMode(redLedPin, OUTPUT);
pinMode(yellowLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
}
在 loop() 中运行以下序列:
- 红灯高电平 5000 毫秒。
- 黄灯高电平 1000 毫秒,然后两者低电平。
- 绿灯高电平 5000 毫秒。
- 三次闪烁循环:高电平 500 毫秒,低电平 500 毫秒。
- 黄灯高电平 1000 毫秒,然后低电平。
void loop() {
// 红灯
digitalWrite(redLedPin, HIGH);
delay(5000);
// 黄灯
digitalWrite(yellowLedPin, HIGH);
delay(1000);
digitalWrite(redLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
// 绿灯
digitalWrite(greenLedPin, HIGH);
delay(5000);
for (byte i = 0; i < 3; i++) {
digitalWrite(greenLedPin, HIGH);
delay(500);
digitalWrite(greenLedPin, LOW);
delay(500);
}
// 黄灯
digitalWrite(yellowLedPin, HIGH);
delay(1000);
digitalWrite(yellowLedPin, LOW);
}
通过 USB 连接,使用 CH340 驱动和 Arduino IDE(安装 ESP8266 板包)。正常烧录即可。
切换到 CH32V003
一款紧凑的 RISC-V 微控制器,适合低功耗任务。需要 WCH LinkE 编程器:板子 USB 供电,SWD 烧录。将信号灯连接到 PC5(红)、PC6(黄)、PC7(绿)。
/* 全局定义 */
#define RED_LED_PIN GPIO_Pin_5
#define YELLOW_LED_PIN GPIO_Pin_6
#define GREEN_LED_PIN GPIO_Pin_7
逻辑保持一致:用 delay_ms 替换 delay,用 GPIO_WriteBit。初始化:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitTypeDef配置为输出推挽模式。
loop() 适配 WCH SDK:使用定时器实现状态序列。完整代码使用标准 CH32V003FUN 函数,减少依赖。
平台对比
| 参数 | ESP8266 | CH32V003 |
|----------|-------------|-------------|
| 核心 | Tensilica L106 | RISC-V2A |
| 引脚 | GPIO12-14 | PC5-7 |
| 供电 | USB | USB + 编程器 |
| 烧录 | Arduino IDE | WCH LinkE + IDE |
| 价格 | 中等 | 低 |
ESP8266 因 USB 和 Arduino 生态更适合新手。CH32V003 节省资源,但需编程器。
主要优势:
- 代码极简,无需库。
- 易于调整时序。
- 可扩展到按钮或传感器。
关键提示
- GPIO 接线: 始终使用 220–330 欧姆电阻限流。
- 时序:
delay()会阻塞 CPU;进阶项目用millis()或定时器。 - 调试: 通过串口监控状态日志。
- 端口: CH32V003 初次使用坚持 PCx 端口——暂不涉及 PWM。
- 扩展: 用有限状态机(FSM)替换线性循环管理状态。
这个项目易于复制:拿个红黄绿模块,面包板上搞定。完美展示嵌入式编程基础。
— Editorial Team
暂无评论。