"""
******************************************************************************
* @file remote.py
* @author
* @version V1.0
* @date 2023-12-01
* @brief 红外接收驱动
* 定制开发,技术V:349014857
* 更多例程:https://iot666.blog.csdn.net/
* 开发咨询:http://doc.yotill.com
"""
from machine import Pin
import time
"""
* 定义红外接收类
"""
class REMOTE_IR(object):
# 定义键值及内容
REMOTE_CODE = {
0: "ERROR", 162: "POWER", 98: "UP",
2: "PLAY", 226: "ALIENTEK", 194: "RIGHT",
34: "LEFT", 224: "VOL-", 168: "DOWN",
144: "VOL+", 104: "1", 152: "2",
176: "3", 48: "4", 24: "5",
122: "6", 16: "7", 56: "8",
90: "9", 66: "0", 82: "DELETE"
}
# 红外接收初始化
def __init__(self, gpio_num):
self.irRecv = Pin(gpio_num, Pin.IN, Pin.PULL_UP)
self.irRecv.irq(trigger = Pin.IRQ_RISING | Pin.IRQ_FALLING, handler = self.ex_handler) # 配置中断信息
# 声明变量
self.ir_step = 0
self.ir_count = 0
self.rx_buf = [0 for i in range(64)]
self.rx_ok = False
self.cmd = None
self.repeat = 0
self.t_ok = None
self.start = 0
self.start_last = 0
# 红外接收回调函数
def ex_handler(self, source):
"""
中断回调函数
"""
thisComeInTime = time.ticks_us()
# 更新时间
curtime = time.ticks_diff(thisComeInTime, self.start)
self.start = thisComeInTime
if curtime >= 8500 and curtime <= 9500:
self.ir_step = 1
return
if self.ir_step == 1:
if curtime >= 4000 and curtime <= 5000:
self.ir_step = 2
self.rx_ok = False
self.ir_count = 0
elif curtime >= 2000 and curtime <= 3000: # 长按重复接收
self.ir_step = 3
self.repeat += 1
elif self.ir_step == 2: # 接收4个字节
self.rx_buf[self.ir_count] = curtime
self.ir_count += 1
if self.ir_count >= 64:
self.rx_ok = True
self.t_ok = self.start # 记录最后ok的时间
self.ir_step = 0
elif self.ir_step == 3: # 重复
if curtime >= 500 and curtime <= 650:
self.repeat += 1
# 检测命令
def check_cmd(self):
one_byte = 0
for i in range(32):
x = i * 2
t = self.rx_buf[x] + self.rx_buf[x + 1]
one_byte <<= 1
if t >= 1800 and t <= 2800:
one_byte += 1
cmd_data = (one_byte & 0x0000ff00) >> 8
self.cmd = cmd_data
# 红外解码
def remote_scan(self):
# 接收到数据
if self.rx_ok:
self.check_cmd()
self.rx_ok = False
# 获取对应按钮字符
s = self.REMOTE_CODE.get(self.cmd)
return self.cmd,s
没有合适的资源?快使用搜索试试~ 我知道了~
嵌入式物联网实战开发例程14-ESP32红外遥控器IR接收及解码(MicroPythion版例程).rar
共3个文件
py:2个
url:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 127 浏览量
2024-04-17
23:05:43
上传
评论
收藏 3KB RAR 举报
温馨提示
1、嵌入式物联网ESP32项目实战开发。例程经过精心编写,简单好用。 2、代码使用MicroPythion开发。例程在ESP32-S3上运行。若在其他型号上运行,请自行调整。 3、如果接入其他传感器,请查看发布的其他资料。 4、ESP32与模块的接线,在代码当中均有定义,请自行对照。 5、若硬件差异,请根据自身情况适当调整代码,程序仅供参考。 6、代码有注释说明,请耐心阅读。 7、技术v:349014857;
资源推荐
资源详情
资源评论
收起资源包目录
嵌入式物联网实战开发例程14_ESP32红外遥控器IR接收及解码(MicroPythion版例程).rar (3个子文件)
嵌入式物联网实战开发例程14_ESP32红外遥控器IR接收及解码(MicroPythion版例程)
remote.py 3KB
main.py 3KB
技术答疑,双击打开.url 121B
共 3 条
- 1
资源评论
物联技术666
- 粉丝: 2819
- 资源: 839
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功