невозможно отправить команду в шестнадцатеричном формате для xbee в python - PullRequest
0 голосов
/ 17 сентября 2018
from digi.xbee.devices import XBeeDevice, RemoteXBeeDevice, XBee64BitAddress
import serial
import logging

local_device = XBeeDevice("COM7", 9600)
data_send = ("\x33\x03\x75\x30\x00\x24\x5b\xc0")
try:
    local_device.open()
    remote_device = RemoteXBeeDevice(local_device, XBee64BitAddress.from_hex_string("0013A20041513885"))    
    local_device.flush_queues()
    print("Sending data asynchronously to %s >> %s " % (remote_device.get_64bit_addr(),data_send))#printing MAC add.
    local_device.send_data_async(remote_device, data_send)
    print("Success")

    print("Waiting for data...\n")
    xbee_message = local_device.read_data()
    if xbee_message is not None:
        print("From %s >> %s" % (xbee_message.remote_device.get_64bit_addr(),
                                         xbee_message.data.decode()))



finally:
    if local_device is not None and local_device.is_open():
        local_device.close()

Я пытаюсь послать шестнадцатеричную команду modbus (33 04 75 30 00 24 5b c0) через python для модуля zigbee. Но вместо отправки команды в шестнадцатеричном виде ее отправка в ascii Может кто-нибудь решить эту проблему. Я использую модуль digi-xbee в python, который использует pyserial для последовательной связи. Вот мой код, который я пытаюсь отправить. data_send = ("\x33\x03\x75\x30\x00\x24\x5b\xc0")

enter image description here

1 Ответ

0 голосов
/ 21 сентября 2018

Использовать кодировку Latin-1.Если вы используете кодировку UTF-8, она может быть неправильной каждый раз.поэтому лучше использовать кодировку Latin-1.

Например:

data_send = ("\x00\x01\x01\x01\x01\x00\x03\x08\x00\x00\x00\x14\x04\x00\x00\x00\x44\xf2\xfc").encode('Latin-1')
...