我是我们这次比赛的成员之一,也是这个博客的博主。
说起这个比赛,刚开始知道是学校公告,出于兴趣,我们三个去报名组了一队,决定试一试。
这篇文章,我主要介绍下我们的制作流程和相关技术。
这个NOC物联网创新比赛简单说,就是用官方指定的器材来做一些物联网设备,可以随意添加扩展,但是出于公平,里面必须采用官方的套件。
我们拿到的东西就是一套物联网套盒,里面内容也很简单,一块简单的可联蓝牙的主板,几个常用的传感器,操作也很简单,只有官方提供的一个简单的安卓手机APP(手机应用程序),可以监控这些传感器数值,另外右侧有几个小开关可以简单手动控制这个主板,左侧有一个联动设置,通过设置一些简单的数值可以来自动控制马达和灯的开关。
拿到这个主板,我的第一个想法就是这些设备过于“简洁”,究竟能够做些什么?看到其他人都在做模型,我们就想,我们要做一个能用的成品。但这些功能对于我们来说完全不够,对于我们几个发烧友来讲,一个字是必须的,改!
那么能改些什么,首先我们不知道这块主板的一些参数,不晓得它究竟能够做些什么,比如能否对其烧录程序编程,况且源码我们没有,各种开发板的汇编指令也是千差万别,何况我们不知道它究竟是不是一块开发板,于是只好先搁置。
第二个想到的就是官方提供的手机APP,根据我的初步猜测,这个APP应该是一个和主板蓝牙通讯、并且可以接收传感器信息的一个中转程序,这样的话,即使没有办法修改主板,也可以通过手机来实现许多功能。有了这个猜想,加上我几年逆向windows程序的经验,我开始反编译这个安卓APP,当然我也意识到,我毕竟没有逆向过安卓程序,也有点怀疑能否成功。梁宸赫做安卓开发也有很长时间了,但他只写程序,没有逆向过,于是我和他一起来分析这个程序。
反编译器网上有很多,但反出来的程序着实让人头疼,许多逻辑都是根本错误的,一眼就能看出来不是程序本意,我已经感觉到反编译器有误,不能完全相信。最头疼的是里面的一些赋值运算和循环、变量名称,经常是这样的:
|
|
官方不愿提供APP核心部分代码,原本程序的变量名称我们也不能得知,并且这个按照这个逻辑,无条件for循环直接break和不写没有什么区别,并且许多赋值操作应该是编译器没有优化到位,做了很多无用代码。这样来看,里面的代码不能直接编译,于是我们的“改”方案直接取消,我们决定更大胆一些,分析数据发送,直接重新编写。在我分析出的一些数据和梁宸赫深厚的安卓开发功底下,我们花了大约一天时间,成功连接上了这个主板,欣喜若狂,因为这样,我们已经领先别人一步了。
但是时间很紧,我们是高中生,从六月中旬接到通知,然后花了大约一个清明节假期,把这个第一代产品做了出来。并且,我们的程序也大约有了个雏形,这个程序都靠了梁宸赫的努力才能完成,带到徐州初赛,我们非常自信,评委也非常看好我们,一方面对我们称赞,另一方面也提出了一些建议:不够美观。
于是我们在7月份期末考试后,又对这个产品进行重新制作,但是由于理论不够完善,它出了一些致命性错误,并且由于磕碰,气密性不行,这套模具不能再用,我们只好在最后几天时间里重新设计,这次我们直接量好,使用计算机绘制,并直接在激光机里进行切割,使用喷绘机直接喷绘,这样模具问题解决了,不仅气密没问题了,而且也更加美观。
可没有多少天了,在这个时候,我的朋友今多猫凭借照片直接认出了一部分传感器名字,后来我们得知这个主板原型其实是arduino uno,由于部分参赛队得到了源代码,我们也向官方索要主板代码,这次官方提供了主板代码,但离比赛也就几天了,如果不改主板代码,只靠APP,我们还是很难展现出差异性。
手机端APP,为了实现更多功能,梁开了一台服务器,这个服务器主要是向主板推送数据,这样就能真正使它接入互联网,并且功能更强,可以实现一些定时功能。但是问题也不少,为了降低延迟,我们用的是socket传输,每个定时都写入数据库,每分钟从数据库读出数据进行推送。由于我们比较着急,而且我们是在夜里写的,刚开始他编写的代码效率很低,容易漏推数据,而且在e5服务器上CPU占用基本上是50%以上,高的时候可以占满,这样不能保证比赛时候可以正常运行,于是我开始对代码进行优化,最后结果还是很好的,占用最高的时候才1%,不推数据时候占用基本为0%。
然后主板这边,比如蜂鸣器,声音很小,是哔-哔-哔-哔- 这样的声音,为了突出我们的差异性,我看了看相关开发资料,根据我以前玩windows的beep蜂鸣器唱歌留下的一些代码乐器,我将猪八戒背媳妇这段歌用这块主板的蜂鸣器演奏出来,当成闹钟使用,配合梁宸赫的语音定时,效果很棒。另外我精简了官方代码本身的一些无用代码,做到了主板秒开机,然后为了风力大一些,我去掉了官方的间断供电。另外我写了一个RFID直接控制舵机开关的联动代码,红外联动蜂鸣器我也加入了报警音乐。这样我们的主板已经和别人的不一样了,所谓创新,就是在有限的东西里面无限扩展。
为了做到更多功能扩展,我们购置了一个路由器,对其闪存和内存进行改造,成功刷入了openwrt系统,这样,我们就能非常方便连接家里的一些电器,做到真正的物联网。
然后洪盛阳主要是和我们来探讨一些新功能,然后我们再经过斟酌,把想法变为代码。
复赛前一天晚上,我们整队熬到3点左右,调试流程走了好几遍,我们才安心睡觉。
功夫不负有心人,我们的产品发光了,复赛的评委们也非常有眼光,对我们的作品非常欣赏,我们也非常开心。最终,我们非常稳的拿到了物联网创新比赛的一等奖第一名,有汗水就有收获。
我们几个人不是那种书呆子,况且见过的东西也比较多,不仅仅懂一方面,对于其他的东西我们也有一些生活常识。非常幸运,这次比赛还有一个恩欧希大奖,它考察的是一个选手个人的综合素质,包括法律、人际交往和文化课等知识,我们三个非常轻松就拿到了这个大奖,当然,考试时候的轻松,和我们平时的努力也是分不开的。
这次大赛,丰富了我们的见闻,给了我们几个人展现的舞台,同时也离不开刘志华老师和学校的重视和关心。我很少去参加比赛,但这次比赛出于我的兴趣,兴趣是最好的方向标,学校给我们的空间也很宽裕,这次成功是一次必然的成功。要知道,这比定死的填鸭式的教学要有用的多,棍棒下面能出孝子,但不能出创新。
感谢大家看到这里,希望我们的经历也能抛砖引玉带给大家一些启发。
再次谢谢大家~