基于micropython esp32的在线指纹调试代码

前言

指纹模块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)

指纹模块部分说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值