- // 引入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);
- }
|