Feat: add ESP32 bridge functionality and physical switch control

This commit is contained in:
Brunsmeier
2026-06-26 13:06:27 +08:00
parent 5b7f44a9b9
commit e2c1597b68
4 changed files with 355 additions and 29 deletions

View File

@ -55,17 +55,41 @@ def keyboard_control(ser):
def main():
import time
parser = argparse.ArgumentParser()
parser.add_argument("port", help="ESP32 serial port, for example COM5")
parser.add_argument("--baud", type=int, default=230400)
parser.add_argument("port", help="ESP32 serial port, for example /dev/ttyUSB0")
parser.add_argument("--baud", type=int, default=115200)
args = parser.parse_args()
buffer = bytearray()
packet_count = 0
last_time_ms = None
with serial.Serial(args.port, args.baud, timeout=1) as ser:
ser = serial.Serial()
ser.port = args.port
ser.baudrate = args.baud
ser.timeout = 0.05
ser.write_timeout = 0.05
# Avoid unwanted ESP32 auto-reset / boot-mode toggling.
ser.dtr = False
ser.rts = False
ser.open()
try:
# Some USB-UART adapters change line states during open().
ser.dtr = False
ser.rts = False
ser.reset_input_buffer()
ser.reset_output_buffer()
print("Reading {} at {} baud".format(args.port, args.baud))
print("Waiting for ESP32 main.py startup...")
time.sleep(4.0)
threading.Thread(
target=keyboard_control,
args=(ser,),
@ -82,12 +106,15 @@ def main():
if sync_index < 0:
del buffer[:-1]
break
if sync_index:
del buffer[:sync_index]
if len(buffer) < PACKET_SIZE:
break
packet = bytes(buffer[:PACKET_SIZE])
if (sum(packet[:-1]) & 0xFF) != packet[-1]:
del buffer[0]
continue
@ -101,6 +128,7 @@ def main():
else:
delta = (data["t_ms"] - last_time_ms) & 0xFFFFFFFF
frequency = 1000.0 / delta if delta else 0.0
last_time_ms = data["t_ms"]
print(
@ -116,6 +144,9 @@ def main():
)
)
finally:
ser.close()
if __name__ == "__main__":
main()