esp32 python连接红外发送 micropython 红外接收 您所在的位置:网站首页 pi有什么用 esp32 python连接红外发送 micropython 红外接收

esp32 python连接红外发送 micropython 红外接收

2023-06-30 06:34| 来源: 网络整理| 查看: 265

最近在看如何使用树莓派遥控房间的空调。具体的方案大概就是把树莓派透过frp映射到公网的服务器上,再通过ssh访问公网连接树莓派做出指令。这个指令的目标暂时定为遥控房间空调,以后其实还能拓展。

校网环境下,在自己寝室内都ssh不到自己的pi,所以frp其实已经试用过一段时间了,但是红外遥控的问题一直没解决。似乎网上有些资料,同学说其实有现成的,然而我这个菜鸡还是多多实践为妙。

主要的参考是这两篇:

树莓派给家用电器加上智能(红外篇)【智能电表】格力空调遥控器红外协议

于是慢慢地就对红外协议起了点兴趣,录了几段信号后,发现自己的型号似乎没有精确地匹配第二篇文章中的信号,而且那个校验码的公式似乎是错的。于是就想自己收集点数据玩玩。

红外协议原理

透过lirc的mode2收到的数据是这样的:

pulse 612 space 592 pulse 612 space 593 pulse 610 space 1691 pulse 611 space 593 pulse 611 space 594 pulse 611 space 594 pulse 610 space 1689 pulse 612 space 594 pulse 614 ……

红外信号是通过高低电平的时间作为语言的,最基本的单位是0和1,特殊的单位有起始码和连接码。

pulse 610 space 1689

以上这种我们可以称为“1”。(本医学狗感觉称为“0”似乎也没有问题。)

pulse 612 space 592

这种算是“0”,数字因为接收或者发射端的种种原因是有浮动的。“1”和“0”占据了大部分的信号内容。

像第二篇文章中就指出,

0的电平宽度为:600us低电平+600us高电平, 1的电平宽度为:600us低电平+1600us高电平 起始码S电平宽度为:9000us低电平+4500us高电平 连接码C电平宽度为:600us低电平+20000us高电平

数据处理改写为0/1

要把一大堆数据改成1/0乃至能看懂的表格则需要对数据进行一些处理…

把终端中的信号内容都放到一个txt文件把文件后缀改为csv 或者你直接创建一个csv文件

接着就开始代码了:

import csv filename = '/Users/ydchen/desktop/AC Data/3.csv' with open(filename) as f: raw_data = list(csv.reader(f, delimiter=' ')) n=len(raw_data) db=list() sequence='' i=0 while (i < n-1): d1=raw_data[i] d2=raw_data[i+1] #确保以pulse数据起始 if (d1[0]!='pulse'): i+=1 else: i+=2 d1[1]=int(d1[1]) d2[1]=int(d2[1]) if (d1[1] in range(8500,9500) and d2[1] in range(4000,5000)): sequence=sequence.split(',') #筛选符合格式的数据,问题是错误数据的产生途径暂时不明确 if len(sequence[0])==35 and len(sequence[1])==32: db.append(sequence) sequence='' elif (d1[1] in range(500,700) and d2[1] in range(19000,21000)): sequence = sequence+',' elif (d1[1] in range (500,700) and d2[1] in range (500,700)): sequence = sequence+'0' elif (d1[1] in range (500,700) and d2[1] in range (1500,2000)): sequence = sequence+'1'

raw data处理其实已经结束了。print (db) 就可以看我们得到的转为0/1的raw data。

写入CSV文件

但实际上,我们还可以更进一步地指出数据的各种特征。但是我这里的代码写得就非常啰嗦了:

#'35码','32码','检验码','开关','模式','温度','风速','上下扫风','左右扫风','健康节能','干燥辅热','温度显示','定时','超强','睡眠','灯光' for data in db: c35=data[0] c32=data[1] #35码解码 mode=c35[0:3] #模式,str[:]右不取等号,只有同一方向 if mode=='000': data.append('0自动') elif mode=='100': data.append('1制冷') elif mode=='010': data.append('2加湿') elif mode=='110': data.append('3送风') elif mode=='001': data.append('4制热') swit=c35[3:4] #开关 data.append(swit) fans=c35[4:6] #风速 data.append(int(fans[::-1], 2)) swee=c35[6:7] #扫风 data.append(swee) slee=c35[7:8] #睡眠 data.append(slee) temp=c35[9:13] #温度 temp=int(temp[::-1], 2)+16 data.append(temp) time=c35[13:20] #定时 data.append(time) supe=c35[20:21] #超强 data.append(supe) ligh=c35[21:22] #灯光 data.append(ligh) heal=c35[22:23] #健康 data.append(heal) drye=c35[23:24] #干燥 data.append(drye) vent=c35[24:25] #通风 data.append(vent) nca1=c35[25:35] #非编码区1 data.append(nca1) #32码解码 updo=c32[0:1] #上下扫风 data.append(updo) nca2=c32[1:4] #非编码区2 data.append(nca2) left=c32[4:5] #左右扫风 data.append(left) nca3=c32[5:8] #非编码区3 data.append(nca3) disp=c32[8:10] #温度显示 data.append(disp) nca4=c32[10:26] #非编码区4 data.append(nca4) savi=c32[26:27] #节能 data.append(savi) nca5=c32[27:28] #非编码区5 data.append(nca5) encr=c32[28:32] #校验码 data.append(int(encr[::-1], 2)) #写入output with open('/Users/ydchen/desktop/AC Data/output.csv', 'a') as output: writer = csv.writer(output) for data in db: writer.writerow(data)问题干什么用?许多方法似乎可以用在基因序列的处理上,待学习。了解和巩固python数据处理的知识。有什么问题?电脑似乎用来处理Excel 文件的xlrt有些问题,待解决。csv转Excel一直出错,我点了数据类型为text,但是还是吞我数据的“0”并且改成科学计数法,不知道PC有没有相同问题。校验码似乎受到模式、温度、左右扫风、定时等变量影响,具体方式待研究。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有