sim7080g nb-iot模塊使用心得
掃描二維碼
隨時(shí)隨地手機(jī)看文章
sim7080g nb-iot模塊使用心得
-
1.概述
-
2.設(shè)計(jì)方式
-
3.初始化
-
4.TCP連接測(cè)試
-
5.SIM7080使用注意
-
6.工程小結(jié)
1.概述
最近有個(gè)朋友找到我,讓我調(diào)試一個(gè)程序,由于之前項(xiàng)目的硬件采用sim800c的gsm模塊,由于現(xiàn)場(chǎng)的信號(hào)太差,所以找了個(gè)sim7080g模塊進(jìn)行替換。底層設(shè)計(jì)采用at指令集,中間通信協(xié)議層也是我一年多前完成的,上層業(yè)務(wù)基本不會(huì)變化。本以為只會(huì)通過(guò)修改底層的at指令集就好了,但實(shí)際在這個(gè)過(guò)程中也遇到一些問(wèn)題。特此記錄此次調(diào)試過(guò)程,避免同樣的錯(cuò)誤再次出現(xiàn)。
2.設(shè)計(jì)方式
由于我對(duì)該項(xiàng)目也相當(dāng)熟悉了,所以按照模塊化的方式進(jìn)行程序設(shè)計(jì)。
從整個(gè)架構(gòu)上來(lái)看,此時(shí)整體架構(gòu)的變化不大,僅僅是將sim7080g的模塊使用起來(lái)就好了。protocal層則是按照之前的處理方式處理。其實(shí)也就是將模塊recv到的數(shù)據(jù)組合成一個(gè)包,然后交給協(xié)議層去處理就可以了。
由于本方案采用的是tcp client傳輸模式,而且未開(kāi)啟透?jìng)髂J?,而且需要使用到gps功能。
這里主要介紹sim7080g的使用流程以及其中調(diào)試的注意事項(xiàng)。
3.初始化
按照模塊的使用方式,與TCP相關(guān)的AT列表可以分為:
其初始化流程如下所示:
按照上述的初始化流程進(jìn)行初始步驟即可。一旦一條指令的順序不對(duì)都需要重新進(jìn)行連接。
對(duì)此,我也整理出如下的表格
指令 | 成功返回值 | 備注 |
---|---|---|
AT | OK | AT測(cè)試指令 |
AT+CPIN? | READY | 檢查sim卡狀態(tài)指令 |
AT+CNMP=38 | OK | 選擇網(wǎng)絡(luò)制式 |
AT+CSQ | +CSQ: 26,99 | 檢查信號(hào)質(zhì)量 |
AT+CPSMS=0 | OK | 關(guān)閉PCM |
AT+CEDRXS=0 | OK | 關(guān)閉eDRX |
AT+CGREG? | +CGREG: 0,1 | 查詢(xún)網(wǎng)絡(luò)附著 |
AT+CGNAPN | OK | 獲取網(wǎng)絡(luò)APN |
AT+CPSI? | OK | 請(qǐng)求UE系統(tǒng)信息 |
AT+CNACT=0,1 | OK | 激活應(yīng)用網(wǎng)絡(luò)(只能發(fā)送一次) |
AT+CNACT? |
|
查詢(xún)網(wǎng)絡(luò)IP |
AT+CACID=0 |
|
設(shè)置索引(只能發(fā)送一次) |
AT+CASSLCFG=0,"SSL",0 | OK | 設(shè)置SSL參數(shù) |
AT+CAOPEN=0,0,"TCP","iot-as-mqtt.cn-shanghai.aliyuncs.com",1883 | OK | 打開(kāi)一個(gè)TCP鏈接 |
AT+CASWITCH=0,1 | OK | 設(shè)置透?jìng)髂J? |
AT+CASTATE? | OK | 查詢(xún)連接狀態(tài) |
4.TCP連接測(cè)試
為了測(cè)試方便,我是在本地用內(nèi)網(wǎng)穿透進(jìn)行測(cè)試調(diào)試。內(nèi)網(wǎng)穿透采用花生殼進(jìn)行本地內(nèi)網(wǎng)端口映射。
這樣調(diào)試起來(lái)就非常的方便了。
連接服務(wù)器采用
AT+CAOPEN=0,0,\"TCP\",\"iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883
進(jìn)行TCP連接,連接上后,通過(guò)
AT+CASTATE?
查詢(xún)TCP的連接狀態(tài),直到連接上就可以發(fā)送數(shù)據(jù)了。
數(shù)據(jù)發(fā)送
模塊數(shù)據(jù)發(fā)送時(shí),首先輸入要發(fā)送數(shù)據(jù)的長(zhǎng)度,下面的10即為10個(gè)字節(jié)的數(shù)據(jù)長(zhǎng)度。
AT+CASEND=0,10,10000
此時(shí)模塊會(huì)返回>符號(hào)回來(lái),接著向串口寫(xiě)數(shù)據(jù)就可以了。
一定需要注意,結(jié)束的標(biāo)志\r\n。所以不滿(mǎn)10個(gè)字節(jié)當(dāng)遇到\r\n則退出輸入模式。
數(shù)據(jù)接收
該模塊在使用的使用,需要主動(dòng)去查詢(xún)有沒(méi)有數(shù)據(jù)接收到。
AT+CARECV=0,100
表示最大接收100個(gè)字節(jié),當(dāng)然,接收時(shí)也會(huì)提示接收到多少數(shù)據(jù)。
返回:
+CARECV: 10,GET / HTTP
5.SIM7080使用注意
這個(gè)模塊TCP連接和GPS同時(shí)工作時(shí),會(huì)造成TCP斷開(kāi)的現(xiàn)象,這個(gè)應(yīng)該是這個(gè)模塊設(shè)計(jì)的BUG,我當(dāng)時(shí)也排查了好久。終于在網(wǎng)上找到與我遇到的同意的問(wèn)題。
當(dāng)然,這個(gè)問(wèn)題肯定不是很好解決,目前最好的用法就是兩者之中只能使用一個(gè)模塊進(jìn)行使用。
6.工程小結(jié)
該模塊與sim800c的指令和訪問(wèn)方式都有一些不同,在使用時(shí)也需要充分的理解設(shè)計(jì)方式。特別是在做物聯(lián)網(wǎng)應(yīng)用時(shí),第一是保證連接的可靠性,第二就是需要設(shè)計(jì)斷網(wǎng)重連機(jī)制。上述的過(guò)程其實(shí)還是比較簡(jiǎn)單,直接查詢(xún)連接狀態(tài)即可。其實(shí)復(fù)雜的還有心跳包等。
嵌入式物聯(lián)網(wǎng)應(yīng)用的設(shè)備端,其中間的協(xié)議層一定要設(shè)計(jì)完善,如果設(shè)計(jì)的一塌糊涂,都是if...else結(jié)構(gòu),那么這個(gè)項(xiàng)目換了模塊則無(wú)法維護(hù)了,這時(shí)中間件的作用就體現(xiàn)出來(lái)了。在做方案設(shè)計(jì)的時(shí)候,一定考慮清楚模塊之間的耦合層次關(guān)系,設(shè)計(jì)出來(lái)的架構(gòu)才清晰明確。