我的python serial.write()适用于字符串,但当我将整数作为字节对象发送时不起作用

时间:2018-09-29 19:42:47

标签: python python-2.7 serial-port pyserial

这是我第一次问关于stackoverflow的问题,请耐心等待。

我基本上是在测试一个板,该板充当GPS和计算机之间的中继。我在python中创建了一个模拟器来模仿GPS。该测试的目的是通过UART串行端口将仿真数据从仿真器发送到板,并确保板可以接收和发送消息。

从GPS(我的仿真器)以9600波特率将字符串 START 发送到标有GPS品牌的标牌开始。一旦开发板接收到该字符串,它就会根据GPS的消息协议格式化整数配置消息,并以9600波特率将配置消息 CFG_MSG 发送到GPS。 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

0 个答案:

没有答案