63 lines
3.0 KiB
Python
63 lines
3.0 KiB
Python
import serial
|
|
import serial.tools.list_ports
|
|
|
|
from time import sleep
|
|
|
|
from pyautogui import keyDown, keyUp
|
|
|
|
com_init_time = 2 # 从端口初始化到写数据经历的时间,单位为秒
|
|
read_timeout = 0.4 # 读取串口的等待时间,单位为秒
|
|
baud_rate = 115200 # 波特率
|
|
|
|
def detect():
|
|
print("检测端口设备中...")
|
|
ports_list = list(serial.tools.list_ports.comports())
|
|
if len(ports_list) <= 0:
|
|
print("无目标串口设备。")
|
|
else:
|
|
for comport in ports_list:
|
|
if "USB" in list(comport)[1]:
|
|
ser = serial.Serial(port = list(comport)[0], baudrate = baud_rate, timeout = read_timeout)
|
|
sleep(com_init_time)
|
|
ser.write("C".encode("utf-8"))
|
|
response = str(ser.read(5), encoding = "utf-8")
|
|
ser.close()
|
|
if "OK" in response:
|
|
print("检测到如下串口设备:")
|
|
print(list(comport)[0], list(comport)[1])
|
|
return list(comport)[0]
|
|
print("无目标串口设备。")
|
|
return ""
|
|
|
|
def com_simulate(message):
|
|
print(message)
|
|
key = maps[message[0:2]] # 判断按下了哪个按钮
|
|
if 'U' in message:
|
|
keyUp(key)
|
|
elif 'D' in message:
|
|
keyDown(key)
|
|
|
|
if __name__ == "__main__":
|
|
com_name = detect()
|
|
|
|
ser = serial.Serial(port = com_name, baudrate = baud_rate, timeout = read_timeout)
|
|
print("串口初始化中...")
|
|
sleep(com_init_time)
|
|
print("初始化完毕!")
|
|
|
|
print("读取并构建按键映射表中...")
|
|
maps = {}
|
|
with open('keymap.txt', 'r', encoding = "utf-8") as f:
|
|
line = f.readline().strip().split('#')[0] # 取出一行中 '#' 之前的部分,'#' 后为注释
|
|
while line != "$":
|
|
if line:
|
|
keymap = line.split(':')
|
|
maps[keymap[0].strip()] = keymap[1].strip()
|
|
line = f.readline().strip().split('#')[0]
|
|
print("构建完毕!")
|
|
|
|
# 检测按键循环体
|
|
while True:
|
|
message = str(ser.read(5), encoding = "utf-8")
|
|
if message:
|
|
com_simulate(message) |