使用CircuitPython控制Samsung电视的红外发射,核心是通过红外发射管发送符合Samsung电视红外协议的电平信号,让电视识别并响应对应的操作指令。整个过程不需要复杂的硬件设计,只要准备好对应的开发板和红外元件,配合正确的编码逻辑就能实现。

硬件准备
实现这个功能需要准备以下硬件:
- 支持CircuitPython的开发板,比如树莓派Pico等
- 红外发射管一个
- 220欧姆限流电阻一个
- 杜邦线若干
硬件连接方式
红外发射管的连接方法如下:
- 红外发射管的长脚(正极)串联220欧姆电阻后,连接到开发板的GPIO引脚,这里选择GP15引脚为例
- 红外发射管的短脚(负极)连接到开发板的GND引脚
Samsung电视红外协议说明
Samsung电视的红外协议采用NEC编码格式,基本参数如下:
| 参数项 | 参数值 |
|---|---|
| 载波频率 | 38kHz |
| 引导码 | 9ms高电平+4.5ms低电平 |
| 数据位0 | 560us高电平+560us低电平 |
| 数据位1 | 560us高电平+1690us低电平 |
| 结束码 | 560us高电平 |
每个按键对应的32位数据格式为:16位用户码+8位数据码+8位数据码反码,Samsung电视的用户码通常为0xE0E0。
CircuitPython代码实现
首先需要在开发板上安装CircuitPython固件,然后上传以下代码:
import time
import board
import pwmio
# 配置PWM引脚,生成38kHz载波
pwm = pwmio.PWMOut(board.GP15, frequency=38000, duty_cycle=0)
# 发送指定时长的脉冲
def send_pulse(duration_us):
pwm.duty_cycle = 32768 # 50%占空比
time.sleep(duration_us / 1000000)
pwm.duty_cycle = 0
time.sleep(duration_us / 1000000)
# 发送NEC编码的单个位
def send_bit(bit):
if bit == 0:
# 数据位0:560us高+560us低
send_pulse(560)
time.sleep(560 / 1000000)
else:
# 数据位1:560us高+1690us低
send_pulse(560)
time.sleep(1690 / 1000000)
# 发送完整的NEC编码帧
def send_nec_frame(user_code, data_code):
# 引导码:9ms高+4.5ms低
send_pulse(9000)
time.sleep(4500 / 1000000)
# 发送16位用户码,低位在前
for i in range(16):
bit = (user_code >> i) & 0x01
send_bit(bit)
# 发送8位数据码,低位在前
for i in range(8):
bit = (data_code >> i) & 0x01
send_bit(bit)
# 发送8位数据码反码
inverse_code = data_code ^ 0xFF
for i in range(8):
bit = (inverse_code >> i) & 0x01
send_bit(bit)
# 结束码:560us高
send_pulse(560)
# Samsung电视电源键的数据码,不同型号可能有差异,可根据实际调整
POWER_CODE = 0x40BF
while True:
# 按下开发板上的按键(这里假设GP0接了按键,按下时发送信号)
if not board.GP0.value:
send_nec_frame(0xE0E0, POWER_CODE)
time.sleep(0.1) # 消抖
while not board.GP0.value:
time.sleep(0.01)
time.sleep(0.01)
代码调试说明
如果发送信号后电视没有响应,可以按照以下步骤排查:
- 检查红外发射管是否正对电视的红外接收窗口,距离不要超过5米
- 确认PWM频率是否设置为38kHz,占空比是否为50%
- 核对Samsung电视的用户码和数据码是否正确,不同型号的电视可能使用不同的编码,可以通过红外接收模块抓取原遥控器的编码来匹配
- 检查硬件连接是否牢固,限流电阻是否接对,避免电流过大烧坏发射管
扩展功能
除了电源键,还可以添加其他常用按键的控制,只需要替换对应的数据码即可,比如音量加的数据码为0x20DF,音量减的数据码为0xA05F,频道切换、菜单等功能的编码都可以通过同样的方式获取并添加到代码中。
CircuitPythonSamsung_电视红外发射红外遥控修改时间:2026-06-21 13:48:27