You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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中的密码
  • 设备重启后授权状态自动重置,每次重新连接都需要重新输入密码

使用步骤

  1. 烧录代码后,手机端打开BLE串口调试工具,搜索名为ESP32_BLE_Control的设备并连接
  2. 先发送预设的6位密码(默认123456),收到Authorization success提示即为校验通过
  3. 发送字符0打开LED,发送字符1关闭LED

内容的提问来源于stack exchange,提问作者Watson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 06:54:01