CC2530的节点安装问题
比如有一个智能家居系统需要施工安装,系统为一个协调器+多个终端节点。假如厨房一个节点,客厅一个节点,协调器建立网络,节点加入网络后,厨房节点和客厅节点自动把各自的网络ID发给协调器,然后上位机终端通过网络ID来控制厨房和客厅的节点。但是终端怎么能确认哪个网络ID是厨房的,哪个网络ID又是客厅的呢。有个前提是所有的节点都是同一套软件固件,不会有其他任何信息来区别节点的不同。不知道你们有没有什么好的建议?谢谢!
你好! 这边提供给你一个参考的方法
你自己可以在应用层定义设备代码,比方说1代表厨房的节点,2代表客厅的节点,这个你只要协调器和节点之前有同样的约定就可以,也可以称为特殊的应用协议。在网络建立成功以后,节点可以和协调器有一个交互的过程,节点自己报告ID,或者协调器统一发请求,节点相应,都可以的。
Hi Victor,
谢谢你的解答,但是貌似我的问题是有前提条件,所有的节点都是同一套程序,同样的硬件,所以你说的应用里面各自定义节点类型在这里就不符合同一套程序的要求了哦!那看来只能客厅,厨房,书房之类的轮流加入协调器了,要不然光看网络ID根本无法定位哪个是哪个?
你好!
那可以再给你推荐一个方法,你可以采用Secondary IEEE address这个作为你的不同应用对象的标记,你在协议栈里面用的Primary IEEEE address,每个芯片出厂时都固定好的没法更改,而Secondary IEEE address 是通过smartRF Flash Programmer软件在烧写hex文件的程序时,可以进行设置的。这个Secondary IEEE address 就是存放在NV区域中的最后8个字节,所以你每次只需要从flash中把这8个字节读出来以后,就可以知道你的节点是应该是哪个具体对象,执行什么样的应用,而且在NV区域中,掉电也不会丢失,重启后还可以从里面读取。
操作有点麻烦!关于如何读FLASH,你可以参考Z-stack中hal_flash.c hal_flash.h 文件
谢谢!
Hi Victor,
按照你的思路,是否可以做如下尝试,在上产线上批量烧写固件的时候,把每个板子的IEEE ADDRESS读取出来,然后打印贴在每个节点上,安装时,以此IEEE ADDRESS来作为节点安装定位的标识符,不知道这样理解是否正确,谢谢!
你好!
是在批量烧写程序的时候,除了烧写程序以外,把你自己定的Secondary IEEE ADDRESS也烧写进去,这个IEEE地址是烧写到FLASH里面的,你在程序里面可以通过读FLASH的方式把这8个字节读出来,然后你在程序里面可以对这8个字节进行处理,做你想做的事情,可以用来区分不同应用的节点。