zoukankan      html  css  js  c++  java
  • 支持二次开发的Zigbee模块(SNAP技术)

    支持二次开发的Zigbee模块(SNAP技术)

    最近参与规划的一个项目,需要大量的Zigbee(约5000个)进行数据采集。由于是大面积布点,采用的是Mesh网络架构,所以很多节点都是所谓的路由节点,这就引发一个问题,路由节点一般情况下需要持续供电,由于现场条件只能采用电池供电,这和电池使用1到2年的要求产生了很大的冲突,所以需要zigbee支持一种同步休眠的技术。

    最初的方案考虑zigbee芯片+STM8l芯片,通过在单片中编程,用程序逻辑实现同步休眠,思路相对简单,就是主节点广播一个休眠指令,单片机收到后,控制zigbee进入休眠状态,同时自己也进入休眠中,经过预设的一段时间后,由时钟唤醒芯片,然后芯片再唤醒Zigbee,进行相关数据发送。由于STM8l是低功耗芯片,其采集传感器数据比zigbee模块直接采集传感器数据功耗会低很多,并且只是发送数据的时候才开启zigbee,整体功耗会更低,但是电路的复杂性和成本会增加不少。

    赫立讯公司的一个继承者在赫立讯Zigbee芯片技术的架构上实现了一种所谓的同步休眠的技术,在Zigbee模块中实现了上述的休眠逻辑,由于是在zigbee模块中直接实现,执行效率会更一些,外围电路也会更简单,不过其实现的可靠性和稳定性,还有外部开发和配置的能力需要进一步考验。

    在研究周立功zigbee芯片的时候,发现周立功的zigbee芯片支持一种SNAP的技术,其最大的特色就是支持用户二次开发,这也是我第一次发现支持用户二次开发的Zigbee模块。该技术在Zigbee模块中实现了一个Python虚拟机,用户通过编写Python脚本程序进行二次开发(这算是第二次研究Python相关语言了,第一次是多年前实现LED大屏显示特效的时候用过Python脚本,请参见相关博文《IronPython脚本应用之LED影像系统》)。

    SNAP是Synapse公司开发的无线mesh网络协议,提供脚本开发工具和相关固件,其使用是需要授权费用的(可以免费使用6个,一个授权大概30元左右)。SNAP网络简介如下:

     

    直接从周立功公司购买的Zigbee套件,默认部署的是点对点的固件,通过ZigbeeCfg工具可以升级该固件,或更换为对等网固件。如果需要部署支持SNAP的固件需要用Synapse公司公司的Portal软件进行部署(如下图)。

     

    警告:做这一步需要慎重考虑,因为部署后,周立功公司提供的ZigbeeCfg的工具上的SNAP选项也无法访问该模块,这个时候如果恢复为原先的固件需要返厂处理。

    SNAP当前最新版本的Python脚本支持72个系统函数,可以操作AD、GPIO、串口、SPI、I2C等相关接口,也可以执行休眠,重启等相关指令。

    下面代码是一个控制LED灯闪烁的脚本示例,内容如下:

    复制代码
    """Cycle the LEDs on the ZIC2410 eval board"""
    
    led = 0
    
    def start():
    
        # Initialize LED pins as outputs
    
        setPinDir(0, True)
    
        writePin(0, False)
    
        setPinDir(1, True)
    
        writePin(1, False)
    
        setPinDir(2, True)
    
        writePin(2, False)
    
        setPinDir(3, True)
    
        writePin(3, False)
    
     
    
    def timer100msEvent(currentMs):
    
        """On the 100ms tick, increment led count and pulse next LED"""
    
        global led
    
        led = (led + 1) % 4
    
        pulsePin(led, 75, True)
    
     
    
    def remoteLQ():
    
        """As an added bonus, respond to Link Quality Ranger requests too"""
    
        rpc(rpcSourceAddr(), 'remoteLQ')
    
     
    
    # Here's where we specify any "Event Handlers" we need.
    
    snappyGen.setHook(SnapConstants.HOOK_STARTUP, start)
    
    snappyGen.setHook(SnapConstants.HOOK_100MS, timer100msEvent)
    复制代码

    部署运行后,你会发现RXD/TXD和ERR灯会依次闪烁。

     

    不过由于该固件为国外公司所开发,如要求底层进行定制开发,比如支持单总线的温湿度采集,就很难实现了。想到这里,倒是有一个建议,国内如用STM32W Zigbee芯片做zigbee模块的公司,可以考虑集成一个简单的.NET MF框架,这样用户就可以用C#或VB.net进行Zigbee二次开发了,感觉要比Python编写容易,且功能也强大的多。

     
     
     
  • 相关阅读:
    Building a Space Station POJ
    Networking POJ
    POJ 1251 Jungle Roads
    CodeForces
    CodeForces
    kuangbin专题 专题一 简单搜索 POJ 1426 Find The Multiple
    The Preliminary Contest for ICPC Asia Shenyang 2019 F. Honk's pool
    The Preliminary Contest for ICPC Asia Shenyang 2019 H. Texas hold'em Poker
    The Preliminary Contest for ICPC Asia Xuzhou 2019 E. XKC's basketball team
    robotparser (File Formats) – Python 中文开发手册
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3056552.html
Copyright © 2011-2022 走看看