前言安信可 A9/A9G GPRS(GPS) 模塊因為有GPRS,相比WIFI,它可以隨時隨地聯(lián)網(wǎng),實現(xiàn)24小時穩(wěn)定在線,不受地理位置限制,而且提供基站定位和GPS定位功能。提供AT固件使用起來也非常簡單,幾條命令就快速配置成功。
另外,AT指令固件集成了機智云接入?yún)f(xié)議,使用簡單的幾條命令就可以快速接入機智云,從而在非常短的時間內實現(xiàn)M2M應用。
因此這里介紹如何使用A9/A9G模塊快速建立一個簡單的M2M應用。
目標- A9/A9G內部集成了一個應用A9Tracker(定位器),實現(xiàn)手機遠程查看定位器實時位置以及電子圍欄功能,具體使用方法及效果可以看這里(A9/A9G GPRS模塊內部集成應用A9Tracker使用方法)
- 使用串口助手操作A9/A9G模塊,實現(xiàn)模塊接入機智云,實現(xiàn)模塊推送消息到手機、手機發(fā)送控制數(shù)據(jù)到模塊
準備- 一個A9 或者 A9G模塊(建議買A9 pudding開發(fā)板,方便開發(fā)),可在淘寶購買

A9G

A9

A9/A9G pudding開發(fā)板(鏈接稍后放出)
- 流量卡或者電話卡,如果不用短信或者電話功能,建議購買物聯(lián)網(wǎng)卡,不需要實名更方便,點擊圖片可以買到

物聯(lián)網(wǎng)卡
- USB轉串口模塊
這個開發(fā)者一般都有,如果沒有也需要購買,建議使用cilicon CP210x芯片的cp2102 usb轉串口模塊,供電能力比CH34和pl2303好很多。安信可也配套推出了最新的串口模塊,包含了3.3V 4.2V 5V 三種供電電壓,支持硬件流控,使用CP210x芯片,供電能力更好。

USB轉串口模塊
- 電源
可以使用鋰電池(3.7~4.2V)供電,也可以使用USB供電,但是要保證USB能提供足夠的電流(建議峰值>600mA),串口供電也可以,同樣保證峰值電流夠大,有些串口芯片供電能力不足
開發(fā)過程- 保證AT固件是最新固件,不是則需要到安信可官網(wǎng)下載并升級固件
使用ATI\r\n查詢固件信息,與最新固件版本對比
固件升級指南
固件發(fā)布頁面 - 申請機智云賬號
- 進入機智云開發(fā)者中心:點我進入
注冊并登陸

注冊登錄機智云
- 創(chuàng)建產(chǎn)品及數(shù)據(jù)點
- 點擊創(chuàng)建新產(chǎn)品,選擇移動網(wǎng)絡,數(shù)據(jù)傳輸方式使用定長或者變長,定長就是每次上傳數(shù)據(jù)需要把所有的數(shù)據(jù)點上傳,變長就是可以一次只上傳部分數(shù)據(jù)點,數(shù)據(jù)量大或者通訊頻繁為了節(jié)約流量可以選變長,數(shù)據(jù)量不大可以選定長,如果你是第一次使用機智云,建議按照我的步驟來,會了之后自己探索。這里 選擇了變長!

產(chǎn)品

產(chǎn)品創(chuàng)建

創(chuàng)建數(shù)據(jù)點

數(shù)據(jù)點

應用數(shù)據(jù)點
- 復制PK和PS

基本信息 - 連接硬件到電腦
注意要保證足夠的供電能力,或者使用鋰電池在VBAT端進行供電也可以

硬件連接 - 下載并打開串口助手
使用安信可串口助手,下載
或者使用其它串口助手都可以,我這里使用的開源的串口助手COMTool(代碼不到1000行哦),下載,版本列表 - 連接A9/A9G模塊,上電等待串口助手顯示READY字樣后,發(fā)送AT(回車結尾,即AT\r\n)測試連接以及模塊是否正常工作(可以多發(fā)幾次)注意每一個AT命令都是以\r\n(即windows下的換行符)結尾,后面所有命令默認都以\r\n結尾
ATOK

READY AT
- 查詢IMEI是否正確AT+EGMR=2,7,如果不正確,看模塊屏蔽罩上的IMEI,使用AT+EGMR=1,7,"..."寫入

IMEI - 使用AT+GIZSTART=[PK],[PS]注冊登錄模塊到剛剛建立的產(chǎn)品,使用AT+GIZSTOP注銷登錄
!這里值得注意的是:
第一次注冊時這個命令的參數(shù)PK、PS是必須的,如果注冊過一次后,后面登錄無需再使用PK和PS參數(shù),直接使用AT+GIZSTART即可登錄。
如果帶參數(shù),模塊則會重新注冊一遍,模塊重新注冊會導致手機App用戶綁定的這個模塊自動解綁!使用時請注意

注冊模塊到機智云產(chǎn)品
這個時候在機智云后臺會看到設備已經(jīng)在線,點擊查看可以看到更多設備信息

設備在線

上下線信息
- 設備推送消息
使用AT+GIZSEND=<action>,[length],[data]推送數(shù)據(jù)到云端(/手機客戶端)
這里action代表數(shù)據(jù)的含義,如下表:
定長產(chǎn)品:
[td]命令 | 數(shù)值(十六進制) | 數(shù)值(十進制) | 含義 |
|
|
| ACTION_CONTROL | 0x01 | 1 | App控制命令,設備收到手需要根據(jù)數(shù)據(jù)改變狀態(tài),然后上報狀態(tài) | ACTION_READ_STATUS | 0x02 | 2 | App讀取狀態(tài),設備收到后上報狀態(tài) | ACTION_READ_STATUS_ACK | 0x03 | 3 | App讀取狀態(tài)后,設備返回狀態(tài) | ACTION_REPORT_STATUS | 0x04 | 4 | 設備主動上報狀態(tài) | ACTION_TRANS_RECV | 0x05 | 5 | 接收到MQTT原始數(shù)據(jù) | ACTION_TRANS_SEND | 0x06 | 6 | MQTT原始數(shù)據(jù)發(fā)送 | ACTION_PUSH_OTA | 0xfe | 254 | OTA | 變長產(chǎn)品:
[td]命令 | 數(shù)值(十六進制) | 數(shù)值(十進制) | 含義 |
|
|
| ACTION_CONTROL | 0x11 | 17 | App控制命令,設備收到手需要根據(jù)數(shù)據(jù)改變狀態(tài),然后上報狀態(tài) | ACTION_READ_STATUS | 0x12 | 18 | App讀取狀態(tài),設備收到后上報狀態(tài) | ACTION_READ_STATUS_ACK | 0x13 | 19 | App讀取狀態(tài)后,設備返回狀態(tài) | ACTION_REPORT_STATUS | 0x14 | 20 | 設備主動上報狀態(tài) | ACTION_TRANS_RECV | 0x15 | 21 | 接收到MQTT原始數(shù)據(jù) | ACTION_TRANS_SEND | 0x16 | 22 | MQTT原始數(shù)據(jù)發(fā)送 | ACTION_PUSH_OTA | 0xfe | 254 | OTA | 發(fā)送數(shù)據(jù)的方式有三種格式,類似AT+CIPSEND,如下圖,更詳細說明見AT指令文檔

設備推送數(shù)據(jù)
在后臺可以看到數(shù)據(jù)已經(jīng)成功推送

后臺數(shù)據(jù)記錄
上面的數(shù)據(jù)推送是隨便推送的,在這里沒有任何含義!
那么如何推送數(shù)據(jù)點呢,我們創(chuàng)建了一個數(shù)據(jù)點,且因為是變長產(chǎn)品,根據(jù)協(xié)議(最后會詳細說明,這里可以先不深入探究),我們需要發(fā)送兩個字節(jié)的數(shù)據(jù),報告燈為開:0x0101,報告燈為關:0x0100;因為是設備主動報告數(shù)據(jù)而且產(chǎn)品是變長,action為20:

上傳數(shù)據(jù)點
在后臺可以看到,推送數(shù)據(jù)點成功

后臺數(shù)據(jù)
- 下載機智云App (支持二次開發(fā)),在手機應用商店搜索機智云下載安裝

機智云App
- 生成設備二維碼
按照機智云官方文檔教程生成這個設備的二維碼,機智云App二維碼生成教程 - App掃描二維碼添加設備

掃描二維碼

已綁定設備
- 查看設備狀態(tài)及控制設備
點擊已綁定的設備,進入設備頁面,設備會收到客戶端進入設備頁面的查詢設備狀態(tài)的消息

設備頁面

設備收到消息(這里收到ACTION為18的數(shù)據(jù)即讀取命令,數(shù)據(jù)內容沒顯示是因為是非ASCII碼)
點擊控制開關,設備會收到控制命令

點擊App中的開關,發(fā)送控制命令

設備收到控制命令(這里收到ACTION為17的數(shù)據(jù)即控制命令,數(shù)據(jù)內容沒顯示是因為是非ASCII碼)
如果設備推送設備狀態(tài)(定長ACTION為4,變長ACTION為20)或者響應App的查詢命令推送狀態(tài)(定長ACTION為3,變長ACTION為19),App界面也會實時更新狀態(tài)

設備推送數(shù)據(jù)
在App可以看到數(shù)據(jù)發(fā)生了變化

App燈從關變成了開狀態(tài)
在后臺也可以看到數(shù)據(jù)內容

后臺數(shù)據(jù)內容
關于機智云的定長數(shù)據(jù)和變長數(shù)據(jù)定長定長就是每次傳輸都傳輸所有數(shù)據(jù)點的信息(相對簡單,如果編程經(jīng)驗比較少,或者數(shù)據(jù)量不大或者通信頻率不高建議直接選擇這種方式),比如建了2個數(shù)據(jù)點,長度分別為4個字節(jié),則每次推送都要推送兩個數(shù)據(jù)點的數(shù)據(jù)即8個字節(jié),如圖:

定長傳輸
變長變長相對來說復雜一些!
在推送數(shù)據(jù)時,由于數(shù)據(jù)時變長的,服務器需要知道硬件上傳的是哪些數(shù)據(jù)點的數(shù)據(jù),所以需要有標志位來表示傳輸?shù)氖悄男⿺?shù)據(jù)點,所以在數(shù)據(jù)的開頭會有數(shù)據(jù)點標志位,每位代表一個數(shù)據(jù)點(位數(shù)不足8位高位補0補足8位,即傳輸?shù)膯挝皇亲止?jié))。舉個例子:
創(chuàng)建了一個數(shù)據(jù)點,數(shù)據(jù)點類型為bool類型(1位),則傳輸數(shù)據(jù)應該為:
0x0100(False) 或者 0x0101(True)
創(chuàng)建了兩個數(shù)據(jù)點,數(shù)據(jù)點類型為bool類型,
當只傳輸?shù)谝粋數(shù)據(jù)點:
0x0100(False) 或者 0x0101(True)
當只傳輸?shù)诙䝼數(shù)據(jù)點:
0x0200(False) 或者 0x0201(True)
當傳輸兩個數(shù)據(jù)點:
0x0300(False False) 或者 0x0301(False True)或者0x0302(True False)或者0x0303(True True)
同理,三個數(shù)據(jù)點標志位占3位,比如同時傳輸三個數(shù)據(jù)點數(shù)據(jù),且三個數(shù)據(jù)點的數(shù)據(jù)都為1,數(shù)據(jù)為:0x0707
如果數(shù)據(jù)點不是bool類型,比如有一個bool 類型和一個2個字節(jié)的數(shù)據(jù)

兩個數(shù)據(jù)
可以使用虛擬設備可以方便地進行調試,:

虛擬設備
實際發(fā)送的數(shù)據(jù)為:

后臺數(shù)
|