ESP32安全BLE连接搭建:如何设置密码校验实现LED控制功能
ESP32 BLE连接密码校验实现方案
实现逻辑说明
- 采用数组形式存储预设密码,可选择写入EEPROM实现免刷固件修改密码
- 新增全局授权状态标记,默认未授权状态下仅响应密码校验请求,不响应LED控制指令
- 手机端首次连接后需先发送密码串,校验通过后系统开放LED操作权限
完整适配代码
// 引入依赖库 #include <BluetoothSerial.h> #include <EEPROM.h> // 硬件引脚定义 const byte led_gpio = 32; const int LED_BUILTIN = 2; // 密码相关配置 #define PWD_LENGTH 6 // 密码长度,可自行修改 const char CORRECT_PWD[PWD_LENGTH] = {'1','2','3','4','5','6'}; // 密码数组,可自定义 #define EEPROM_PWD_ADDR 0 // EEPROM存储密码的起始地址 char inputPwdBuffer[PWD_LENGTH] = {0}; // 接收输入密码的缓冲区 int pwdInputIndex = 0; bool isAuthenticated = false; // 授权状态标记 BluetoothSerial ESP_BT; char incoming; void setup() { Serial.begin(115200); // 初始化EEPROM,用于存储密码 EEPROM.begin(512); // 若需要从EEPROM读取密码替代预设密码,可取消注释以下代码 /* for(int i=0; i<PWD_LENGTH; i++){ CORRECT_PWD[i] = EEPROM.read(EEPROM_PWD_ADDR + i); } */ // 初始化GPIO pinMode(led_gpio, OUTPUT); pinMode(LED_BUILTIN, OUTPUT); // 初始化BLE串口,设备名可自定义 ESP_BT.begin("ESP32_BLE_Control"); } void loop() { if (ESP_BT.available()) { incoming = ESP_BT.read(); // 未授权状态下走密码校验逻辑 if(!isAuthenticated){ if(pwdInputIndex < PWD_LENGTH){ inputPwdBuffer[pwdInputIndex] = incoming; pwdInputIndex++; } // 密码接收完成,开始校验 if(pwdInputIndex == PWD_LENGTH){ bool pwdCorrect = true; for(int i=0; i<PWD_LENGTH; i++){ if(inputPwdBuffer[i] != CORRECT_PWD[i]){ pwdCorrect = false; break; } } if(pwdCorrect){ isAuthenticated = true; ESP_BT.println("Authorization success"); Serial.println("User authenticated"); }else{ ESP_BT.println("Wrong password, please try again"); Serial.println("Wrong password input"); // 清空缓冲区重置输入计数 pwdInputIndex = 0; memset(inputPwdBuffer, 0, PWD_LENGTH); } } }else{ // 已授权状态下走LED控制逻辑 Serial.print("Received:"); Serial.println(incoming); if (incoming == 48) { digitalWrite(LED_BUILTIN, HIGH); digitalWrite(led_gpio, HIGH); ESP_BT.println("LED turned ON"); } if (incoming == 49) { digitalWrite(LED_BUILTIN, LOW); digitalWrite(led_gpio, LOW); ESP_BT.println("LED turned OFF"); } } } delay(20); }
关键配置说明
- 修改
CORRECT_PWD数组即可自定义密码,同步修改PWD_LENGTH宏定义匹配密码长度 - 如需后续可动态修改密码不重刷固件,可新增密码修改指令逻辑,将新密码写入
EEPROM_PWD_ADDR起始的地址即可,下次重启自动读取EEPROM中的密码 - 设备重启后授权状态自动重置,每次重新连接都需要重新输入密码
使用步骤
- 烧录代码后,手机端打开BLE串口调试工具,搜索名为
ESP32_BLE_Control的设备并连接 - 先发送预设的6位密码(默认123456),收到
Authorization success提示即为校验通过 - 发送字符
0打开LED,发送字符1关闭LED
内容的提问来源于stack exchange,提问作者Watson
相关产品推荐
相关产品推荐

