问答

汇集网友智慧,解决技术难题

21ic问答首页 - 求助ESP32蓝牙

LED 手机 蓝牙 调试 串口调试 发送

求助ESP32蓝牙

Jzynhx2025-10-22

想用手机控制LED二极管亮灭。用ESP32wroom32,手机蓝牙连上了芯片,蓝牙串口调试助手上也连上了,但手机上发送ON或OFF,led始终亮



回答 +关注 1
330人浏览 5人回答问题 分享 举报
5 个回答
  • 有想法
  • 你可以加我,我帮你问问启明云端
  • 打错了,是手机可以和esp配对但蓝牙连接不上

  • 代码如上,图片好像看不到
    1. // 引入ESP32蓝牙串口库
    2. #include <BluetoothSerial.h>

    3. // 定义LED引脚(默认使用ESP32板载LED,引脚为GPIO2,低电平点亮)
    4. #define LED_PIN 2

    5. // 创建蓝牙串口对象
    6. BluetoothSerial SerialBT;

    7. // 存储手机发送的指令(初始化为空字符串)
    8. String receivedData = "";

    9. void setup() {
    10.   // 1. 初始化串口(用于VSCode串口监视器调试,波特率115200)
    11.   Serial.begin(115200);
    12.   // 等待串口监视器连接(仅调试用,可不加)
    13.   while (!Serial) {
    14.     delay(100);
    15.   }

    16.   // 2. 初始化LED引脚为输出模式
    17.   pinMode(LED_PIN, OUTPUT);
    18.   // 初始状态:LED熄灭(GPIO2高电平,因板载LED为共阳设计)
    19.   digitalWrite(LED_PIN, HIGH);

    20.   // 3. 初始化蓝牙(设备名称为“ESP32_LED_Control”,手机搜索时可见)
    21.   SerialBT.begin("ESP32_LED_Control");
    22.   // 打印蓝牙初始化结果(串口监视器查看)
    23.   Serial.println("蓝牙已开启,可在手机搜索并连接:ESP32_LED_Control");
    24.   Serial.println("连接后发送 'ON' 点亮LED,发送 'OFF' 熄灭LED");
    25. }

    26. void loop() {
    27.   // 4. 检查是否有蓝牙数据从手机发送过来
    28.   if (SerialBT.available() > 0) {
    29.     // 读取1字节数据(支持多字符指令,如“ON”“OFF”)
    30.     char c = SerialBT.read();
    31.    
    32.     // 若读取到换行符(手机APP发送时需勾选“发送新行”),说明指令完整
    33.     if (c == '\n') {
    34.       // 打印接收到的指令(调试用)
    35.       Serial.print("接收到指令:");
    36.       Serial.println(receivedData);

    37.       // 5. 解析指令并控制LED
    38.       if (receivedData.equalsIgnoreCase("ON")) {  // 忽略大小写,支持“on”“On”
    39.         digitalWrite(LED_PIN, LOW);  // 点亮LED(GPIO2低电平)
    40.         SerialBT.println("LED已点亮");  // 向手机回传状态
    41.         Serial.println("LED已点亮");     // 向串口监视器回传状态
    42.       }
    43.       else if (receivedData.equalsIgnoreCase("OFF")) {
    44.         digitalWrite(LED_PIN, HIGH);  // 熄灭LED(GPIO2高电平)
    45.         SerialBT.println("LED已熄灭");  // 向手机回传状态
    46.         Serial.println("LED已熄灭");     // 向串口监视器回传状态
    47.       }
    48.       else {
    49.         // 指令无效时,向手机提示正确格式
    50.         SerialBT.println("指令无效!请发送 'ON' 或 'OFF'");
    51.         Serial.println("指令无效!请发送 'ON' 或 'OFF'");
    52.       }

    53.       // 清空指令缓存,准备接收下一条指令
    54.       receivedData = "";
    55.     }
    56.     else {
    57.       // 未读到换行符时,将字符追加到指令缓存中
    58.       receivedData += c;
    59.     }
    60.   }

    61.   // 主循环空闲,可添加其他逻辑(如LED闪烁检测)
    62.   delay(10);
    63. }

您需要登录后才可以回复 登录 | 注册