描述
<p>简要介绍作品:
本作品是在原浴霸控制面板的基础,进行二次开发。由于原面板的控制功能简单,不满足个人的需求,因此进行一次大改造,初步的想法是:1.增加无线通讯,接入米家(家里都是米家的系统)。2.支持无线升级功能,方便升级代码,无需拆卸。3.对控制功能进行重新定义,比如长按关闭键,延时一段时间再关闭等等</p>
<p>【请在竞赛阶段填写 ↓】
* 一、作品详情;
本作品经历1周艰难调试后,终于在今天最后的1小时解决了所有的技术问题。目前它能够实现433无线遥控面板控制、接入了米家(实际上也是用红外转433无线改的)、基于433M频率无线远程升级、长按按钮可分别自定义多个无线遥控码等。下面我来介绍下本作品:
1.功能结构模型
<img src="//image.lceda.cn/pullimage/BApxWbENw1i9iJUHB9MqSXeeeAycFuRgaHJWBPjW.png" alt="微信图片_20190922232926.png">
2.功能实现原理说明
先说最不复杂的吧,随意贴面板实际上就是一个433M的无线遥控器,某宝上淘了一个,用用还是能用,就是左边一个按钮有时候响应时间较长,不影响,它发射出的无线码是23位的,有些遥控器是39位,浴霸控制器对其进行解码,比对后执行相关的操作,当浴霸控制器长按9秒以上,会进行闪烁,每次会隔1秒多闪烁1下,以区分不同遥控码的功能,此操作用来记录遥控码。米家的系统用的是万能红外遥控器+红外转射频模块,也是某宝上找的,原理类似,它可以生成N个无线码,进行对码后就能使用,在小爱同学中设置好,就能够实现控制(实际上也只能用于忘记关排风扇的时候)。无线升级这个工程量也是这个项目中最大的,最艰巨的,首先我对bin文件进行重新编码,能够方便发射,又能够方便存储。最后对bin文件进行59字节的分割,可能有人疑惑为什么不是64字节,那是因为每个数据包需要校验码,编号,数量等信息,占用了5个字节,由于浴霸控制器是单项接收,没有反馈,发射端更要保证数据的可靠性,抗干扰性。上位机软件采用的是labview,通过USB与STM32的板子(某宝上随处可见的廉价板)连接,通过虚拟串口给板子发数据,板子再发数据给浴霸控制器,发送成功后回复上位机,上位机下传下一个数据包,周而复始,直到完成数据包传输,由于时间紧,平时工作忙,在这个传输上面采取相对稳妥的办法,传输时间会比较长,每分钟1k左右的数据量吧,还能够接收。毕竟也不是天天升级。</p>
<p>3.作品图册
<img src="//image.lceda.cn/pullimage/FhDdJVgvciYXzNAi3O3RoN3KOmxpIKn3zfRYSv3t.jpeg" alt="原.jpg">
原厂的浴霸控制器电路板
<img src="//image.lceda.cn/pullimage/E3HFdH6RRb3H1fFwEPOATsMqSc9rGFZhSaiVUv5d.jpeg" alt="QQ截图20190922233057.jpg">
原厂面板
<img src="//image.lceda.cn/pullimage/9lmvpOk9Q1kzJQnzbtgpYaz056aXJtc85BMi4hFR.jpeg" alt="本.jpg">
本作品PCBA
<img src="//image.lceda.cn/pullimage/aYGY5teUIjZMFNmjno146H3PQuFCeVCwQFD2CcRu.jpeg" alt="QQ截图20190922233427.jpg">
简易无线升级器
<img src="//image.lceda.cn/pullimage/sEQOqKMDiuskAiE7GeyA6ptIQPXLOtOsA6l6OteI.jpeg" alt="QQ截图20190922233526.jpg">
随意贴无线面板</p>
<p>* 二、描述作品所面临的挑战及所解决的问题;
这个作品面临的最大挑战就是大部分想实现的功能都没有开发过,由于工作关系,STM32也没有重头到位做过一次完整的项目,时间紧、任务重,也算是一次挑战。
比如433M遥控器解码、USB通讯的实现、协议编码、STM32自升级等。
首先来说说433M遥控器解码,网上资料很少,只能用几个遥控器+逻辑分析仪,看波形琢磨协议,这里遇到的最大的问题就是几个遥控器存在协议冲突,引导码有高电平比低电平时间短的情况,当然也是极少数,直接屏蔽了,米家发射出的码只要这种情况就重新再发几个,大部分还是正常的;
USB通讯,这个是从来都不敢碰的东西,协议太复杂,但是没办法,我对labview比较熟,只有通过串口把数据发下去,家里没有usb转串口模块。在CSDN上看了几个案例,尝试了下,均失败告终,找不到原因,电脑不识别,连接入的设备信息都没有,想想会不会是D+没接上拉,又回去看了下原理图,也没问题,看来只能是线了,把线拆开后,果然这根是电源线,只有2线,换线后,电脑有识别了,这个时候已经发现STM32还有一个神器cubemx,免去了我很多写代码的时候,顺利的连接上了,不过还没有很明白它的协议,直接在它的中断里写代码了,虽然low了些,但是一次能接收64字节也能满足我的需要了。
协议编码,这个是个头疼的问题,没有反馈,一个编码要发好多遍,确保能有1个完整接收到,还能知道接收到的是第几个数据包,另外还加了一个modbus用的CRC16校验,这个比较熟悉,这样确保了编码的可靠性。
STM32自升级,这个功能以前在一个项目中实现过,不过是我一个叫李承峰的同事做的,我看了当年他留下的文档尝试了下,做法是这样的,先收集数据包,大于9字节的数据包都会认为是升级数据包,存入EEPROM,收集完成后进行校验,然后重启进入引导程序,引导程序将EEPROM数据读出写入APP代码段,完成后跳转至APP,不过总会死在跳转到APP上。~~~~</p>
<p><em> 三、描述作品硬件、软件部分涉及到的关键点;
</em> 四、作品材料清单;
<em> 五、作品图片上传;(PCB上须有大赛logo标识并拍照上传,若无视为放弃参赛)
</em> 六、演示您的作品并录制成视频上传;(视频内容须包含:作品介绍;功能演示;性能测试;PCB上大赛logo标识特写镜头,若无视为放弃参赛)
七、开源文档。</p>
评论(16)