You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派3通过UART向Waveshare条码扫描模块发送9位命令失败求助

树莓派3与Waveshare条码扫描模块UART通信空响应问题排查

问题描述

尝试通过UART命令在树莓派3与Waveshare条码扫描模块之间通信,始终收到空响应(b'')。发送的命令为9位长度,打印scanning_command后发现首位被忽略。已参照模块官方文档尝试多个Python脚本,问题仍未解决。

用户使用的脚本

import serial

# Define the serial port and baud rate
serial_port = '/dev/ttyS0'
baud_rate = 9600

# Define the scanning command
scanning_command = b'\x7E\x00\x08\x01\x00\x02\x01\xAB\xCD'  

# Open the serial connection
ser = serial.Serial(serial_port, baud_rate)

# Send the scanning command
ser.write(scanning_command)

response = ser.read(7)  # Read 7 bytes response
print("Response:", response.hex())

排查与解决步骤

1. 启用树莓派硬件UART

树莓派3默认可能禁用硬件UART或被蓝牙占用,需手动开启:

  • 执行命令sudo raspi-config
  • 进入 Interface Options → Serial Port
  • 选择"否"关闭串口控制台,选择"是"启用串口硬件
  • 重启树莓派:sudo reboot

2. 修正串口设备路径

树莓派3的硬件UART对应设备是/dev/ttyAMA0,/dev/ttyS0是性能受限的mini UART,建议修改脚本中的串口路径:

serial_port = '/dev/ttyAMA0'

3. 验证命令发送完整性

在脚本中添加代码,确认命令定义和实际发送字节数:

# 打印命令十六进制格式,检查首位是否丢失
print("Command hex:", scanning_command.hex())
# 获取实际发送的字节数
bytes_sent = ser.write(scanning_command)
print(f"Sent {bytes_sent} bytes")

若命令十六进制输出不是7E000801000201ABCD,说明命令定义有误;若发送字节数不为9,说明串口配置存在问题。

4. 调整串口超时与读取策略

默认串口无超时设置,ser.read(7)会一直阻塞等待数据。建议添加超时并读取所有可用响应:

# 打开串口时设置2秒超时
ser = serial.Serial(serial_port, baud_rate, timeout=2)
# 发送命令后读取所有可用数据
response = ser.read_all()
print("Response:", response.hex())

5. 匹配模块串口参数

显式配置串口参数,确保与模块官方文档一致(通常为8数据位、无校验、1停止位):

ser = serial.Serial(
    serial_port,
    baud_rate,
    bytesize=serial.EIGHTBITS,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    timeout=2
)

6. 检查硬件连接

  • 确认树莓派TX(GPIO14)接模块RX,树莓派RX(GPIO15)接模块TX,GND共地,避免接反
  • 确认模块供电正常(部分Waveshare扫描模块需5V供电,检查供电引脚连接)
  • 若模块为5V电平,树莓派为3.3V电平,需添加电平转换模块保护引脚

内容的提问来源于stack exchange,提问作者Adrian Olesniewicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:47:29