目录

红外接收模块VS1838B


红外接收模块VS1838B

参考链接

参考链接2

本次使用的红外模块为VS1838B,遥控器采用NEC编码协议,下面为遥控器键码表和NEC协议波形图

下面是测试过程中的一些数据,整理如下,方便理解NEC协议及编写代码

解码重点:

每两个连续的时间差代表一个bit位,如上图,两值相加大于2000微秒则为1,否则为0

下面为参考网上程序进行的采集程序封装为vs1838.py

import machine
import utime
import micropythonmicropython.alloc_emergency_exception_buf(100)class VS1838B:def __init__(self, gpioNum):self.gpioNum = gpioNum#管脚初始化,并设置为上拉电阻gpioNum.init(machine.Pin.IN, machine.Pin.PULL_UP)#定义管脚出现电压变化时的回调函数,包含上升沿和下降沿gpioNum.irq(trigger=machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING,handler= self.__logHandler)self.logList = [0 for x in range(1000)]self.index = 0self.start = 0#所获得的遥控器键码self.redCode = self.__loop()#管脚发生变化时的回调函数def __logHandler(self, source):'''由于采用的是上拉电阻,使得管脚默认为高电平状态'''thisComeInTime = utime.ticks_us()#用于第一次发生管脚电压变化时的记录if self.start ==0:self.start = thisComeInTimeself.index = 0return#循环记录每次值self.logList[self.index] = utime.ticks_diff(thisComeInTime, self.start)self.start = thisComeInTimeself.index += 1#如果连续不停的按下某按键会出现数量超过1000的现象,这里做下初始化处理if self.index >= 1000:self.logList = [0 for x in range(1000)]self.index = 0self.start = 0#从获得的所有数据中拆出 数据码 和 数据反码def getUsefulCode(self, timeList):n=0for i in timeList:firstTimeTrue = (timeList[n] >= 8000) & (timeList[n]<= 10000)seconTimeTrue = (timeList[n+1] >= 4000) & (timeList[n+1]<= 5000)if firstTimeTrue & seconTimeTrue:return timeList[n+34: n+65]n += 1#将数据码转换为整数数组,高电平为1,低电平为0,注意这里的顺序与实际正好相反,所有从后往前进行解码def getBinCode(self, usefulCode):n=15binCodeList =[]for i in usefulCode:if (usefulCode[n]+usefulCode[n-1])>2000:binCodeList.append(1)else:binCodeList.append(0)n-=2if n<0:return binCodeListdef __loop(self):while True:utime.sleep_ms(200)if utime.ticks_diff(utime.ticks_us(),self.start) > 800000 and self.index > 0:thisIRcodeList = []n = 0for i in self.logList:#当被赋值的数据列表中有连续6个0时,则提取这6个0之前的数据作为全部数据if (self.logList[n] == 0) and (self.logList[n +1] == 0) and (self.logList[n +2] == 0) and (self.logList[n +3] == 0) and (self.logList[n +4] == 0) and (self.logList[n +5] == 0):#获得的所有数据print(thisIRcodeList)print(str(len(thisIRcodeList)))#从所有数据中拆分出有效数据码,同样也可以拆分出数据反码进行校验,这里省略usefulCode= self.getUsefulCode(thisIRcodeList)#print(usefulCode)#获取二进制整数数组binCode = self.getBinCode(usefulCode)#print(binCode)#把二进制整数数组转为10进制toInt = int("".join(map(str, binCode)),2)toInt = hex(toInt)#print(toInt)#返回键码前,把数据进行初始化,否则下次解析时会出错self.logList = [0 for x in range(1000)]self.index = 0self.start = 0return toIntelse:thisIRcodeList.append(i)n += 1

在主函数main.py中进行调用

#红外接收,并用遥控器的1键开灯,2键关灯
from red1838 import VS1838B
gpioNum = Pin(5)
p2 = Pin(2, Pin.OUT)
while True:try:print("红外接收键码")getcode = VS1838B(gpioNum=gpioNum) #红外模块未收到数据时会停留在这里codeValue = getcode.redCodeprint(codeValue)if str(codeValue) == "0x45":p2.off() #Open ledif str(codeValue) == "0x46":p2.on() #Close ledexcept:pass

基于MicroPython的ESP8266连接外设IO(二)相关推荐

  1. 基于STM32的ESP8266使用教程(二)

    写在前面:博主懒癌晚期,考研结束之后想着HAPPY一下,结果把这事忘了,开学了又有很多事情要干,直到昨天一博友留言(有邮件提醒),才想起有这么个坑要填,特来填坑.相关软件程序请参考"基于ST ...

  2. micropython中文社区 socket通讯_基于MicroPython结合ESP8266模块实现TCP通信(AT指令版)...

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 实验目的 - 学习ESP8266模块(ESP-01) ...

  3. ESP8266连接阿里云(二)烧录MQTT固件

    第一步.获取MQTT固件以及烧录固件 网盘链接分享:https://pan.baidu.com/s/1sz5VgUrwPglA4rcNoei3gA?pwd=6666 提取码: 6666 第二步.解压获 ...

  4. [树莓派 PICO(基于MicroPython)]基础教程02-按键测试、按键控制外设LED开关

    最近入手了pico学习. 目录 〇.总的参考 一.函数说明 二.硬件准备 三.程序-按键测试.按键控制外设LED开关 1.按键测试 2.按键控制外设LED开关 四.可能出现的问题 〇.总的参考 ①视频 ...

  5. 基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY

    DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY 正式DIY 一.本文参考的国外DIY项目 二.本文采用的模块和连接线路 1.ES ...

  6. RT-ThreadBearPi 开发笔记 -- 小熊派基于RT-Thread使用ESP8266进行网络连接

    小熊派基于RT-Thread使用ESP8266进行网络连接 物联网的概念和应用场景,最关键最必不可少的一个环节,就是联网.可以说,如果没有可靠的网络连接功能,那这个设备还不算是一个合格的物联网设备. ...

  7. 基于Arduino和ESP8266的连接手机热点实验(成功)

    一.实验介绍 上篇博客介绍了ESP8266的Arduino环境搭建,代码成功下载,说明环境搭建好了,ESP8266上面的灯可以根据代码修改参数闪烁 这篇blog介绍第2个实验:我们通过ESP8266连 ...

  8. 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云

    基于STM32+FreeRtos+DHT12+ESP8266+MQTT连接阿里云 1.概述 2.实现步骤 2.1.MQTT.fx模拟器与阿里云通信 2.2.STM32与阿里云通信 3. 搭建云平台 3 ...

  9. 基于stm32和ESP8266实现wifi模块smartlink功能以及TCP连接

    一直想把wifi模块和stm32连接起来,但是网上找了很久,并没有C语言相关的库,只有基于arduino的ESP8266 C++库,这个库是没办法直接给stm32使用的,所以自己动手丰衣足食,自己手动 ...

最新文章

  1. Telnet不是内部或外部命令解决办法
  2. html5的网页布局工具,HTML5网站响应式布局的主流设计方法介绍及工具推荐
  3. 5种Python逐行读取文件的方式
  4. 二十四、深入Python多线程和多进程
  5. CentOS 5.3 已经发布!
  6. php url无效,PHP解析URL并失去URL中的参数
  7. Android之使用PopupWindow使用和总结
  8. 第二章 数据的表示和运算 2.1.1 进位计数制 [计算机组成原理笔记]
  9. 成交量与股价关系的深度剖析 (一)
  10. MTK驱动开发(44)---如何对GPS下达清除辅助资讯的command
  11. 第二十一:基于Python2+Selenium3+Pytest4+Pytest-Html的UI自动化框架
  12. ASP.NET MVC5----了解我们使用的@HTML帮助类
  13. zabbix监控主动模式、被动模式、添加监控主机、添加自定义模板、处理图形乱码、自动发现...
  14. java图片转视频_java实现图片转换为视频
  15. python贝叶斯网络预测模型_高效灵活的概率建模方法基于Python
  16. Python入门基础-七、案例4 52周存钱挑战 #列表(list)#math 库#for循环#range()用法#函数的参数传递#datetime库
  17. hdu 1598 find the most comfortable road 枚举+最小成生树 kruskal 解题报告
  18. DFS入门级(模板)
  19. 8_gin日拱一足---异步和同步
  20. 网传癸酉本《石头记》之情榜

热门文章

  1. java 矢量_[Java教程]矢量图标的使用
  2. 【数值分析】拉格朗日插值法与牛顿插值法的C++实现
  3. 全加器--两种方法实现
  4. java课程设计 成绩_JAVA课程设计 学生成绩管理
  5. 信捷总线11轴伺服程序,本人原创,客户设备完美运行,plc程 序框架逻辑很顺畅,梯形图只有逻辑程序,不包含任何运算,运用大量c语言完美简化程序
  6. 长安奔奔Mini维修手册
  7. android studio复选按钮样式_Android 自定义CheckBoxPreference的CheckBox复选框
  8. 海康摄像头直播视频上传到流媒体服务器平台后如何降低延迟?(附TCP及UDP区别介绍)
  9. 银行暑期实习生面试经验
  10. 2022 ICPC 亚洲区域赛(杭州)赛后总结