Xbee Python беспроводной прием данных через последовательный интерфейс - PullRequest
0 голосов
/ 24 апреля 2019

Я использую Xbee, подключенный к Raspberry pi3, API-mode = 2 и отправляю данные из xbee через последовательный интерфейс, который работает хорошо.Однако мне нужно прочитать данные, поступающие на тот же Xbee (эта часть работает не очень хорошо).Пожалуйста, найдите мой код ниже, который содержит скрипт для передачи и приема данных через последовательный интерфейс:

ser=serial.Serial(PORT, BAUDRATE)
while True:
    #SEND DATA
    msg=[0x10,
         0x00,
         0x00,
         0x00,
         0x00,
         0x00,
         0x00,
         0x00,
         0xFF,
         0xFF,
         0xFF,
         0xFE,
         0x00,
         0xCC,
         0x66,
         0x00,
         0x00,
         0x01,
         0x00,
         0x03,
         0xFF,
         0x01,
         0x00,
         0x01,
         0x77,
         0x00,
         0x1D]
    ser.write(chr(0x7e)+
              chr(len(msg)//256)+
              chr(len(msg)%256))
    ser.write(''.join(chr(x) for x in msg))
    check=(0xFF - ( sum(msg) & 0xFF ))
    ser.write(chr(check))

    #READ DATA
    msg=[0x90,
         0x00,
         0x13,
         0xA2,
         0x00,
         0x41,
         0x88,
         0xA5,
         0x2C,
         0xFF,
         0xFE,
         0x00,
         0x66,
         0x00,
         0x00,
         0x01,
         0x00,
         0x03,
         0xFF,
         0x01,
         0x00,
         0x01,
         0x77,
         0x00,
         0x1D]
    ser.write(chr(0x7e)+
              chr(len(msg)//256)+
              chr(len(msg)%256))
    ser.write(''.join(chr(x) for x in msg))
    check=(0xFF - ( sum(msg) & 0xFF ))
    ser.write(chr(check))
    data = ser.read()
    print(data)

ser.close()

Я могу отправить данные.Однако прочитанный скрипт выводит мне следующее:

~


▒

}
3
▒

A
▒
▒
▒
▒
▒
▒
f



▒





w


▒

Буду признателен за любую помощь в этом.Я предпочитаю последовательно читать и писать без использования библиотеки Python.Тем не менее, я открыт для предложения, которое будет работать для моего случая.

1 Ответ

0 голосов
/ 29 апреля 2019

Во-первых, вы можете оставить свои ser.write() вызовы вне вашего while True:, в противном случае вы отправляете много пакетов.

Попробуйте создать большой цикл, чтобы всегда проверять байты напоследовательная линия, и запускать ваши записи после того, как произойдут определенные события (например, может быть нажатие клавиши или определенное время).

Похоже, вы получаете кадр - ~это 0x7E.ser.read() всегда возвращает один символ?Вы можете напечатать его с помощью print(hex(ord(data))), чтобы получить шестнадцатеричное значение порядкового значения символа, и оно может начать выглядеть как список ожидаемых шестнадцатеричных значений.

И вы сказали, что предпочитаете не использоватьБиблиотека Python, но вы можете рассмотреть возможность использования библиотеки Python-xbee Digi , чтобы сократить количество времени, которое вы тратите на написание рабочего кода, а также сосредоточиться на кодировании на уровне приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...