Мой python serial.write () работает со строками, но не когда я посылаю целые числа как объект байтов - PullRequest
0 голосов
/ 29 сентября 2018

Это мой первый раз, когда я спрашиваю что-то о stackoverflow, поэтому, пожалуйста, потерпите меня.

Я в основном тестирую плату, которая действует как реле между GPS и компьютером.Я создал эмулятор в Python для имитации GPS.Цель этого теста - отправить фиктивные данные с эмулятора на плату через последовательный порт UART и убедиться, что плата может принимать и передавать сообщения.

Все начинается с того, что GPS (мой эмулятор) отправляет строку, START , со скоростью 9600 бод на плату, указывающую марку GPS.Как только плата получает эту строку, она форматирует целочисленное сообщение конфигурации на основе протокола сообщений GPS и отправляет сообщение конфигурации CFG_MSG в GPS на скорости 9600 бод.Как только GPS получит это сообщение конфигурации, он должен передать целочисленное сообщение подтверждения со скоростью 57600 бод.

Моя проблема в том, что я получаю сообщение о конфигурации от платы, но мне не удается отправить подтверждающее сообщение.Я не уверен, что 1) эмулятор действительно изменяет скорость передачи данных, и 2) если эмулятор правильно отправляет байты.

Пожалуйста, смотрите мой псевдокод ниже:

    START = 'thisIsGpsX'
    CFG_MSG = 0x1234567890

    def start_gps():
       ser = serial.Serial('/dev/ttyPS0', 9600)
       time.sleep(3) # give board time to set its ready signal  
       ser.write(START)
       time.sleep(1)

       byte_count = 0
       recv_msg = 0
       while(byte_count < 5):
          byte_count = byte_count+1
          recv_msg = ((struct.unpack('B',ser.read(1)))[0]) + (recv_msg << 8)
       if(recv_msg != CFG_MSG):
          print('wrong message received')

       # the code preceding this comment works b/c I am able to receive the cfg msg

       # I am unsure if the code succeeding this comment works or not b/c the board 
       # fails to communicate with the GPS hereafter

       ser.baudrate = 57600
       time.sleep(0.2)
       ack_msg = bytes([0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xA])

       for i in range(10):
          ser.write(ack_msg[i]) 
          time.sleep(0.05)

Помощь очень сильноприветствуется!

РЕДАКТИРОВАТЬ: я использую Python 2.7.9

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