最近接到李工的邀请,想弄一下红外的发射与接收,因为手头没有红外发射管,所以先研究了一下红外接收。
先百度了一下原理,经过练习给屏幕写驱动,看这类的原理图时已经没有那么发怵了,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 红外接收相关推荐

  1. ESP32开发板开源啦 ESP32-IOT-KIT全开源物联网开发板

    鸽了已久的 ESP32开发板计划 终于赶在年前与大家见面了,本来上个月就能一睹芳容的,无奈年末好多事儿堆在一起,又碰巧手机出了问题,以前的照片全部丢失.为不影响开源效果,这期间一直在完善资料,Gith ...

  2. 用ESP32与Python实现物联网(IoT)火焰检测报警系统

     下图是本案例除硬件连线外的3步导学开发过程,每个步骤中实现的功能请参考图中的说明.在硬件连线完成之后我们建议您先使用"一分钟上云体验"功能预先体验本案例的实际运行效果. 1.简介 ...

  3. esp32的智能遥控

    文章目录 一.演示视频 二.程序框架 三.硬件设计 四.模块介绍 1.语音识别模块 离线语音识别 优化语音识别 2.BLE模块 3.MQTT模块 3.1.命令下发 3.2.设备属性上报 3.3.平台查 ...

  4. ESP32 开发笔记(三)源码示例 13_IR_Send_RMT 使用RMT实现红外数据发送(NEC编码)

    开发板购买链接 https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=62636 ...

  5. ESP32实现红外遥控 红外发射与接收实现原理

    文章目录 一,原理 1.1 概括 1.2,时钟 1.3,认识 item 1.4,发射/接收器 1.5 电路原理图 1.5.1,发射电路 1.5.2 ,接收电路 二,红外发射 2.1 整体的思路 2.2 ...

  6. 基于ESP32与phyphox的DIS实验制作(5)-基于无线光电门的速度传感器制作

    上两篇我们讲到了基于ESP32自带的电压传感器,以及外接创客常用的超声波测距模块.实验本身没有什么创意,仅仅是用自制的传感器来实现普通的DIS设备都能实现的功能.但是在这一篇,我们将会在自制DIS实验 ...

  7. 【ESP32】8.红外遥控实验(红外遥控解码库)

    上一篇: [ESP32]7.按键实验(中断) 前言: 先放电路连接图: 红外接收头的IC是一种受光元件,其内部是将发光二极管和集成IC组合封装而成,其IC设计主要以类比式控制,一般主要接收38KHz频 ...

  8. ESP32 开发笔记(一) 开发板简介

    开发板购买链接https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=626366 ...

  9. esp32 camera_利用Phyphox和ESP32蓝牙制作欧姆表测电阻

    近日,微主在利用Phyphox和ESP32蓝牙研究热敏电阻的阻值与温度的关系时,需要绘制热敏电阻阻值与时间的关系图像,通过用手捏住或者放开热敏电阻,观察电阻与时间关系图像的变化情况,进而了解温度对热敏 ...

  10. thinkphp6 接收不到数据_单片机红外接收与红外发射

    1. 红外接收1.1 说明1.2 NEC协议1.3 关于红外接收的波形1.4 解码1.4 红外对射思考2. 红外发射2.1 红外发射管参数2.2 红外发射电路搭建2.3 程序设计2.5 实验结果2.4 ...

最新文章

  1. php sql count函数,SQL COUNT() 函数
  2. linux安装nginx、php
  3. awk 查看ip连接数(常见应用一)
  4. C3P0数据库连接池
  5. java读取excel图表模板,修改选值范围
  6. 电动汽车蒙特卡洛分析matlab 通过matlab程序编写电动汽车蒙特卡洛模型
  7. 脑电时频分析I:谱分析
  8. web前端经典面试题及答案
  9. flink实战—时间窗口(Time Windows)的原理和使用
  10. 计算机按键截图,怎么截图快捷键-如何给windows软件设定快捷键(截图工具、计算器、记事本等)...
  11. Unity3D场景性能优化/渲染/卡顿/搭建优化 遮挡剔除/层消距离技术/LOD(多层次细节)
  12. vue-json-editor json编辑器
  13. 数据分析和数据挖掘的概念和理念
  14. 文献阅读:Scaling Instruction-Finetuned Language Models
  15. 解密一个量化对冲基金开发人员的工作内容
  16. 交通违章处罚归来 差4Km驾照就没有了,好险!
  17. Centos7+MySQL8(基于tar.gz压缩文件安装)
  18. Excel如何制作工资条,Leo老师来教你
  19. linux下grep命令用法,全面详解linux下grep命令的用法
  20. Visual Studio中无法打开源文件

热门文章

  1. Java个人资产管理系统问题总结
  2. 很多网友问那个磁力搜索站好用,就由本君说说吧!
  3. EXCEL 2016 冻结窗口(首行首列,多行多列)
  4. mac移动硬盘安装windows
  5. python+appium出现selenium.common.exceptions.WebDriverException: Message: Method has not yet been imple
  6. 树莓派与DHT11温度传感器的那些事儿
  7. 重建同义词+oracle,Oracle中创建,删除同义词 Synonym
  8. CPU内部架构与工作原理
  9. vue项目启动后,页面显示空白
  10. 解决 Refused to display in a frame because it set 'X-Frame-Options' to 'deny'.问题