如何使用CircuitPython控制Samsung电视的红外发射

来源:网站建设作者:卡拉米头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何使用CircuitPython控制Samsung电视的红外发射》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何使用CircuitPython控制Samsung电视的红外发射》有用,将其分享出去将是对创作者最好的鼓励。

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

如何使用CircuitPython控制Samsung电视的红外发射

硬件准备

实现这个功能需要准备以下硬件:

  • 支持CircuitPython的开发板,比如树莓派Pico等
  • 红外发射管一个
  • 220欧姆限流电阻一个
  • 杜邦线若干

硬件连接方式

红外发射管的连接方法如下:

  • 红外发射管的长脚(正极)串联220欧姆电阻后,连接到开发板的GPIO引脚,这里选择GP15引脚为例
  • 红外发射管的短脚(负极)连接到开发板的GND引脚

Samsung电视红外协议说明

Samsung电视的红外协议采用NEC编码格式,基本参数如下:

参数项参数值
载波频率38kHz
引导码9ms高电平+4.5ms低电平
数据位0560us高电平+560us低电平
数据位1560us高电平+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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。