|
本帖最后由 Maniac_FC 于 2022-10-1 23:08 编辑
简介:使用wifiduino、指纹模块、点灯App实现一个远程打卡功能。打卡人员通过上位机给指纹模块录入指纹并编号,此过程需要USB转串口工具,如果不用上位机也可以,但需要自己在Aduino ide里编写生成指纹特征、录入指纹图像、合并指纹特征、存入指纹模板等函数,这些指令码可以在芯片手册中查询到,为了方便,我只编写了一个搜索指纹并发送打卡人员编号的功能,参考这一个功能函数然后更改指令码也能写出其他功能函数,有兴趣可以尝试。
硬件设备:wifiduino、bm2166圆形指纹模块、USB转串口工具
软件:Aduino ide1.8.19、blinker、指纹录入上位机、串口调试助手、esp8266库、Blinker库
指纹芯片手册:https://www.aliyundrive.com/s/VS6fmui84xU
上位机软件:]https://www.aliyundrive.com/s/fa15DiBVbfs
Arduino ide1.8.19:https://www.aliyundrive.com/s/4FHjvLmkJEU
esp8266库:https://www.aliyundrive.com/s/8CZKXzFELNe
Blinker库:https://github.com/blinker-iot/blinker-library
串口调试助手:https://www.aliyundrive.com/s/FwPeazUPjNZ
CH340驱动:https://www.aliyundrive.com/s/ZSD1JZXnTjP
代码:
#define BLINKER_WIFI
#define pin D10
#include <Blinker.h>
byte BYTE[17];
byte BYTE1[17]={0XEF,0X01,0XFF,0XFF,0XFF,0XFF,0X01,0X00,0X08,0X32,0X01,0XFF,0XFF,0X00,0X04,0X02,0X3E};
char auth[] = "********";
char ssid[] = "*********";
char pswd[] = "*******";
//新建组件对象BlinkerText Text1("TextKey1");
void setup()
{
// 初始化串口
Serial.begin(57600);
pinMode(pin,INPUT);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
}
void loop()
{
//使用中断的方式烧录代码后会导致wifiduino后续下载不进去程序,总是显示端口占用,会折腾好久,所以用了if轮询
if(digitalRead(pin)==1)
{
delay(200);
Serial.write(BYTE1,17);
delay(1000);
//如果缓冲区接收到数据就储存到数组
if(Serial.available()>0)
{
for(int j=0;j<17;j++)
BYTE[j]=Serial.read();
}
//处理需要的编号数据并发送
if(BYTE[12]!=0XFF)
Text1.print(BYTE[12]);
else Text1.print("error");
}
Blinker.run();
}
Blinker定制界面:
硬件连接:
现象:上位机录入指纹以及编完号、并在Blinker配置好密钥和界面UI后、开始烧录程序,然后将D10引脚置为高电平,将手指放在指纹模块上,如果校验正确会蓝灯变绿灯并发送编号,若校验不正确则会蓝灯变红灯并发送“error”字符,因为功能很少当D10为低电平时没有程序可执行,即没有现象。
|
|