python 串口通信问题

为啥我读取出来的数据是空的 只有b‘ ’是硬件连接的问题吗


import serial
import  time
# 创建串口对象
ser = serial.Serial('COM9', 115200,timeout=1)
# 发送数据
if (ser.isOpen()):
    ser.write(b'Hello World')
    print("发送成功")
else:
    print("发送失败!")

# 接收数据
try:
  data = ser.read_all()
  print(data)
  time.sleep(10)
except serial.SerialTimeoutException:
    print("接收超时,可能没有数据发送")

# 关闭串口
if (ser.isOpen()):
    ser.close()
    print("关闭成功")
else:
    print("关闭失败!")


发送之后可以等待1秒,让设备响应,也有可能是是你发送的数据格式不对

【以下回答由 GPT 生成】

问题原因: 根据给出的代码,可以看到问题出在读取数据部分。调用ser.read_all()函数时,返回的数据是空字符串b''。导致无法正确读取到数据。

解决方案: 1. 首先,我们需要确认硬件连接是否正确。可以使用其他串口工具,如TeraTerm等,通过相同的串口和波特率进行通信,查看数据是否正常。如果硬件连接没有问题,那么就可以确定问题是在软件上。 2. 确认串口号和波特率是否设置正确。在代码的第6行中,COM9是设置的串口号,确保该串口号是正确的。而在第7行中,115200是设置的波特率,需要确保和硬件连接的设备的波特率一致。 3. 在发送数据之后,等待一段时间后再尝试读取数据。可以通过time.sleep()函数增加等待时间,例如time.sleep(1),等待1秒钟后再尝试读取数据。这样可以确保设备有足够的时间发送数据。 4. 使用read()函数而不是read_all()函数来读取数据。read_all()函数是读取所有数据直到超时,而read()函数可以指定读取的字节数。可以尝试修改代码为data = ser.read(10)来尝试读取10个字节的数据。 5. 使用readline()函数来读取数据。如果发送的是文本数据,并且每次数据发送以换行符结尾,那么可以使用readline()函数来读取整行文本数据。

修改后的代码示例:

import serial
import time

# 创建串口对象
ser = serial.Serial('COM9', 115200, timeout=1)

# 发送数据
if ser.isOpen():
    ser.write(b'Hello World')
    print("发送成功")
else:
    print("发送失败!")

# 等待一段时间
time.sleep(1)

# 接收数据
try:
    # 使用read函数指定读取的字节数
    data = ser.read(10)

    # 或者使用readline函数读取整行文本数据
    # data = ser.readline()

    print(data)
except serial.SerialTimeoutException:
    print("接收超时,可能没有数据发送")

# 关闭串口
if ser.isOpen():
    ser.close()
    print("关闭成功")
else:
    print("关闭失败!")

通过以上方法,应该可以解决无法正确读取数据的问题。如果问题仍然存在,可能需要进一步检查硬件连接和确认串口设置的正确性。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^