下面基于上述流程,并結(jié)合實(shí)際實(shí)驗(yàn)操作,詳解可能用到的AT指令。
3.1 建立GPRS數(shù)據(jù)傳輸?shù)恼{(diào)制指令
系統(tǒng)設(shè)計(jì)的主要思路是單片機(jī)通過(guò)發(fā)送AT指令控制GPRS模塊建立無(wú)線(xiàn)信道、完成數(shù)據(jù)傳輸。GPRS數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)主要有兩種方式:通過(guò)域名解析進(jìn)行GPRS數(shù)據(jù)傳輸。AT指令實(shí)現(xiàn)通過(guò)IP地址進(jìn)行GPRS數(shù)據(jù)傳輸?shù)恼{(diào)制指令如下:
(1)AT+CSQ查詢(xún)網(wǎng)絡(luò)質(zhì)量。實(shí)驗(yàn)中在串口調(diào)試助手上返回“+CSQ 31,99”,說(shuō)明網(wǎng)絡(luò)質(zhì)量好。通常,CSQ為24以上就認(rèn)為網(wǎng)絡(luò)質(zhì)量良好。
(2)AT+CPIN?查詢(xún)SLM是否準(zhǔn)備好。實(shí)驗(yàn)中返回“+CPIN READY”說(shuō)明SIM準(zhǔn)備就緒。
(3)AT+CGREG?查詢(xún)是否注冊(cè)成功。實(shí)驗(yàn)中返回“+CGREG:0,5”說(shuō)明注冊(cè)成功。
以上3步主要是確認(rèn)當(dāng)前網(wǎng)絡(luò)和模塊的狀態(tài)。
(4)AT+CGDCQNT=1,“IP”,“CMNET”設(shè)置APN無(wú)線(xiàn)接入點(diǎn)。實(shí)驗(yàn)中返回:“OK”,說(shuō)明接入點(diǎn)設(shè)置成功。APN(Access Point Name),即“接入點(diǎn)名稱(chēng)”,是在通過(guò)手機(jī)上網(wǎng)時(shí)必須配置的一個(gè)參數(shù),它決定了手機(jī)通過(guò)哪種接入方式來(lái)訪(fǎng)問(wèn)網(wǎng)絡(luò),用來(lái)標(biāo)識(shí)GPRS的業(yè)務(wù)種類(lèi),目前分為兩大類(lèi):CMWAP/UNIWAP/3GWAP和CMNET/UNINET/3GNET。中國(guó)聯(lián)通2G業(yè)務(wù)WAP瀏覽器中使用的APN為“UNIWAP”,3G業(yè)務(wù)WAP瀏覽器使用的APN為"3GWAP";中國(guó)聯(lián)通的2G上公網(wǎng)使用的APN為“UNINET”,3G業(yè)務(wù)上網(wǎng)卡及上公網(wǎng)使用的APN為“3GNET”。中國(guó)移動(dòng)上內(nèi)網(wǎng)的APN為“CMWAP”,上網(wǎng)卡及上公網(wǎng)使用的APN為“CMNET”。實(shí)驗(yàn)中使用移動(dòng)動(dòng)感地帶,APN設(shè)置為“CMWAP”。
(5)AT%ETCPIP=“”,“”進(jìn)行PPP撥號(hào)。實(shí)驗(yàn)中返回:“OK”,說(shuō)明撥號(hào)成功。
(6)AT%ETCPIP?查詢(xún)獲得本地IP地址,以用DNS服務(wù)器地址。實(shí)驗(yàn)返回:+ETCPIP:1,“10.73.11.1”,“211.138.24.71”,“211.138.30.66”。其中“10.73.11.1”是本地IP,“211.138.24.71”,“211.138.30.66”是獲得的DNS服務(wù)器地址。
(7)AT%IPOPEN=“ICP”,“192.168.1.101”,1234(實(shí)驗(yàn)時(shí)改成自己的IP和端口號(hào))。
(8)AT%IPSEND=“616263313233”。發(fā)送abc123。此處由于使用華為公司GTM900-C無(wú)線(xiàn)通信模塊,數(shù)據(jù)以16進(jìn)制發(fā)送,所以發(fā)送的是abc123的16進(jìn)制表示。
(9)AT%IPOPEN?查詢(xún)鏈路狀態(tài)。試驗(yàn)中返回:“TCP”,”211.252.207.107”,1234,1026。AT%IPOPEN之后,要等待直到出現(xiàn)CONNECT或者CONNECTERROR之類(lèi)的提示信息才能做下一步的操作。
(10)AT%IPCLOSE和AT%IPCLOSE=5關(guān)閉連接。實(shí)際中必須等待連接成功后才能關(guān)閉
3.2 數(shù)傳終端的硬件設(shè)計(jì)
系統(tǒng)中單片機(jī)串口利用MAX232完成TTL/CMOS電平轉(zhuǎn)換后與GPRS模塊相連接,實(shí)現(xiàn)模塊初始化和數(shù)據(jù)收發(fā)。同時(shí)擴(kuò)展串口可與GPS接收機(jī)或其他嵌入式系統(tǒng)相連進(jìn)行數(shù)據(jù)處理與交換。MCU選用Atmel公司的AT89S51;GPRS模塊選用華為公司GTM900-C無(wú)線(xiàn)通信模塊。
3.3 數(shù)傳終端的軟件實(shí)現(xiàn)
系統(tǒng)軟件設(shè)計(jì)的核心部分是單片機(jī)與GPRS模塊的通信,兩者間需定義通信協(xié)議、規(guī)定幀格式,通過(guò)AT指令實(shí)現(xiàn)GPRS網(wǎng)絡(luò)的附著、PDP激活、Internet的接入及數(shù)傳。系統(tǒng)程序設(shè)計(jì)采用模塊化設(shè)計(jì)思想,主要分為系統(tǒng)初始化模塊、建立連接模塊、數(shù)據(jù)傳輸模塊、斷開(kāi)連接模塊4部分。
3.3.1 初始化及通信協(xié)議
通信協(xié)議功能:實(shí)現(xiàn)GPS模塊、藍(lán)牙模塊、GPRS模塊與單片機(jī)間的通信。此處信息由GPS、藍(lán)牙采集,經(jīng)過(guò)單片機(jī)處理后經(jīng)GPRS網(wǎng)絡(luò)發(fā)送。
幀格式說(shuō)明:1,幀頭。0xff,一幀的起始位置。2,幀類(lèi)型。0x01,代表命令幀;0x02,代表數(shù)據(jù)幀。3,區(qū)別碼。0x11:模塊發(fā)送信息給單片機(jī);0x12:?jiǎn)纹瑱C(jī)發(fā)送信息給模塊。4,設(shè)備號(hào)。0x20:?jiǎn)纹瑱C(jī);0x21:GPS模塊;0x22:藍(lán)牙模塊;0x23:GPRS模塊。5,內(nèi)容長(zhǎng)度。
0x(xx),xx為適當(dāng)?shù)闹怠?,命令類(lèi)型。0x31:讀取目標(biāo)設(shè)備的當(dāng)前狀態(tài);0x32:讀取目標(biāo)設(shè)備的數(shù)據(jù)。7,內(nèi)容。在不使用它的命令格式中,它的值無(wú)意義,為通信方便,在不使用它的命令格式中,規(guī)定其值為0x00。8,校驗(yàn)碼。從第一個(gè)字節(jié)開(kāi)始到Xor的前一字節(jié),共N-1 Byte,作異或運(yùn)算。
3.3.2 建立連接
為方便程序設(shè)計(jì),將建立連接所需的AT命令以字符串形式存放于A(yíng)T命令緩存區(qū),所需多條AT指令長(zhǎng)度不一且發(fā)送順序不可改變,為有效控制每條AT指令、提高CPU利用率需將AT指令緩存區(qū)設(shè)置為指針數(shù)組形式,在建立連接時(shí)通過(guò)循環(huán)調(diào)用字符串發(fā)送函數(shù)將AT命令發(fā)送,相鄰AT命令間需要2~3 s的延時(shí),每發(fā)送完一條AT命令調(diào)用一個(gè)3 s的延時(shí)子程序,然后通過(guò)串口中斷接收函數(shù)接收AT命令返回值來(lái)判斷連接是否成功。注意,AT命令均以回車(chē)符作為結(jié)束標(biāo)志,并以字符串形式傳送,因此在定義AT命令緩存區(qū)時(shí)應(yīng)注意轉(zhuǎn)義字符的使用。