Esp32基础(⑥红外遥控)

ESP32红外遥控通信规则与流程

 红外遥控器的通信规则(NEC 协议),可以把它想象成遥控器和 ESP32 之间的 “秘密语言”,核心是用「高低电平的持续时间」传递 0 和 1 的二进制数据

为什么用「高低电平时间」传数据?

红外遥控器发信号时,人眼看不到红外光,但可以通过 ** 电信号的 “高低变化”** 传递信息。
为了让接收端(ESP32)能识别,大家约定了一套规则:用不同长度的高电平表示 0 和 1,就像摩尔斯电码里 “短滴” 代表点(・)、“长滴” 代表划(—)。

 完整通信流程(NEC 协议)
遥控器按一下按键,会发出一段固定格式的信号,分 3 部分:
① 引导码 → ② 数据位(32 位) → ③ 停止位(可选)
(1)① 引导码:“我要发数据啦!”
作用:告诉接收端 “准备好,要传数据了”,相当于见面先打招呼。
格式:先低电平持续 9ms(电压接近 0V),再高电平持续 4.5ms(电压接近 3.3V)。
类比:就像发电报时,先敲一个 “长停顿 + 长音”,说 “注意,要发消息了”。
(2)② 数据位:32 位的 “二进制密码”
引导码之后,会传 4 个字节(32 位) 的数据,分成:

地址码(8 位):区分不同设备(比如电视、空调遥控器,地址码不同)。
地址反码(8 位):地址码的 “反码”(用于校验,防止传错)。
命令码(8 位):具体按键的功能(比如电源键、音量 +,每个按键对应一个码)。
命令反码(8 位):命令码的 “反码”(同样用于校验)。

每一位怎么传?
每一位用 “低电平 0.56ms + 高电平” 表示:

如果高电平持续 0.56ms → 代表二进制 0
如果高电平持续 1.68ms → 代表二进制 1

举个例子:
要传二进制 1010 0101,信号会是这样:
低0.56ms → 高1.68ms(1) → 低0.56ms → 高0.56ms(0) → ...

 ESP32 GPIO14接入IR

代码

from machine import Pin
import time

# 红外接收引脚(GPIO14)
IR_PIN = 14
ir_receiver = Pin(IR_PIN, Pin.IN, Pin.PULL_UP)

# 存储解码数据(4字节:地址码、地址反码、命令码、命令反码)
ir_data = [0, 0, 0, 0]
# 标记是否接收到完整数据
data_received = False

def decode_nec():
    """解码NEC协议红外信号"""
    global ir_data, data_received
    ir_data = [0, 0, 0, 0]  # 重置数据
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aaiier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值