获取激光测距模块的数据,采用串口通信,以16进制发送80 06 02 78,通过ser.read()接收返回的数据。但是一直接收不到返回的数据,整个程序卡在了这里。尝试修改time.sleep等待一段时间在来接收,无果。用串口调试助手发送,就能接到返回的数据。
找不到之前的代码了,网上找了个类似的。
# 2023/12/21 19:55
import serial
import time
ser = serial.Serial(port='COM4', baudrate=9600)
# 准备要发送的数据
data = bytes.fromhex('80 06 02 78')
# 发送数据
bytes_written = ser.write(data)
# 验证是否成功发送数据
if bytes_written == len(data):
print("数据发送成功!")
else:
print("数据发送失败!")
# 等待一段时间,确保数据发送完成
time.sleep(3)
# 接收数据
received_data = ser.read(10) # 读取10个字节的数据
# 打印接收到的数据
print("接收到的数据:", received_data)
# 关闭串口
ser.close()
翻了很多帖子之后,找不到解决办法。偶然尝试一位博主的代码后,发现能获取到返回的数据了,猜测问题可能出在延时的时间对不上。用下面的代码就能接收到返回的数据了
import serial # 导入模块
import time
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
try:
# 端口号,根据自己实际情况输入,可以在设备管理器查看
port = "COM4"
# 串口波特率,根据自己实际情况输入
bps = 9600
# 超时时间,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
times = 5
# 打开串口,并返回串口对象
uart = serial.Serial(port, bps, timeout=times)
while True:
# 串口发送一个字符串
myinput = bytes([0X80, 0X06, 0X02, 0X78]) # 需要发送的十六进制数据
len1 =uart.write(myinput) # 用write函数向串口发送数据
print("send len: ", len1)
time.sleep(1)
count = uart.inWaiting()
if count > 0:
data = uart.read(count)
print(data)
break
# 关闭串口
uart.close()
except Exception as result:
print("******error******:", result)