基于stm32单片机的电子密码锁,AS608指纹识别,ESP8266WIFI远程控制,数字密码解锁,多次错误锁定,管理员权限,OLED显示界面,完整工程代码,如视频展示完美运行,注意是代码和APP,代码和APP,代码和APP

先上个实物图镇楼(假装这里有张OLED显示指纹验证的动态图)。这个电子密码锁项目折腾了我整整俩礼拜,从指纹模块的玄学报错到WIFI突然掉线,头发都薅掉了一把。不过最终效果确实够顶——指纹、密码、远程开锁三合一,管理员还能随时查日志。

基于stm32单片机的电子密码锁,AS608指纹识别,ESP8266WIFI远程控制,数字密码解锁,多次错误锁定,管理员权限,OLED显示界面,完整工程代码,如视频展示完美运行,注意是代码和APP,代码和APP,代码和APP

指纹模块的坑是真多。AS608这玩意儿每次上电都得先发一波握手协议,代码里得这么玩:

//指纹传感器初始化
void AS608_Init() {
    uint8_t buffer[32];
    AS608_SendCmd(0xEF01FFFF, 0x01); //握手包
    if(AS608_RecvData(buffer) != 0) {
        OLED_ShowString(0,0,"Finger OK");
    } else {
        BEEP_Error(); //死亡蜂鸣器警告
    }
}

重点是这个0xEF01FFFF的魔数,当初没看手册直接抄网上例程,结果卡了三天才发现第四字节必须用FF。验证指纹的时候更刺激,得先扫指纹生成特征码,再跟flash里的模板对比:

uint8_t verify_finger() {
    AS608_SendCmd(0x01, 0x1C); //生成指纹特征码
    HAL_Delay(100); //等老爷爷慢慢扫描
    if(AS608_Match() > 0) { //匹配成功返回匹配序号
        Unlock_Door();
        return ADMIN_LEVEL; //默认指纹都是管理员
    }
    return 0;
}

WIFI部分用ESP8266搞的AT指令透传,注意一定要开硬件流控!血的教训——有次测试时没接CTS脚,结果数据量大直接丢包导致门锁自己抽风似的开关。远程控制协议我用了最土的JSON格式:

//APP发送的指令示例
void handle_wifi_msg(char* json) {
    if(strstr(json, "\"cmd\":\"unlock\"")) {
        if(check_remote_auth(json)) { //校验APP端的token
            Unlock_Door();
        }
    }
    //...其他指令处理
}

密码逻辑最要命的是防暴力破解。我做了个错误计数器,连续错三次就锁定30秒,并且记录到EEPROM里:

uint8_t pwd_errors = 0;
void check_password() {
    if(compare_input_pwd()) {
        pwd_errors = 0;
        Unlock_Door();
    } else {
        if(++pwd_errors >= 3) {
            Lock_System(30); //锁定30秒
            log_security_event(); //记到安全日志
        }
    }
}

管理员权限切换有个骚操作——长按#号键输入特定密码可以进入超级用户模式,这时候能删改普通用户权限。OLED菜单用了状态机来实现,比一堆if else优雅多了:

enum MenuState {MAIN, SETTING, LOGS};
void menu_handler() {
    switch(current_state) {
        case MAIN:
            if(btn_ok) enter_setting();
            break;
        case SETTING:
            if(btn_back) current_state = MAIN;
            //...其他处理
    }
}

APP端用MIT App Inventor撸的,虽然丑但能用。关键是要处理三种解锁方式的反馈,特别是指纹验证需要等2秒左右。有个小技巧是在发送指令后启动超时计时器,防止网络不好一直转圈。

源码已经扔GitHub了(假装有链接),下个楼发演示视频。下次打算加个人脸识别模块,不过估计又得掉一波头发...(完)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐