Как расшифровать полученные данные с последовательного порта на USB с помощью python?

Когда мы отправляем сообщение с Zigbee, подключенного к ПК, на другой Zigbee, подключенный к плате Raspberry Pi. Мы получаем сообщение, аналогичное тому, которое я отправил с Zigbee Connected PC, например: * Hello World *, но в разделе получателя я получаю Hello World с зашифрованными данными (с битом заголовка и битом контрольной суммы), но мне нужен только Hello World в терминале приемника В терминале приемника Zigbee подключен к raspberry pi для этого интерфейса, я использую кабель Serial to USB . Вот мой простой код Python для Serial to USB

import serial
from time import sleep

ser = serial.Serial('/dev/ttyUSB0', 9600, rtscts=1, timeout=0)
while True:
       line = ser.read(ser.inWaiting())
       if len(line) > 0:
                       print line
       sleep(1)
ser.close() 

Я получаю тип результатов, помогите

pi@raspberrypi ~/iot/XBeeAPI/Python $ python temperlm.py 
~#�}3�@ȶ���#Hello World�~#�}3�@ȶ���####��~#�}3�@ȶ���#Hello World�
~#�}3�@ȶ���#Hello World�
~#�}3�@ȶ���#Hello World�~#�}3�@ȶ���#Hello World�
~#�}3�@ȶ���#Hello World�~#�}3�@ȶ���#Hello World�
~#�}3�@ȶ���#Hello World�~#�}3�@ȶ���#Hello World�
~#�}3�@ȶ���#Hello World�~#�}3�@ȶ���#Hello World�
~#�}3�@ȶ���#Hello World�~#�}3�@ȶ���#Hello World�
~#�}3�@ȶ���#Hello World�~#�}3�@ȶ���#Hello World�
^CTraceback (most recent call last):
File "temperlm.py", line 9, in <module>
sleep(1)
KeyboardInterrupt

person rajesh d    schedule 14.07.2015    source источник
comment
Это не проблема python, это, вероятно, кадр синхронизации, попробуйте использовать какой-нибудь простой последовательный эмулятор, такой как RS232Analyzer, и протестируйте его вручную перед кодированием, также исправьте отступ в посте, так будет легче читать :)   -  person Kobi K    schedule 14.07.2015
comment
Сброс вещей как шестнадцатеричный поможет, например. print " ".join(["%02X" % ord(x) for x in line])   -  person Martin Evans    schedule 14.07.2015
comment
Но мне нужен Only Hello World... -- Вам нужно добавить обработчик протокола Zigbee между прикладной программой и чтением последовательного порта. Этот обработчик должен найти начало (и конец) каждого пакета сообщения Zigbee, проверить пакет с помощью контрольной суммы, а затем извлечь из пакета полезную нагрузку (нужные байты). Или же используйте команду AT, чтобы перевести устройство в прозрачный режим модема, если оно имеет такую ​​возможность.   -  person sawdust    schedule 15.07.2015
comment
Данные, которые вы видите, должны соответствовать этому кадру пакета приема Zigbee: noreferrer">safaribooksonline.com/library/view/building-wireless-sensor/ и завершается байтом контрольной суммы.   -  person sawdust    schedule 15.07.2015
comment
Пришлите мне правильный код, я немного запутался, помогите, или вы также можете отредактировать мой код   -  person rajesh d    schedule 16.07.2015


Ответы (1)


У вас есть модули XBee, настроенные для «Режима API», который использует форматированные пакеты данных вместо «Прозрачного последовательного режима», который просто передает последовательные данные напрямую. Для простых приложений или замены последовательного кабеля отлично подходит прозрачный последовательный режим. Как только вы начнете делать больше с модулем XBee (например, отправка AT-команд и связь с несколькими устройствами в сети), вы обычно переключаетесь в режим API.

Посмотрите на настройку ATAP в модуле — 0 для прозрачного последовательного порта, 1 для режима API и 2 для «экранированного режима API», где определенные символы экранируются, чтобы облегчить обнаружение начала кадра.

Обязательно прочитайте документацию XBee об этих режимах, чтобы лучше понять различия и плюсы и минусы каждого из них.

person tomlogic    schedule 17.07.2015