前言
指纹模块AS608
接线:tx GPIO13,rx GPIO12
代码
复制即用
from machine import UART
import time,struct,btree
class As608(object):
def __init__(self,uart):
self.finger_command = b'\xef\x01\xff\xff\xff\xff\01\x00\x03\x01\x00\x05'
self.clear_all_command = b'\xef\x01\xff\xff\xff\xff\01\x00\x03\x0d\x00\x11'
self.login_command = b'\xef\x01\xff\xff\xff\xff\01\x00\x03\x10\x00\x14'
self.search_command = b'\xef\x01\xff\xff\xff\xff\01\x00\x03\x11\x00\x15'
self.del_one_command=b'\xef\x01\xff\xff\xff\xff\01\x00\x07\x0c'
self.uart=uart
def del_numid(self,num): #删除指纹,输入指纹序号(正整数)
self.uart.read()
data = self.del_one_command+struct.pack('>h',num)+b'\x00\x01'
data_list = struct.unpack('%db'%len(data[6:]),data[6:])
data=data+struct.pack('>h',sum(data_list))
self.uart.write(data)
time.sleep(1)
rec = self.uart.read()
if rec!=None:
if rec[-3:-2] == b'\x00':
print('删除了%d号指纹'%num)
return 1
else:
return 0
else:
print("删除失败")
def write_btree(self,b_id,b_name): #传入参数必须是二进制字符串例如 b'1',b'gao'
try:
f = open("mydb", "r+b")
except OSError:
f = open("mydb", "w+b")
db = btree.open(f)
db[b_id] =b_name
db.flush()
db.close()
f.close()
def read_btree(self,b_id): #传入参数必须是二进制字符串例如 b'1',有返回值
try:
f = open("mydb", "r+b")
except OSError:
f = open("mydb", "w+b")
db = btree.open(f)
name = db.get(b_id)
db.close()
f.close()
return name
def finger (self): #手指有无检测,有返回1,无返回0
self.uart.read()
self.uart.write(self.finger_command)
time.sleep(1)
rec = self.uart.read()
if rec[-3:-2] == b'\x00':
print('检测到手指')
return 1
else:
return 0
def clear_all(self): #清空指纹库
self.uart.read()
self.uart.write(self.clear_all_command)
time.sleep(1)
rec = self.uart.read()
if rec[-3:-2] == b'\x00':
print('指纹库全部清除')
import os
os.remove('mydb')
return 1
else:
return 0
def login(self,into_name=b''): #注册手指,先进行查询如果没有记录再去注册。
ok=self.search()
print("确认为新指纹")
if ok == 0:
self.uart.read()
self.uart.write(self.login_command)
time.sleep(1)
rec = self.uart.read()
auth_code=rec[-5:-4] #提取确认码
if auth_code == b'\x00':
page_id = rec[-4:-2]
page_id = struct.unpack('>h',page_id)[0]
print("新指纹id:",page_id)
self.write_btree(str(page_id),into_name)
print('注册成功')
return [1,page_id] #成功:返回[1,注册ID]
else:
print('注册失败')
return 0
else:
print('此手指已经注册过了')
def search(self): #查询手指并成功返回[1,注册的ID号,得分]
self.uart.read()
self.uart.write(self.search_command)
time.sleep(1)
rec = self.uart.read()
auth_code=rec[-7:-6] #提取确认码
if auth_code == b'\x00':
page_id = rec[-6:-4] # id值
page_id = struct.unpack('>h',page_id)[0]
score = rec[-4:-2] #得分
score=struct.unpack('>h',score)[0]
data_btree=self.read_btree(str(page_id))
print(page_id,score,data_btree.decode("utf-8"))
return [1,page_id,score,data_btree]
else:
print('没有这个记录')
return 0
b=As608(UART(1,57600,tx=13 ,rx=12))
while True:
enter=input("\n1删除某个指纹\n2删除所有指纹\n3指纹识别\n4注册指纹\n请输入您的需求:")
if enter=="1":
id=input("输入您要删除的指纹id(整数)号:")
b.del_numid(int(id))
elif enter=="2":
b.clear_all()
elif enter=="3":
if b.finger!=1:
id=b.search()
elif enter=="4":
id=input("输入注册的id号并放入指纹:")
b.login(id)
指纹模块部分说明

7170

被折叠的 条评论
为什么被折叠?



