Files
password_try/touch.py

121 lines
2.6 KiB
Python
Raw Permalink Normal View History

2025-03-01 23:49:41 +08:00
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()