Код: Выделить всё
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 способен это сделать, если это так.
Как я могу получить непустой ответ от соединения?
Вот ответ, который я получаю, когда запускаю код, ДО ТОГО, как я запускаю BetaFlight и запускаю там некоторые команды:
Это ответ, который я получаю, когда запускаю код ПОСЛЕ того, как я запускаю betaflight и запускаю какая-то команда там:
Подробнее здесь: https://stackoverflow.com/questions/791 ... eturn-data