ESP32配置RMT接收功能

懒癌晚期,一个月没更了(逃

一 什么是RMT?能干啥?

RMT(Remote Control)即红外遥控,通过红外传输数据。学单片机的时候,不管是51还是stm32,肯定有个红外遥控。而且做得都是接收数据解析,想要控制空调之类的家电要干的事居多

二 首先是怎么通过红外传输数据

数字信号->模拟信号->红外光线->模拟信号->数字信号

主要的工作就是把数字信号调制成红外信号再将红外信号解调成数字信号。最简单的当然是直接把灯亮灭当0/1,但是如何排除干扰项呢?显然这是不行的。一般而言,红外传输是先把数据转化为NEC格式的编码或者PPM编码,之后再将数据加载到载波信号(一般为38KHz)上完成调制过程。

调制过程

三 具体的API调用

信号调制过程可以使用定时器+PWM信号完成,本憨批一开始就是这么做的…后来发现乐鑫的ESP32提供了RMT功能的API:官方API参考

初始化

通过初始化结构体 rmt_config_t ,再调用函数_rmt_config(_)和_rmt_driver_install()_完成配置,需要注意的是esp32默认的内存块只能存下63bit的数据,空调这些绝对不是什么省油的灯,需要将mem_block_num设置为2。126应该够大多数场景用了。

红外接收初始化函数

接下来是数据的解析,读取缓存区并将数据打印出来。缓存的数据是保存在rmt_item32_t结构体中 ,该结构体主要成员为level0,duration0,level1,duration1.即两组电平、时间。

打印出来的数据

看到打印出来的数据后需要自行解析了