I think I still am doing something wrong. In the example below it seems that the M5 isn't reacting to the commands. Do I have to scan a QR code from the manual first to get it into the proper state?

Example 1:

import serial import time wakeup_cmd = bytes([0x00]) host_mode_cmd = bytes([0x07, 0xC6, 0x04, 0x08, 0x00, 0x8A, 0x08, 0xFE, 0x95]) start_scan_cmd = bytes([0x04, 0xE4, 0x04, 0x00, 0xFF, 0x14]) stop_scan_cmd = bytes([0x04, 0xE5, 0x04, 0x00, 0xFF, 0x13]) print('Open serial port') ser = serial.Serial('COM4', 9600, timeout=1) # Adjust the port name and baud rate as needed try: print('Wake up!') ser.write(wakeup_cmd) time.sleep(0.05) print('Host mode') ser.write(host_mode_cmd) time.sleep(0.5) print('Start scan') ser.write(start_scan_cmd) time.sleep(3) print('Stop scan') ser.write(stop_scan_cmd) time.sleep(1) print('Bytes waiting at serial port: ' + str(ser.in_waiting)) response = ser.read(ser.in_waiting) print("Received:", response.decode()) except Exception as e: print("Error communicating with serial device: ", e) finally: print("Close serial port") ser.close()

The output:

Open serial port
Wake up!
Host mode
Start scan
Stop scan
Bytes waiting at serial port: 0
Received:
Close serial port

Doing something simpler doesn't work either:

Example 2:

software_version_cmd = bytes([0x04, 0xA3, 0x04, 0x00, 0xFF, 0x55]) print('Open serial port') ser = serial.Serial('COM4', 9600, timeout=1) # Adjust the port name and baud rate as needed try: print('Wake up!') ser.write(wakeup_cmd) time.sleep(0.05) print('Check software version') ser.write(software_version_cmd) time.sleep(1) print('Bytes waiting at serial port: ' + str(ser.in_waiting)) response = ser.read(ser.in_waiting) print("Received:", response.decode()) except Exception as e: print("Error communicating with serial device: ", e) finally: print("Close serial port") ser.close()

The output:

Open serial port
Wake up!
Check software version
Bytes waiting at serial port: 0
Received:
Close serial port