Скрипт Python для настройки модуля XBee не работает на Raspberry Pi

У меня есть скрипт Python, который я хочу использовать для настройки некоторых модулей XBee. Он отлично работает при подключении к компьютеру через плату разработки xbee, но терпит неудачу при подключении к Raspberry Pi через часть платы pi.

Я сузил проблему до невозможности войти в командный режим, после отправки +++ xbee никогда не отправляет сообщение OK. Вот соответствующий код:

...
CC = '+'
GT = '1.1' # Tried different values here
...

def startCommandMode(self):
    self.emptyBuffer() # Tried with and without this line
    sleep(self.GT) # Tried with and without this line
    self.ser.write(self.CC + self.CC + self.CC)
    sleep(self.GT)
    return self.getReply() == 'OK'

...

def getReply(self):
    count = 0
    reply = ''
    while True:
        char = self.ser.read()
        if char == '\r':
            break
        if len(char) == 0:
            return None
        reply += char

    return reply

Полный исходный код доступен на github, если это необходимо.

Я знаю, что это не проблема с модулем xbee, raspberry pi или частью платы pi, поскольку он отлично работает, если я попробую вручную, используя «picocom -lc /dev/ttyAMA0».


person James147    schedule 22.11.2012    source источник
comment
Вы можете подтвердить, что sleep() действительно спит 1,1 секунды?   -  person tomlogic    schedule 26.11.2012
comment
Время защиты по умолчанию для модулей xbee составляет 1 секунду, и вы должны убедиться, что до этого не произошло никаких операций чтения. Я пробовал различные значения примерно до 5 секунд без успеха, поэтому небольшая ошибка во времени допустима. И на моем рабочем столе все эти значения работают как положено.   -  person James147    schedule 26.11.2012


Ответы (2)


Некоторые вещи, чтобы проверить:

  • Вы получаете что-нибудь в ответ?

  • Вы включили управление потоком на XBee? Убедитесь, что D6 и D7 установлены на 0, так как последовательный порт Raspberry Pi не имеет управления потоком.

  • Настроен ли код Python для управления потоком? Возможно, он ожидает сигнала CTS, который никогда не утверждается.

  • Можете ли вы попробовать использовать плату разработки XBee на USB-порту Raspberry Pi?

person tomlogic    schedule 26.11.2012

Используйте следующее:

....
if args.common:
    args.at = ['ID', 'CH', 'MY', 'DL', 'DH', 'AP'] + args.at
xbee = XBee(args.port, args.baud);
sleep(2)
xbee.CC = args.CC
xbee.GT = args.GT
....
....

ИМХО, мне толстому Rpi нужно больше времени для инициализации последовательного порта, поэтому я использую эту задержку. Также применимо для прозрачного режима, поэтому добавьте задержку после инициализации порта.

Я надеюсь, что это будет хорошо для вас. Для меня это решаемо.

БР. Манель.

person manmarsal    schedule 22.03.2013