import os import sys import time import json import serial from ocr import get_text from log import log_init, myprint class ser(object): gpio_table={ "enter":"pa0", "1":"pa4", "2":"pa5", "3":"pa6", "4":"pb0", "5":"pb1", "6":"pb10", "7":"pa12", "8":"pa11", "9":"pb7", "0":"pb6" } def __init__(self): self.ser=None def open(self,com:str): try: self.ser = serial.Serial(port=com, baudrate=115200, timeout=0.3) except Exception: print(f"serial com:{com} open failed.") sys.exit(-1) def close(self): if not (self.ser is None): self.ser.close() self.ser=None def write(self,t:str): # print("send:",t.encode('utf-8').hex(' ')) if not (self.ser is None): self.ser.write(t.encode(encoding="utf-8")) def read(self): data=bytearray() if not (self.ser is None): data=self.ser.read(4096) try: t=data.decode(encoding='utf-8') except Exception as e: print(e) print(data.hex(' ')) t="" return t def touch(self,key:str): if not (key in self.gpio_table): return gpio=self.gpio_table[key] print(f"touch {key}:{gpio}") self.write(f"output on {gpio}\r\n") ret=self.read() print(ret) time.sleep(0.05) self.write(f"output off {gpio}\r\n") ret=self.read() print(ret) time.sleep(0.05) def enter(self): s.touch("enter") def passsword(self,p:str): for i in p: self.touch(i) def find_text(t:str): text=get_text(1560,198,363,331) print(text) for item in text: if(item[1]==t): return True return False def data_save(data:dict): data_file="index.json" with open(data_file,mode='w+') as f: f.write(json.dumps(data,sort_keys=True, indent=2, separators=(',', ': '))) def data_get()->dict: data_file="index.json" if os.path.exists(data_file): with open(data_file,mode='r') as f: return json.loads(f.read()) return {"index":0} if __name__ == "__main__": s=ser() s.open("com6") password=data_get().get("index",0) log_init("log.txt") myprint(f"start_index:{password}") while(True): try: if(find_text("手机存储")): myprint("enter") s.enter() if(find_text("请输入解锁密码")): myprint(f"try:{password:06d}") s.passsword(f"{password:06d}") except Exception as e: myprint(e) data_save({"index":password}) break except KeyboardInterrupt as k: myprint(k) data_save({"index":password}) break if password>999999: myprint("try end") break myprint(f"end_index:{password}") s.close()