level 5
// 引入ESP32蓝牙串口库
#include <BluetoothSerial.h>
// 定义LED引脚(默认使用ESP32板载LED,引脚为GPIO2,低电平点亮)
#define LED_PIN 2
// 创建蓝牙串口对象
BluetoothSerial SerialBT;
// 存储手机发送的指令(初始化为空字符串)
String receivedData = "";
void setup() {
// 1. 初始化串口(用于VSCode串口监视器调试,波特率115200)
Serial.begin(115200);
// 等待串口监视器连接(仅调试用,可不加)
while (!Serial) {
delay(100);
}
// 2. 初始化LED引脚为输出模式
pinMode(LED_PIN, OUTPUT);
// 初始状态:LED熄灭(GPIO2高电平,因板载LED为共阳设计)
digitalWrite(LED_PIN, HIGH);
// 3. 初始化蓝牙(设备名称为“ESP32_LED_Control”,手机搜索时可见)
SerialBT.begin("ESP32_LED_Control");
// 打印蓝牙初始化结果(串口监视器查看)
Serial.println("蓝牙已开启,可在手机搜索并连接:ESP32_LED_Control");
Serial.println("连接后发送 'ON' 点亮LED,发送 'OFF' 熄灭LED");
}
void loop() {
// 4. 检查是否有蓝牙数据从手机发送过来
if (SerialBT.available() > 0) {
// 读取1字节数据(支持多字符指令,如“ON”“OFF”)
char c = SerialBT.read();
// 若读取到换行符(手机APP发送时需勾选“发送新行”),说明指令完整
if (c == '\n') {
// 打印接收到的指令(调试用)
Serial.print("接收到指令:");
Serial.println(receivedData);
// 5. 解析指令并控制LED
if (receivedData.equalsIgnoreCase("ON")) { // 忽略大小写,支持“on”“On”
digitalWrite(LED_PIN, LOW); // 点亮LED(GPIO2低电平)
SerialBT.println("LED已点亮"); // 向手机回传状态
Serial.println("LED已点亮"); // 向串口监视器回传状态
}
else if (receivedData.equalsIgnoreCase("OFF")) {
digitalWrite(LED_PIN, HIGH); // 熄灭LED(GPIO2高电平)
SerialBT.println("LED已熄灭"); // 向手机回传状态
Serial.println("LED已熄灭"); // 向串口监视器回传状态
}
else {
// 指令无效时,向手机提示正确格式
SerialBT.println("指令无效!请发送 'ON' 或 'OFF'");
Serial.println("指令无效!请发送 'ON' 或 'OFF'");
}
// 清空指令缓存,准备接收下一条指令
receivedData = "";
}
else {
// 未读到换行符时,将字符追加到指令缓存中
receivedData += c;
}
}
// 主循环空闲,可添加其他逻辑(如LED闪烁检测)
delay(10);
}
2025年10月22日 07点10分
