• 正文
  • 相关推荐
申请入驻 产业图谱

30元,嵌入式大神手搓智能指纹门锁!乐鑫ESP32主控,蓝牙配网,人体检测,支持微信小程序

08/08 13:40
1984
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

Screen-Lock智能蓝牙指纹锁基于乐鑫ESP32C3模组构建, 搭载 RISC-V 32 位单核处理器,并使用海凌科ZW101及LD2402模块实现智能屏锁功能,支持人体检测,适用于学习监督,员工统计,信息安全保护。

Screen-Lock智能蓝牙指纹锁采用Espressif ESP32C3模组作为本项目主控,提供WIFI及蓝牙能力;采用Hi-Link ZW101指纹模组,实现指纹解锁输入密码功能;采用Hi-Link LD2402人体雷达,实现人体距离检测功能;采用TP4054充电IC,实现锂电池充电功能;支持3V振动马达,用于提醒,

总体功能清单如下:

蓝牙HID输入

离开工位时自动锁屏

回到工位时指纹解锁

统计工作时长及离开时长

统计休息次数

统计经过时的次数

久坐提醒

用眼距离过近提醒

Web控制中心

?Screen-Lock智能纹锁架构设计

 

主控电路这里选用ESP32C3芯片,借助C3的蓝牙功能通过HID实现锁屏和输入密码,借助C3的WIFI功能通过局域网搭建Web服务实现可视化数据及设备控制中心。C3芯片价格便宜且引脚IO足够。

 

 

指纹模块选用Hi-Link ZW101模块,由于该模块默认串口波特率较低,所以使用软件模拟串口进行通讯,把C3的硬件串口留给LD2402使用,这里还引出了一条T_OUT信号线,这是一条触摸信号线,你可以把他当作触摸按键使用。

 

 

人体检测模块选用HI-Link LD2402人体存在24G毫米波雷达模块,这个模块的串口波特率为115400,比较高,所以这里使用硬件串口通讯,模组带一个输出IO,用于判断是否有人存在,不过这个IO比较多余,可以去除掉,因为串口会实时发送数据告诉人体距离,如果你有扩展需求可以去掉这个IO接其他外设。

 

 

供电电路使用LDO方案,这里选用ME6217C33M5G芯片,尺寸小巧,外围器件较少。

 

充电IC选用TP4054,价格便宜,而且体积小,很适合集成,CHRG这里也引出一条IO,可以反馈电池充电状态。

屏幕选用SSD1306,0.91寸屏,用作信息提示。

 

 

振动马达也是用作提醒功能使用,3.3V使用NMOS通过IO控制,我这里用的AO3400A支持5.7A,可以选便宜点的,马达额定电流只有80mA。

Screen-Lock智能纹锁软件开发

开发环境

软件环境:VSCode+PlatformIO

开发语言:C/C++

依赖库

EspSoftwareSerial:软串口驱动库

Adafruit SSD1306:屏幕驱动库

蓝牙HID驱动

蓝牙HID基于BleKeyboard库修改,原库年久失修,由于安全协议问题会导致最新Windows及Android系统拒绝与其通讯。通过在原库 void BleKeyboard::begin (void) 中添加以下两行解决

pSecurity->setCapability(ESP_IO_CAP_NONE);//安全设置pSecurity->setInitEncryptionKey(ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK);

指纹驱动

指纹库基于Hi-Link提供的例程修改,原例程缺少一些数据位判断及适当延时,导致接收到的数据包未过滤而返回通讯失败。通过对原库receiveResponse()函数改良,添加数据位判断,以及init初始化添加等待延时解决。

boolreceiveResponse(){uint8_t response[64];uint8_t?index?=?0;uint32_t startTime = millis();//?先等待包头 EF?01bool headerFound = false;while?(millis() - startTime <?2000) { ?//?延长等待时间到2秒if?(fingerprintSerial.available()) {uint8_t b = fingerprintSerial.read();if?(!headerFound) {if?(index?==?0?&& b ==?0xEF) {? ? ? ? response[index++] = b;? ? ? } elseif (index?==?1?&& b ==?0x01) {? ? ? ? response[index++] = b;? ? ? ? headerFound = true;? ? ? }?else?{? ? ? ??index?=?0;?//?重新开始找包头? ? ? }? ? }?else?{? ? ? response[index++] = b;if?(index?>=?9) {//?包长度在第7和8字节uint16_t packetLen = ((uint16_t)response[7] <<?8) | response[8];if?(index?>=?9?+ packetLen) {//?收到完整包break;? ? ? ? }? ? ? }? ? }? }}#if defined(HLK_DEBUG)Serial.println("Received response:");printResponse(response,?index);#endif// 简单校验包头和确认码if?(index?>=?12?&& response[0] ==?0xEF?&& response[1] ==?0x01?&& response[9] ==?0x00) {returntrue;}returnfalse;}

固件烧录

首次烧录连接设备时,主控可能会不断重启导致端口不稳定,这时候要先按住BOOT键,然后再按RST键,最后松开BOOT键进入下载模式即可。

如果你通过源码烧录,不需要自己设置分区,platformio会自动按照默认分区表配置分区烧录,你只需要点击烧录箭头即可自动编译,自动查找端口,自动烧录。

 

为了简化烧录,附件中提供的固件是bootloader.bin + partitions.bin + firmware.bin 合并后的固件,所以如果你使用附件提供的合并固件,仅需设置烧录地址为0即可。

如果你通过源码编译,则会在build目录下产生bootloader.bin partitions.bin firmware.bin这三个bin文件,所以在烧录时请按照下图提供的分区地址烧录。

原理图

PCB板

 

 

?Screen-Lock智能纹锁成品??

免责声明:本公众号所发布的内容来源于互联网,我们会尊重并维护原作者的权益。由于信息来源众多,若文章内容出现版权问题,或文中使用的图片、资料、下载链接等,如涉及侵权,请告知我们,我们将尽快处理。

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录