COM-порт подключен к pySerial, но не возвращает данные.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 COM-порт подключен к pySerial, но не возвращает данные.

Сообщение Anonymous »

Я пытаюсь использовать библиотеку pySerial для доступа к контроллеру FPV через COM-порт. У меня есть этот код:
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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Порт COM подключен к pySerial, но не возвращает данные.
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Порт COM подключен к pySerial, но не возвращает данные.
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • COM-порт подключен к pySerial, но не возвращает данные.
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • PySerial – как убедиться, что открытый порт USB закрыт перед повторным запуском приложения
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Айфон не подключен. Xcode продолжит работу, когда iPhone подключен
    Anonymous » » в форуме IOS
    0 Ответы
    88 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»