查看: 540|回复: 1

[项目] 教你一招分分钟让Micro:bit板通讯距离翻倍(3)

[复制链接]
本帖最后由 Luke 于 2019-11-26 15:49 编辑

教你一招分分钟让Micro:bit板通讯距离翻倍(3)

项目目的:

       第三帖来了来了,前两帖说的都是物联网运用于科学探究的情况,我们用Micro:bit板当作中继器来传递数据。到了第三帖,虽然做的也是中继器,但是要换一个领域搞花样,我们要将中继器技术运用在灾后救援。

前情提要:
      
201911183561..png

       先说一下灵感来源,知名up主Linus在他的科技视频栏目里做了一期关于Project Owl的视频,他们是IBM公司发起的The Call For Code(代码征集)2018年的全球挑战赛冠军。先说一下这个代码征集全球挑战赛,它呼吁开发人员、数据科学家、设计师、业务分析师、主题专家等团队开发能够显著提高自然灾害备灾能力并加速灾难救援的解决方案。他们可基于一个或多个IBM云服务中实用、有效、高质量的应用程序(例如:网页、移动、数据、分析、人工智能、物联网或天气)来构建可以对人道主义问题产生直接和持久影响的解决方案。

201911186979..png

       物联网和软件解决方案OWL项目(Project OWL)是在自然灾害中使第一响应者和受害者保持联系的物联网解决方案,赢得了2018年全球代码征集挑战赛的冠军。他们了解到遭受自然灾害后,通讯网络瘫痪导致无法高效救援,所以便决定使用装有LoRa无线通讯模块的装置分散在灾区中来创建网状网络,也就是常说的Mesh Network,覆盖2.6平方公里只需要五个装置即可。

201911185646..png

       到这儿就有人问了,灾后地区的道路几乎瘫痪,如何去布置那么多装置呢。在飓风和洪水肆虐的美洲国家,他们采用了一个惊人的方式,把装置塞进小黄鸭里面,使用太阳能供电随着洪水漂流。这样,便能确保洪水所到之处都有信号覆盖。

201911188836..png

       救援人员在临时救助点连接上“mama duck”监控并接收各地传送过来的求助信息。同时幸存者可以使用移动设备发现并连接小黄鸭的WIFI信号,然后被引导进入一个求救页面,填写被困情况与GPS定位数据并发送,小黄鸭与小黄鸭之间通过网状网络广播求救信息,直到信号被mama duck接收到,帮助救援人员高效地完成救援。
      
项目情况:

       好了关于Project Owl差不多介绍完了,是不是很酷呢,用Micro:bit板来做做看吧,前两帖已经说了中继器怎么做了,是不是和小黄鸭有异曲同工之妙呢。还是用三块板子来模拟的情况下,其中一块Micro:bit板作为“mama duck”,剩余的两块板后文就叫做鸭鸭板好了,他们的关系就是各自都能发送求救信号,又互为中继板。

201911254807..png
--------------------------------华丽的分割线----------------------------------

201911251763..png

       我们还是来看一下程序,一号鸭鸭和二号鸭鸭在程序结构上没有任何区别,因为他们本来就是平等的关系,区别就是按下“A”键之后,发送的标识代码分别是1和2,还有在读取无线数据的时候用于判断的1和2,接下来我来慢慢解释鸭鸭板的程序。

201911255907..png
       首先关于无线通讯的开启,我就不多说了,按下“A”键即向频道内发送自己的标识号1或者2代表求救信号,这里能发现我给数字打上了双引号,主要是怕后续编写程序转换变量类型麻烦,索性给他框起来从一开始就当字符串来用。

201911256512..png

       然后我们再来看那两个字符型变量“rx”和“old”,本人英语不好就随手起了个灵魂变量名,大家看得懂就好。“rx”就是用来储存接收到的无线数据的,关于这个前两帖也说得很多了。而这个“old”,大家不难发现在主程序中每过一分钟就会被清空一次,哎为什么我用了清空这个词,其实它的作用就是储存已经被中继过的、老的求救信号,之后会详细解释。

201911259357..png

       接下来就进入这个很重要的判断语句了,通过这个判断就能分辨收到的这条消息,第一是否是自己的求救信号,第二是否是自己已经中继过的别人的求救信号。在我们的小范围小数量测试中,这一项设定仅仅是用来防止自己反复转发自己的求救信号,但是想象一下当测试范围扩大,现在有十几二十个鸭鸭板,难免会发生别人的求救信号经过了不同鸭鸭的转发,通过各不相同的路径被你接收,那这个判断语句就很有用了,他能帮助我们过滤一分钟内的重复求救信号,如果是大范围大数量的应用场景下,这个时间也应该相应延长。

201911256178..png

       当我们接收到的无线数据顺利通过了那个判断,我们就认定它是一条新的求救信息,启用自己的中继功能,向频道内转发该消息三次并通过LED屏显示WIFI图案,字符串输出仍旧是用于监控程序是否正常运行,最后将该消息合并在“old”里面,存档证明该消息已经被中继转发。

       至于前文一直回避的为什么要定时刷新这一问题到这里也就能解答了,我认为原因有二:第一,就像现在的手机号登陆需要验证码一样,一定得给你再次发送的机会,我们允许你重复求救但是杜绝了你在一个时间段内的刷屏求救;第二,“old”变量需要定期清空,不能无限制地增加它的字符串长度,不然会对程序的运行产生威胁。

201911251728..png

       解释完鸭鸭板的程序,“mama duck”的程序就好理解很多,收到新的求救信号通过串口输出““1”needs help”,然后每两分钟刷新一次并输出“fresh”,能更方便的在串口监视器收集并区分求救信息。

201911259585..png

       串口监视器看到的画面就是这个样子,这样就得到了我们想要的结果,无论增加多少鸭鸭板,只需要顺序编号,大家就能构成网状通讯,只要“mama duck”在任意一块板的通讯范围之内,就能收到所有鸭鸭的求救信息。

       至此三帖完结,撒花撒花,希望我的Micro:bit中继器方案能帮助大家开脑洞,感谢追更。

样例程序:

Microbit中继器V3.0.zip (497 KB, 下载次数: 16)

gada888  版主

发表于 2019-11-22 14:44:26

了解一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail