本文将详细介绍如何在 树莓派 Pico 开发板 上使用 红外线接收模块(HX1838 型号),结合开源的 pico_ir 库,轻松捕获红外遥控器发射的信号。按照本教程的步骤操作,你即可快速掌握红外信号的读取与转发方法。
一、前期准备:下载并上传 pico_ir 库文件
- 下载完整的 pico_ir 库压缩包,解压后得到名为 pico_ir 的文件夹。
- 将整个 pico_ir 文件夹上传至树莓派 Pico 的 根目录。建议使用 Thonny 的 File 功能框 完成上传操作。
小提示: 上传前请确保 Pico 已通过 USB 线连接至电脑,且 Thonny 能够正常识别设备。
二、硬件接线说明
红外线接收模块(HX1838)共有三个引脚,按下表连接树莓派 Pico:
- 模块 + 引脚 → 树莓派 Pico 的 VSYS
- 模块 – 引脚 → 树莓派 Pico 的 GND
- 模块 S 引脚 → 树莓派 Pico 的 GP28
三、编程实现
3.1 导入 pico_ir 库的注意事项
由于 pico_ir 库存放于 Pico 根目录的 pico_ir 文件夹内,无法直接使用常规的 import pico_ir 方式导入。必须在代码开头添加以下两行,以指定库的路径:
import sys
sys.path.append('pico_ir')
注意: 如果缺少这两行代码,运行时将提示 找不到 pico_ir 模块。
3.2 完整代码示例
以下代码可实现读取红外遥控器按键编码,并在 Shell 窗口中显示。请将代码保存为 main.py,并上传至 Pico 的根目录。
import utime
import sys
sys.path.append('pico_ir')
from machine import Pin
from pico_ir import read_code, send_code, validate_code, InvalidCodeException
pin_in = Pin(28, Pin.IN, Pin.PULL_UP)
pin_out = Pin(21, mode=Pin.OUT)
while True:
out = read_code(pin_in)
# ignore random signals
if out:
try:
validate_code(out)
print(out)
utime.sleep_ms(100)
send_code(pin_out, out)
except InvalidCodeException:
print("InvalidCodeException:" + out)
四、运行效果展示
运行上述代码后,将红外遥控器对准 HX1838 接收头按下任意按键,Thonny 的 Shell 窗口 将显示对应的按键编码(例如:0xFF00FF00)。
效果截图:

若希望在接收到特定按键编码后执行其他操作(如点亮 LED、控制电机等),可在代码中加入 if 判断语句,并编写相应的处理逻辑。例如:
if out == "0xFF00FF00":
# 执行自定义操作
print("电源键按下!")
五、常见问题及解决方法
问题1:运行后出现 ImportError: no module named 'pico_ir' 错误
原因: 未正确添加库路径,或 pico_ir 文件夹未上传至根目录。
解决办法: 请确认代码开头已添加 sys.path.append('pico_ir'),并检查 pico_ir 文件夹是否位于 Pico 的根目录(可通过 Thonny 的文件管理器查看)。
问题2:按下遥控器按键后,Shell 无任何输出
原因: 硬件连接有误,或遥控器协议不兼容(常见为 NEC 协议)。
解决办法: 检查接线是否正确:+ 脚接 VSYS,– 脚接 GND,S 脚接 GP28。若遥控器非标准 NEC 协议,可尝试更换遥控器。此外,可调整 pin_in 的上拉电阻设置(例如改为 Pin.IN, Pin.PULL_DOWN)。
问题3:Shell 频繁输出 InvalidCodeException 异常
原因: 接收到的红外信号不完整或存在干扰(如环境光、其他红外设备)。
解决办法: 代码中已通过 validate_code 过滤无效信号,属正常现象。若频繁出现,可尝试在接收时增加 utime.sleep_ms(10) 延时,或改善接收模块与遥控器之间的直线距离。
六、扩展提示与进阶建议
- 提示: 如需发送红外信号(如复制遥控器功能),代码中已包含
send_code函数,但需额外连接红外发射模块(接 GP21)。 - 本教程使用 GP28 作为接收引脚,你也可以更换为其他可用 GPIO,记得同步修改代码中的
Pin(28)。 - 若发现接收距离较短,可为红外接收模块的 VSYS 引脚提供 3.3V 供电(或 5V 供电,但需注意 Pico 的 GPIO 耐压)—— 使用 VSYS 是兼顾稳定性与便捷性的推荐方案。
完成以上步骤后,你已掌握了在树莓派 Pico 上使用 HX1838 红外接收模块的基础方法。现在可以动手尝试开发更多有趣的红外控制项目了!
