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

如何通过pyserial持续获取静止物体下红外避障模块的数据?

问题分析与解决方案

你的核心问题在于:树莓派是主动持续读取GPIO引脚的电平状态,而Keyes红外避障模块通过PL2303串口输出的是状态变化触发的信号——只有当检测状态(有/无物体)发生改变时,模块才会发送串口数据;静止时状态不变,模块就不再发送新数据,导致你的Python程序收不到数据,但检测灯的电平是持续保持的,所以灯一直亮。

下面是两种解决思路:

思路一:修改Python代码,维护历史状态

既然模块只在状态变化时发数据,我们可以在代码中保存最后一次收到的状态,之后即使没有新数据,也持续输出该状态,模拟树莓派的持续采样效果。

修改后的代码示例

import serial
import time

# 初始化串口,设置timeout避免阻塞
ser = serial.Serial('COM3', 9600, timeout=0.3)
# 保存最后一次检测到的状态,初始为None表示未收到数据
last_detection_status = None

if ser.is_open:
    try:
        while True:
            # 读取所有可用的串口数据
            received_data = ser.read(ser.in_waiting)
            
            if received_data:
                # 解析数据(需根据模块实际输出调整,示例假设最后1字节为状态位)
                # 请自行测试:当检测到物体时模块输出的字节值,比如0x00代表有物体,0x01代表无
                current_status = received_data[-1]
                last_detection_status = current_status
                print(f"[状态更新] {'检测到物体' if current_status == 0 else '未检测到物体'}")
            elif last_detection_status is not None:
                # 无新数据,但有历史状态,持续输出当前状态
                print(f"[当前状态] {'检测到物体' if last_detection_status == 0 else '未检测到物体'}")
            else:
                print("[提示] 未收到模块数据,请检查接线与串口参数")
            
            time.sleep(0.3)
    except Exception as e:
        print(f"[错误] {str(e)}")
        ser.close()
else:
    print("[错误] 串口未能打开,请检查端口号与权限")

关键说明

  • 你需要自行测试模块的输出格式:比如当物体出现/消失时,模块发送的具体字节值,调整代码中current_status == 0的判断逻辑。
  • 代码通过last_detection_status变量保留最后一次的有效状态,在无新数据时重复输出,实现类似树莓派的持续状态反馈。

思路二:调整模块输出模式(如果支持)

部分Keyes红外避障模块支持通过跳线或串口指令切换输出模式,将“变化触发输出”改为“持续状态输出”。你可以查看模块的说明书:

  • 若有跳线,尝试切换到“持续输出”档位;
  • 若支持AT指令,发送对应指令(比如AT+MODE=CONT,具体指令需参考手册)让模块持续发送当前检测状态。

额外检查项

  • 确认PL2303与模块的接线:模块TX接PL2303 RX,模块RX接PL2303 TX,VCC电压匹配(模块一般支持3.3V/5V,PL2303需对应);
  • 串口波特率需与模块设置一致(你的代码用9600,确认模块波特率也是9600)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:02:39