Я пытаюсь читать фреймы, отправленные на модуль ZigBee, подключенный к USB. Каждый кадр отбрасывается пакетом Python xBee, потому что разделитель равен 0x00, когда он должен быть 0x7E. На самом деле кажется, что каждый байт также равен нулю.Python читает нули из кадра ZigBee
XCTU получает рамы отлично.
Я работаю с OS X, PyCharm, Python 3.4 и позаимствовал этот код из Интернета:
# Open serial port
ser = serial.Serial(PORT, BAUD_RATE)
# Create API object
xbee = ZigBee(ser,escaped=True)
# Continuously read and print packets
while True:
try:
response = xbee.wait_read_frame()
sa = hex(response['source_addr_long'][4:])
rf = hex(response['rf_data'])
datalength=len(rf)
# if datalength is compatible with two floats
# then unpack the 4 byte chunks into floats
if datalength==16:
h=struct.unpack('f',response['rf_data'][0:4])[0]
t=struct.unpack('f',response['rf_data'][4:])[0]
print (sa,' ',rf,' t=',t,'h=',h)
# if it is not two floats show me what I received
else:
print (sa,' ',rf)
except KeyboardInterrupt:
ser.close()
break
ser.close()
Программа выполняет вызов xbee.wait_read_frame() и ждет там навсегда, потому что ни одного кадра не приходит.
Я отслеживал вызов "base.py" из пакета XBee:
while True:
if self._callback and not self._thread_continue:
raise ThreadQuitException
if self.serial.inWaiting() == 0:
time.sleep(.01)
continue
byte = self.serial.read()
if byte != APIFrame.START_BYTE:
continue
Вызов serial.read() всегда возвращает ноль.
Какое у вас устройство ZigBee? Вы проверяли настройки последовательного порта? Вы пробовали без «escaped = True»? – pmod
XBee PRO S2 (от Digi), да и да. – luna1999
Если вы читаете только нули (вы?) Из этого последовательного порта, фрагменты кода здесь не очень важны. Есть что-то с настройками порта (например, вы читаете на 115200, а данные передаются на 9600). Что такое BAUD_RATE, что вы используете? Вы пытались получить доступ к простому терминалу? – pmod