动手做一个自组网的网络 - 项目介绍
初衷
一开始只是对Zigbee
这种自组网感谢兴趣,但是有没有时间去学这方面的东西,所以比较好奇组网机制的实现,当时手头上有NRF24L01
这个模块,芯片内部有一个收发控制器,可以实现六路地址的收发,自带确认和重试机制,用来做个简单应用还是蛮不错的,拿来做组网的话就要舍弃他的状态控制器只用收发功能,也就是所有设备地址一样,不使用地址过滤,根据收发信息来进行操作,虽然低效,但是原理是通的,于是买了些元件,使用MCU
来实现一个可以中继传输的协议,基本思路就是各自分配一个地址,然后上电后找自己的路由节点,找到后就发送广播,后续节点可以在收到广播后进行接力配网和后续数据收发, 硬件完成后开始编程实现,可能天线随便拉了一下比较垃圾也可能发射功率比较低,导致近距离只能穿墙,远距离却穿不了墙,在写完组网的协议后可以通过接力实现多面墙相隔通信,速率没测试,必定惨不忍睹,因为这个nordic
芯片本身好像没有CCA
功能,于是在发送时参考的有线网的二进制避让方法来进行随机避让,对通信速率的影响比较大。
以上属于是前奏了,在硬件吃灰板子都快找不到了以后因为整理东西突然翻出来这个小板子,想着既然有想法去做了,就不要草草了事比较好(虽然大多事都这样),于是想把这玩意重新做出来,无关好坏,只为在做事时多一些完整(为此要损耗一些时间)。
既然要做,便要回到初衷,当时的想法有几个
- 像
Zigbee
这种组网协议怎么实现的,不参考别人的方案,怎么从零设计一个自组网(通过实现一个简单网络来考虑组网中的问题和解决办法) - 市面上智能家居设备体验太差了,我做一个自己能用的需要多少投入(自己做的总不能说差吧,主要方便接入自定义设备)
基于此,我需要
- 一个能用的无线自组网协议
- 一套或者一个系列的硬件来满足想法验证
- 一种适合自己的逻辑交互方式
在经过几个休息日的初步思考后,暂时确定了一下工作量
计划
初步 - 必须完成
- 硬件 一个小型的无线网络评估板,一个
2.4G
的无线收发器芯片,一颗mcu
,一块屏幕来显示调试信息,还需要板载电池方便户外运行- 一开始想使用带排针的开发板来连接
LCD
和无线芯片,在调试多个设备时,杜邦线盘根错节非常不爽,还不小心短路掉了两个板子导致报废,疫情封锁下这简直雪上加霜。所以非常有必要搞一个开发板,能单纯实现所需功能就好,原则是尽量小,电池的话看别人做的18650
板子挺不错的,板子和电池一样大简直完美,但是我算了一下只需要用到一半的大小,实际和5号电池差不多,但是5号电池只有1.5V
,然后16500
锂电池映入眼前,加上电池座后却又大了半圈,弃之。
- 一开始想使用带排针的开发板来连接
- 软件平台 需要运行一个
RTOS
,需要OTA
- 简单的
MCU
应用我更喜欢用裸机+状态机来实现,至于用RTOS
是因为前段时间刚写了一个小的操作系统内核,正好用起来。设备太多了不可能一个个连上线再烧程序,所以OTA
很有必要。
- 简单的
- 协议栈 实现自组网功能,可以节点间相互通信,网络总节点限制在
255
个- 因为对组网协议比较空白,所以这个是想了比较久的,推翻重来了好几次,就为了代码更小,实现更合理,限制255个节点数量一方面考虑应用中没有这么多设备,另一方面就算有这么多设备在一起,实时性也不能得到保证。
- 人机交互系统 - 使用运行在协议栈上层的脚本解释器来解析自动化命令,通过网页编辑对应节点的脚本内容
- 最终决定使用
LUA 5.4
来做上层应用的开发,mpy
编译后太大,picoc
文档太少,目前还没打算自己写解释器,所以先用别人的了。
- 最终决定使用
- 分享
- 有些东西想出来是一个阶段,做出来是一个阶段,说出来又是另一个阶段。
- 分享出来对自己也是鞭策。所以计划以后多写一些东西,将东西分享并抛砖引玉。
进阶 - 时间多的话
- 使用该硬件做一个无线继电器开关和无线开关
- 使用QT写一个界面,接入所有设备
实施
将当前任务拆分几个模块来做这件事,做完后各写一篇记录来分享
-
开发板篇- 硬件设计过程
-
网络协议篇 - 组网逻辑
-
操作系统篇 -
RTOS
细节 -
应用探索篇 - 可以做什么