Непостоянное мигание светодиода Xbee при удаленном управлении

Я пытаюсь мигать светодиодом, используя маршрутизатор AT XBee, который управляется API-интерфейсом координатора Xbee. Координатор Xbee подключен к Raspberry Pi, на котором запущена следующая программа. Светодиод мигает последовательно ровно 4 цикла, но после этого он мигает непоследовательно (застревает и не загорается, а затем мигает очень быстро, снова застревает). Иногда, даже после остановки программы, светодиод мигает через несколько секунд. В чем причина задержки и несогласованности, мне выяснить не удалось. Я был бы признателен за любые указатели. Спасибо. Скорость передачи: 9600

from xbee import XBee, ZigBee
import serial
import time

ser = serial.Serial('/dev/ttyUSB0', 9600)
xbee = ZigBee(ser)

while True:
    try:
        xbee.send('remote_at',
              frame_id='A',
              dest_addr_long='\x00\x00\x00\x00\x00\x00\xFF\xFF',
              dest_addr='\xFF\xFE',
              options='\x02',
              command='P2',
              parameter='\x05')

        time.sleep(1)

        xbee.send('remote_at',
              frame_id='A',
              dest_addr_long='\x00\x00\x00\x00\x00\x00\xFF\xFF',
              dest_addr='\xFF\xFE',
              options='\x02',
              command='P2',
              parameter='\x04')

        time.sleep(1)
    except KeyboardInterrupt:
        break

xbee.send('remote_at',
      frame_id='A',
      dest_addr_long='\x00\x00\x00\x00\x00\x00\xFF\xFF',
      dest_addr='\xFF\xFE',
      options='\x02',
      command='P2',
      parameter='\x04')

ser.close()

person JustAJunior    schedule 12.03.2015    source источник


Ответы (1)


Для начала попробуйте переключиться с широковещательных пакетов на одноадресные, установив dest_addr_long (и вообще не устанавливая dest_addr). Насколько я помню, широковещательные пакеты отправляются в общей сложности три раза, чтобы убедиться, что они получены на удаленном устройстве. Вероятно, в вашей сети не так много трафика, но я думаю, вы увидите более надежную синхронизацию с одноадресной передачей.

Во-вторых, попробуйте переключиться на 115200 бит/с. Это упростит связь между Raspberry Pi и координатором и устранит возможные задержки последовательной буферизации.

person tomlogic    schedule 13.03.2015
comment
К сожалению, это не решило проблему. После изучения руководства по данным (sparkfun.com/datasheets/Wireless/ Zigbee/XBee-Manual.pdf), вот что я нашел: P10: Если буфер DI переполняется, необходимо реализовать аппаратное или программное управление потоком, чтобы предотвратить переполнение (потеря данных между хостом и модулем). ). P11: Когда данные RF получены, данные поступают в буфер DO и отправляются через последовательный порт на хост-устройство. Как только буфер DO достигает своего предела, любые дополнительные входящие РЧ-данные теряются. Есть ли способ узнать, какой буфер (DI или DO) заполняется? - person JustAJunior; 13.03.2015
comment
Я сомневаюсь, что это переполнение буфера. Вы отправляете небольшие пакеты один раз в секунду. - person tomlogic; 14.03.2015