前言
從CAT0開始推廣開始涡戳,就知道NB-IoT的大名皿淋,但是直到上周才開始實(shí)際測(cè)試凰兑。技術(shù)上妥粟,以我以往的2G/3G MODEM積累的代碼,沒有特別的技術(shù)難度吏够。
NB-IoT的真正問題在于其封閉性和行政管理要求勾给。華為最為標(biāo)準(zhǔn)和規(guī)范的制定者,從一開始就是以封閉系統(tǒng)的方式進(jìn)行推廣的稿饰。嘗試壟斷所有的一切資源:芯片锦秒、模組、終端喉镰、IoT平臺(tái)甚至系統(tǒng)集成旅择。同時(shí)透過工信部陽(yáng)謀鏟除LoRaWAN/Sigfox等競(jìng)爭(zhēng)標(biāo)準(zhǔn)。
所以侣姆,我從最開始的熱切盼望生真,轉(zhuǎn)而旁觀、繼而反感捺宗。
然而柱蟀,在商言商,應(yīng)該拋棄成見蚜厉〕ひ眩基于移動(dòng)蜂窩基站的公眾物聯(lián)網(wǎng)有著天生的優(yōu)勢(shì):
- 網(wǎng)絡(luò)覆蓋率;
- 成熟的基礎(chǔ)建設(shè)...
只要資費(fèi)合理昼牛,其實(shí)未嘗不可作為業(yè)務(wù)基礎(chǔ)术瓮。所以昨天抽空我測(cè)試了一把最成熟的BC95-B8電信版模組。
萬能的X寶
X寶上賣家不僅提供了BC95模組核心板贰健,還有中國(guó)電信NB SIM卡胞四。而且還幫助我配置了UDP端口轉(zhuǎn)發(fā)。這樣我就可以進(jìn)行開發(fā)工作了伶椿。
設(shè)備方案組成
第一個(gè)產(chǎn)品是針對(duì)慢速資產(chǎn)定位辜伟,如寵物、兒童脊另、老人导狡、自行車和電動(dòng)車等。所以板子上有BC95 + LR70R + MCU + FeRAM + PWR + LiPo偎痛。我知道新一代芯片已經(jīng)內(nèi)置了定位芯片旱捧,但是差別不大。最關(guān)鍵的依然是MCU固件中關(guān)于AT指令集的處理看彼。
AT以及NMEA指令集的處理說穿了就是串口字符串的收發(fā)和格式化處理廊佩。
根據(jù)我以往的工程經(jīng)驗(yàn)囚聚,不同編程語(yǔ)言的字符串處理難度是不同的:
Embedded C/C++ > Standard C/C++ > Java > Lua > JavaScript > Python
嵌入式C/C++如Keil/IAR之所以比標(biāo)準(zhǔn)C/C++要更難處理字符串,差異點(diǎn)在于嵌入式的libc庫(kù)資源受限标锄。一旦libc鏈接進(jìn)來顽铸,ROM/RAM要多占用不少。
C++/Java中的String類庫(kù)要比標(biāo)準(zhǔn)libc中的函數(shù)要更加方便料皇,當(dāng)然本質(zhì)上是一回事情谓松。但是C++要多占用Heap和其他資源。而Java需要額外的runtime践剂。
在VHLL中鬼譬,Lua/JavaScript/Python我覺得是類似,用于處理字符串實(shí)在太簡(jiǎn)單了逊脯,拿起來就可以用优质,連工程都不需要建立。相比之下军洼,我選用了Python巩螃。
基于以上理由,我選用了STM32F4和L0作為主控匕争。原型采用F4避乏,支持MicroPython,而L0作為后續(xù)cost-down版本甘桑,使用GCC-ARM拍皮。
測(cè)試
先寫了一個(gè)UART/USB_VCP的橋接腳本,用于測(cè)試了BC95的指令和L70R的NMEA指令跑杭。以下是測(cè)試結(jié)果:
ATI
Quectel
BC95-B5
Revision:BC95B5HBR01A03W16
OK
AT+CFUN?
+CFUN:1
OK
AT+CIMI
460111175097877
OK
AT+CSQ
+CSQ:19,99
OK
AT+CEREG?
+CEREG:0,1
OK
AT+CGPADDR
+CGPADDR:0,10.161.109.154
OK
AT+NPING=123.57.211.188
OK
+NPING:123.57.211.188,116,4817
AT+NSOCR=DGRAM,17,8888,1
0
OK
AT+NSOST=0,123.57.211.188,59980,2,3031
0,2
OK
+NSONMI:0,2
AT+NSORF=0,2
0,123.57.211.188,59980,2,3031,0
OK
注意
為了保護(hù)業(yè)務(wù)端口铆帽,以上日志中,IP地址已經(jīng)被修改過艘蹋。讀者就別費(fèi)心測(cè)試了锄贼。以上日志簡(jiǎn)單測(cè)試了NB Modem的收發(fā)流程票灰。
原型腳本
用MicroPython開發(fā)原型腳本也非常簡(jiǎn)單女阀。而且使用UART.readline()可以一次性把一行字符串讀取進(jìn)來,然后通過binascii直接轉(zhuǎn)換屑迂,然后多重賦值浸策。一次性獲取經(jīng)緯度、高度惹盼、時(shí)間庸汗、方位角、速度等等手报。
固件功能加持
基于基礎(chǔ)代碼蚯舱,還需要添加以下功能:
- 基于UDP的設(shè)備認(rèn)證改化,包括ID/Key換取Token
- 基于UDP的設(shè)備認(rèn)證獲取的Token,加上時(shí)間戳和Nonce隨機(jī)數(shù)枉昏,計(jì)算簽名散列值陈肛,然后上傳GPS數(shù)據(jù),或任意數(shù)據(jù)兄裂。
- 下發(fā)指令處理等句旱。
- 升級(jí)到CoAP/DTLS。
BC95的CoAP幾乎是被閹割的版本晰奖,還要通過華為或者中國(guó)電信平臺(tái)轉(zhuǎn)發(fā)谈撒。好在UDP就是一個(gè)很好地通路,所以我打算通過UDP端口實(shí)現(xiàn)一個(gè)CoAP Client/Server匾南。
不太確定的是此類設(shè)備的外形啃匿。車用?腕帶類蛆楞?日用品類立宜?胸牌類?
服務(wù)器和移動(dòng)APP
由于我有自己研發(fā)的EPIC IoTHub/EPIC AppBuilder臊岸,而UDP服務(wù)器基于Twisted/Netty增設(shè)一個(gè)Connector端口也非常簡(jiǎn)單橙数,如此,原來的EPIC云端就可以對(duì)接上了帅戒。
而EPIC AppBuilder的ATS就是針對(duì)資產(chǎn)定位的灯帮,采用了Baidu地圖,不過最近在調(diào)研Baidu的鷹眼服務(wù)和服務(wù)器之間整合逻住。不過就最簡(jiǎn)單的實(shí)時(shí)定位和歷史數(shù)據(jù)查閱和可視化钟哥。都已經(jīng)實(shí)現(xiàn)。并支持微信社交賬戶登陸和分享瞎访。