简介
前一段时间看了一个电影叫群体(Colony)好像是之前釜山行的导演拍的第二部。主要大概就是讲一个生物公司研究出了一种药剂,然后由于利益分配不均匀被他们的科学家恶意的散播出去了。 就导致所有人都感染了这个病毒,就像丧失一样咬到人之后具备感染性。其中叫 Colony的原因是这群丧失可以通过某种信息素一样的交换信息从而引起族群内的知识的分享和学习。不过通过后续Master (即第一个被感染者)的死去后整个丧失群体都停止了行动来看。 这个网络是一主多从的架构类似下面这样。

我在看电影的时候就在考虑如果他们的这个连接方式有一点不靠谱,如果master挂了的话,其他的slave就没办法来接受对应的行动指令了。我就跟我女朋友说如果这个是zigbee的话。形式就不一样了。
Zigbee简介
Zigbee 是一种基于 IEEE 802.15.4 标准的低功耗无线通信协议,专为物联网设备间的短距离数据传输而设计。它具有低功耗、低成本、自组网和 Mesh(网状)网络等特点,设备通常可分为 Coordinator(协调器)、Router(路由器) 和 End Device(终端设备) 三种角色,其中协调器负责创建和管理网络,路由器负责中继转发数据,而终端设备主要负责采集或执行任务。Zigbee 广泛应用于智能家居、工业自动化和环境监测等场景,能够通过设备间的多跳通信扩大覆盖范围并提高网络可靠性。相比 Wi-Fi,Zigbee 功耗更低、速率更低(最高约 250 kbps);相比蓝牙,则更适合大规模设备组网和长期运行的物联网应用。
其中需要注意的是Coordinator 对Zigbee的网路影响最大,如果Coordinator 挂掉了的话,那么可能会导致新的zigbee无法加入到当前的zigbee网络中。 换做在电影中的话就是:当一个新的丧失被感染了的话,那么它没办法和原本的丧失群体保持一致。 而Router如果挂掉了的话,一般来说影响相对较少。因为Router只是负责转发数据而已,如果相同的一条路径爱可以到达对应的终端设备的话,Router挂了几乎没影响。 而对应每一个执行器而言(终端设备)如果掉线了之后对整个zigbee网络完全没影响。

架构如上所示,如果上述的路由2挂掉了的话,其中的路由1 如果恰巧保存了到终端设备2的路由路径的话那么实际上并不会影响到这个网路之间的通讯。说简单点来说在电影里的话就是某个丧失死掉了的话其他丧失还能继续行动。就算Master丧失死亡之后。 其他丧失也可以按照原本的规划进行行动。
设备选择
ESP32-系列有很多是支持Zigbee的通讯的,这里我的设备选择是两块ESP32-C6-Dev-kit(因为要测试通讯则必须使用两块设备)

Demo选择
ESP-IDF提供了基础的Zigbee的测试代码分别是HA_on_off_switch 和 HA_on_off_light 。 其中一个ESP32-C6作为开关来控制另一个ESP32C6上板载LED的灯的开关。通过BOOT按键进行触发。

这里可能会出现一个问题即:W (2750) ESP_ZB_ON_OFF_LIGHT: Failed to initialize Zigbee stack (status: ESP_FAIL) .
这是因为可能当前的开发板在之前的程序烧录的时候在NVS的分区中存在了部分信息影响到了Zigbee的初始化,因此需要对整个芯片的所有内容进行擦除。 在这里我的芯片擦除工具选择的是ESP-Flash Download tool

然后再对程序代码进行烧录即可,此时如果一切正常的话,当Switch在线的时候,对应的light会自动的加入到Switch的zigbee网络中。如下所示。

此时可以使用串口工具查看第一个Switch设备的串口输出。
它将和第二个设备建立连接,当用手按下第一个设备Switch中的boot按钮的时候。将会触发第二个设备中LED灯的切换。

现象如下所示

开启状态

总结
总而言之这个釜山行的这个导演感觉拍这种电影的时候最好请一个搞Java 分布式那一套的人咨询一下看看有没有什么办法能够保证这个丧失集群的高可用,不要在一个注册中心挂掉的情况下导致整个集群内没办法互相发现完成服务调用
我要赚赏金
