支持二次開發的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編寫容易,且功能也強大的多。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM