Это мой первый раз, когда я спрашиваю что-то о 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