【问题标题】:Serial Communication issue in hardware interface with python platformpython平台硬件接口中的串行通信问题
【发布时间】:2019-05-27 06:28:16
【问题描述】:

我有一个使用异步串行接口协议的硬件,9600 波特率,#Start bits 1,#Data bits 8,#Stop bits 1,Parity None。 当我使用 cp2102 设备与 python 脚本通信我的硬件时,硬件没有响应,但是当我尝试与 Arduino nano 通信相同的硬件时,它可以正常工作。

工作 Arduino 代码:

void volt_currentTest()
{
 Serial.write(0xDD);
 Serial.write(0xA5);
 Serial.write(0x03);
 Serial.write(0x00);
 Serial.write(0xFF);
 Serial.write(0xFD);
 Serial.write(0x77);

  while(c != 0x77)
  {
    if(Serial.available())
    {
      if((c = Serial.read()) != -1)
      {
           Serial.println(c , HEX);
        d[i] = c;
        i++;
      }
    }   
  }
}

Python 代码:

import serial
ser = serial.Serial(
    'COM9', 9600,   
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE
)

'''data = b'\xdd\xa5\x03\x00\xff\xfd\x77'
ser.write(data)'''

ser.write(b'\xDD')
ser.write(b'\xA5')
ser.write(b'\x03')
ser.write(b'\x00')
ser.write(b'\xFF')
ser.write(b'\xFD')
ser.write(b'\x77')

'''
ser.write('\xDD\r\n'.encode())
ser.write('\xA5\r\n'.encode())
ser.write('\x03\r\n'.encode())
ser.write('\x00\r\n'.encode())
ser.write('\xFF\r\n'.encode())
ser.write('\xFD\r\n'.encode())
ser.write('\x77\r\n'.encode())
'''

while True:
    response = ser.read()

    '''response = ser.readline()
      '''
     print(response)

所以任何人都知道它为什么不起作用.....

【问题讨论】:

  • 考虑在本站发帖:arduino.stackexchange.com
  • 您的读写有问题吗?对方的HW收到数据了吗?
  • yes HW 接收数据并根据该数据发送回复,通信仅在十六进制对话中进行

标签: python arduino


【解决方案1】:

您可能需要在所有 write() 之后但在“while”循环之前调用 ser.flush()

Python 的 serial.Serial 默认使用缓冲 I/O - 您的所有写入都会等到您调用 flush(),之后它们会分批发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多