以下是优化后的代码,增加了注释、错误处理和更规范的代码结构:
#include <Blinker.h>
// 硬件配置
#define BLINKER_BLE // 使用BLE蓝牙模式
const int LED_PIN = GPIO_NUM_2; // LED控制引脚(根据实际硬件调整)
const char* DEVICE_NAME = "MyBLE"; // 蓝牙设备显示名称
// Blinker组件定义
BlinkerButton btnLed("btn-led"); // 对应APP上的按钮组件
// 回调函数:处理LED开关指令
void ledControlCallback(const String &state)
{
if (state == BLINKER_CMD_ON) {
digitalWrite(LED_PIN, HIGH);
Blinker.print("LED_ON"); // 反馈状态到APP
Serial.println("[INFO] LED turned ON");
}
else if (state == BLINKER_CMD_OFF) {
digitalWrite(LED_PIN, LOW);
Blinker.print("LED_OFF");
Serial.println("[INFO] LED turned OFF");
}
}
void setup()
{
// 初始化串口通信
Serial.begin(115200);
while (!Serial); // 等待串口就绪
// 初始化硬件
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); // 默认关闭LED
// 初始化Blinker
if (!Blinker.begin(BLINKER_BLE, DEVICE_NAME)) {
Serial.println("[ERROR] Blinker init failed!");
while(1); // 初始化失败时阻塞
}
// APP界面配置(可选)
Blinker.wInit("LED Controller", "switch");
// 注册回调函数
btnLed.attach(ledControlCallback);
Serial.println("[INFO] System initialized");
}
void loop()
{
Blinker.run(); // 保持蓝牙连接和处理数据
// 这里可以添加其他非阻塞任务
}
主要改进点:
- 命名规范:使用全大写表示常量(如
LED_PIN
) - 错误处理:增加蓝牙初始化的失败检测
- 调试信息:通过串口输出更多状态信息方便调试
- 代码结构:
- 分离硬件配置和逻辑代码
- 更清晰的注释分段
- 可扩展性:在loop()中预留了添加其他任务的接口
注意:
DEVICE_NAME
需要替换为你想要的蓝牙设备名称(不超过16个字符)- GPIO_NUM_2是ESP32的引脚定义,其他平台需相应调整
内容由零声教学AI助手提供,问题来源于学员提问