esp32 红外接收
最近接到李工的邀请,想弄一下红外的发射与接收,因为手头没有红外发射管,所以先研究了一下红外接收。
先百度了一下原理,经过练习给屏幕写驱动,看这类的原理图时已经没有那么发怵了,NEC编码的红外发射看起来还是比较简单的,其实我最佩服的是发明这些编码规则的人,优雅而精准。
在树莓派上找到了一个范例,进一步降低了难度,现在主要做的就是移植代码了,到这里整个工作思路已经很清晰了:
1.读懂红外编码规则;
2.尽量找到类似源码移植或者改写,实在没有就和能从零开始自己写;
3.找到了代码,读懂代码;
4.开始移植
5.测试
整个过程还算顺利,用了不到一天时间,中间还回家休息了,不过一直在琢磨这个事儿,主要是一句树莓派的专有函数卡住了我一会儿,现在理顺后,对什么时序图之类的解读都比较流畅了。
上代码:
# -*- coding:utf-8 -*-
from machine import Pin
import time
ERROR = 0xFE
PIN = 19#定义红外接收器引脚
keymap = {0x45:"1", 0x46:"2", 0x47:"3", 0x44:"4", 0x40:"5", 0x43:"6", 0x07:"7", 0x15:"8", 0x09:"9", 0x19:"0", 0x16:"*", 0x0D:"#", 0x18:"up", 0x52:"down", 0x1C:"ok", 0x08:"left", 0x5A:"right",0xfe:0xfe
}recive=Pin(19,Pin.IN,Pin.PULL_UP)def getKey(): byte = [0, 0, 0, 0]if IRStart() == False: #判断红外引导脉冲time.sleep(0.11) # One message frame lasts 108 ms.return ERRORelse:for i in range(0, 4):byte[i] = getByte() #接收32位红外数据(地址、地址反码、数据、数据反码)if byte[0] + byte[1] == 0xff and byte[2] + byte[3] == 0xff: #校验接收数据是否正确
# print(byte[0],byte[2])return byte[2]else:#print("error")return ERROR#return byte[2]
def IRStart(): #判断红外引导脉冲timeFallingEdge = [0, 0]timeRisingEdge = 0timeSpan = [0, 0]#通过脉冲上升沿和下降沿读取脉冲时间while recive.value() == 1:passif recive.value() == 0:t0=time.ticks_us() #开始时间while recive.value() == 0: #等待脉冲高电平结束passt1=time.ticks_us() #结束时间timeSpan[0]=t1-t0while recive.value()==1:passif recive.value()==0:t2=time.ticks_us()timeSpan[1]=t2-t1
# print(timeSpan[0],timeSpan[1])if timeSpan[0] > 8500 and timeSpan[0] < 9500 and timeSpan[1] > 4000 and timeSpan[1] < 5000:#print("1")return Trueelse:#print("0")return False
def getByte(): #接收32位红外数据(地址、地址反码、数据、数据反码)byte = 0timeRisingEdge = 0timeFallingEdge = 0timeSpan = 0for i in range(0, 8):#通过脉冲上升沿和下降沿读取脉冲时间while recive.value() == 0:passif recive.value() == 1:t3=time.ticks_us()while recive.value() == 1: #等待脉冲高电平结束passt4=time.ticks_us() #结束时间timeSpan=t4-t3if timeSpan > 1500 and timeSpan < 1700: #判断脉冲是否为代表1byte |= 1 << ireturn bytedef change_map(key_val):for index in keymap.keys():if index == key_val :return keymap[index]print('Test Start ...')
while True:key = change_map(getKey())if(key != ERROR): #打印红外脉冲值print("按下的是:" + key)
下一步该开始研究发射端了,这部分稍微困难一点,原理已经通过研究接收端的时候搞懂了,难的是目前还没有找到类似的源码,很可能要重头来了,不过好的方面是如果搞懂了这个,那么下一步我就可以自己做一个遥控器了。等淘宝买的红外发射管到位之后继续。
esp32 红外接收相关推荐
- ESP32开发板开源啦 ESP32-IOT-KIT全开源物联网开发板
鸽了已久的 ESP32开发板计划 终于赶在年前与大家见面了,本来上个月就能一睹芳容的,无奈年末好多事儿堆在一起,又碰巧手机出了问题,以前的照片全部丢失.为不影响开源效果,这期间一直在完善资料,Gith ...
- 用ESP32与Python实现物联网(IoT)火焰检测报警系统
下图是本案例除硬件连线外的3步导学开发过程,每个步骤中实现的功能请参考图中的说明.在硬件连线完成之后我们建议您先使用"一分钟上云体验"功能预先体验本案例的实际运行效果. 1.简介 ...
- esp32的智能遥控
文章目录 一.演示视频 二.程序框架 三.硬件设计 四.模块介绍 1.语音识别模块 离线语音识别 优化语音识别 2.BLE模块 3.MQTT模块 3.1.命令下发 3.2.设备属性上报 3.3.平台查 ...
- ESP32 开发笔记(三)源码示例 13_IR_Send_RMT 使用RMT实现红外数据发送(NEC编码)
开发板购买链接 https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=62636 ...
- ESP32实现红外遥控 红外发射与接收实现原理
文章目录 一,原理 1.1 概括 1.2,时钟 1.3,认识 item 1.4,发射/接收器 1.5 电路原理图 1.5.1,发射电路 1.5.2 ,接收电路 二,红外发射 2.1 整体的思路 2.2 ...
- 基于ESP32与phyphox的DIS实验制作(5)-基于无线光电门的速度传感器制作
上两篇我们讲到了基于ESP32自带的电压传感器,以及外接创客常用的超声波测距模块.实验本身没有什么创意,仅仅是用自制的传感器来实现普通的DIS设备都能实现的功能.但是在这一篇,我们将会在自制DIS实验 ...
- 【ESP32】8.红外遥控实验(红外遥控解码库)
上一篇: [ESP32]7.按键实验(中断) 前言: 先放电路连接图: 红外接收头的IC是一种受光元件,其内部是将发光二极管和集成IC组合封装而成,其IC设计主要以类比式控制,一般主要接收38KHz频 ...
- ESP32 开发笔记(一) 开发板简介
开发板购买链接https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=626366 ...
- esp32 camera_利用Phyphox和ESP32蓝牙制作欧姆表测电阻
近日,微主在利用Phyphox和ESP32蓝牙研究热敏电阻的阻值与温度的关系时,需要绘制热敏电阻阻值与时间的关系图像,通过用手捏住或者放开热敏电阻,观察电阻与时间关系图像的变化情况,进而了解温度对热敏 ...
- thinkphp6 接收不到数据_单片机红外接收与红外发射
1. 红外接收1.1 说明1.2 NEC协议1.3 关于红外接收的波形1.4 解码1.4 红外对射思考2. 红外发射2.1 红外发射管参数2.2 红外发射电路搭建2.3 程序设计2.5 实验结果2.4 ...
最新文章
- php sql count函数,SQL COUNT() 函数
- linux安装nginx、php
- awk 查看ip连接数(常见应用一)
- C3P0数据库连接池
- java读取excel图表模板,修改选值范围
- 电动汽车蒙特卡洛分析matlab 通过matlab程序编写电动汽车蒙特卡洛模型
- 脑电时频分析I:谱分析
- web前端经典面试题及答案
- flink实战—时间窗口(Time Windows)的原理和使用
- 计算机按键截图,怎么截图快捷键-如何给windows软件设定快捷键(截图工具、计算器、记事本等)...
- Unity3D场景性能优化/渲染/卡顿/搭建优化 遮挡剔除/层消距离技术/LOD(多层次细节)
- vue-json-editor json编辑器
- 数据分析和数据挖掘的概念和理念
- 文献阅读:Scaling Instruction-Finetuned Language Models
- 解密一个量化对冲基金开发人员的工作内容
- 交通违章处罚归来 差4Km驾照就没有了,好险!
- Centos7+MySQL8(基于tar.gz压缩文件安装)
- Excel如何制作工资条,Leo老师来教你
- linux下grep命令用法,全面详解linux下grep命令的用法
- Visual Studio中无法打开源文件
热门文章
- Java个人资产管理系统问题总结
- 很多网友问那个磁力搜索站好用,就由本君说说吧!
- EXCEL 2016 冻结窗口(首行首列,多行多列)
- mac移动硬盘安装windows
- python+appium出现selenium.common.exceptions.WebDriverException: Message: Method has not yet been imple
- 树莓派与DHT11温度传感器的那些事儿
- 重建同义词+oracle,Oracle中创建,删除同义词 Synonym
- CPU内部架构与工作原理
- vue项目启动后,页面显示空白
- 解决 Refused to display in a frame because it set 'X-Frame-Options' to 'deny'.问题