port = '/dev/cu.usbmodem0x80000001'
baudrate = 115200
import serial
import time
def read_vtxtable():
try:
ser = serial.Serial(port, baudrate, timeout=5, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)
time.sleep(2)
except serial.SerialException as e:
print(f"Cant open this port {port}: {e}")
return []
# Trying to initialize process and make controller alive
ser.write('status\n'.encode())
time.sleep(0.05)
# Asking controller about vtx data
ser.write('vtxtable\n'.encode())
time.sleep(0.05)
response = ""
start_time = time.time()
while time.time() - start_time < 5:
if ser.in_waiting > 0:
response += ser.read(ser.in_waiting).decode()
time.sleep(0.05)
ser.close()
return response
vtxtable_data = read_vtxtable()
print(vtxtable_data)
Когда я пробую этот код, соединение кажется успешным, но когда я запрашиваю некоторые данные, ответ оказывается пустым.
Интересно, что после Я запускаю несколько команд в интерфейсе командной строки BetaFlight и отключаюсь, чтобы освободить доступ к порту, и мой собственный код начинает работать. Однако, если я отключу USB и снова подключу его, код снова перестанет работать.
Может быть, код не может «разбудить» контроллер, поэтому он игнорирует команды? Похоже, что BetaFlight CLI способен это сделать, если это так.
Как я могу получить непустой ответ от соединения?

ОБНОВЛЕНО
Ниже я изложил основную идею того, что я изменил в коде
Код
....
cli_prompt = "Entering CLI Mode, type 'exit' to return, or 'help'"
timeout_time = time.time() + timeout
while time.time() < timeout_time:
write('#')
if ser.in_waiting > 0:
buffer += ser.read(ser.in_waiting).decode()
if cli_prompt in buffer:
print("# Found wakeup phrase:", cli_prompt)
return True
else:
print("# No response..")
write('status')
time.sleep(0.1)
output = get_info()
if len(output) > 0:
print("# The board is alive")
override_wakeup_detection = True
return True
else:
write('#')
time.sleep(0.1)
Вывод.
% python3 get_data.py
# Using first usbmodem found: /dev/cu.usbmodem0x80000001
# No response..
# No response..
# No response..
# The board is alive
[
'vtxtable',
'vtxtable bands 8',
'vtxtable channels 8',
'vtxtable ...
]
Подробнее здесь: https://stackoverflow.com/questions/791 ... eturn-data