GPRS模塊的使用(一)
爲了做一個QT gprs模塊用上網傳輸數據,我這裏用的是BenQ M23 GSM/GPRS模塊。
首先我簡單介紹一下:
BENG公司的M23/M23模塊是目前市場上的主流GSM/GPRS模塊之一,可以應用於GSM短信通信以及語音通信,其中,短信息適合對實時性質要求不高數據量不大的數據通信。由於支持GPRS 和嵌入式的TCP/IP,M23還可以使用於實時性要求較高數據量相對較大,傳送速度相對較快的數據通信領域。M23模塊支持的是CLASS B類型GPRS 網絡,能夠支持語音短信和GPRS數據傳輸,但是不是同一時刻進行兩種通信方式,當進行短信和語音通信的時候GPRS數據傳輸暫時掛起,當結束之後繼續自動恢復GPRS 數據的傳輸。
現在我這裏的gprs模塊是基於串口通信的。所以我要用這模塊必須先要把串口設置好
爲了好點調試設計而來一個測試界面(不過也可以當成是一個gprs網絡接口)
這是一個界面,下面來看看要做哪些工作才能使自己寫的程序能通過gprs發送數據
在這裏還要說一點,我由於我用的是M23這個gprs模塊,本來設想的是通過ppp撥號上網,在linux下調試了好幾天多沒見到成果,下面步驟(包括從網上找來的資料)
GPRS撥號模塊
GPRS傳輸層負責建立與GPRS網絡的物理連接,實現數據的物理層傳輸。選用GPRS模塊M23作爲傳輸介質,GPRS模塊相當於一種無線Modem,它的接口簡單,可通過AT指令來控制,解決了開發底層傳輸媒體的困難。
在嵌入式Linux環境下,通過PPP撥號,GPRS上網
PPP的撥號上網,方法如下:(通過網上搜索)
1.首先得讓內核支持PPP,進入Linux 內核目錄(kernel-2.6.30.4),執行 #make menuconfig
添加如下內核選項:(這一步一般是不用做的,因爲GEC2440其實已經添加了此功能了)
Device Drivers ---> Network device support --->
<*> PPP (point-to-point protocol) support
[*] PPP multilink support
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
<*> SLIP (serial line) support
[*] CSLIP compressed headers
添加完成後保存並退出,執行# make zImage
編譯完成以後,在內核目錄的arch/arm/boot 目錄下便會生成一個 zImage 內核文件,燒到開發板中,這樣開發板內核就支持了PPP了。
2.下載ppp-2.4.4.tar.gz 或其他版本PPP 撥號程序源碼,可以上網搜索
進入ppp-2.4.4.tar.gz的目錄執行解壓命令 #tar zxf ppp-2.4.4.tar.gz
解壓後出現 ppp-2.4.4 文件夾,進入該目錄( #cd ppp-2.4.4 ),執行配置命令
#./configure
然後執行 #make CC=/usr/local/arm/4.1.2/bin/arm-linux-gcc (後面的CC表示你的交叉編譯器目錄,要是你添加PATH路徑,直接CC=arm-linux-gcc)
編譯完成後,進入下一步。
3.修改相關撥號腳本
進入 ppp-2.4.4 目錄下的 script 目錄,可以找到 ppp-on 、ppp-off 、ppp-dial-on 等多個腳本文件
執行#vi ppp-on
內容如下,修改一下里面的內容
TELEPHONE=555-1212 改爲 TELEPHONE=*99***1#
exec /usr/sbin/pppd debug lock modem crtscts /dev/ttyS0 38400 \
asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP \
noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT
改爲
exec /bin/pppd debug lock modem nocrtscts 你的串口設備 你的波特率 \
asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP \
noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT
ppp-on 修改完成後執行 ESC 和 :wq! 強制保存。
然後修改ppp-on-dialer
執行#vi ppp-on-dialer
刪除最後兩行關於 撥號帳戶密碼的。
到此修改結束
4 複製相關文件到開發板
以下$(PPP)爲 計算機上ppp-2.4.4 的目錄 ,$(EMB_BIN)代表 開發板中的 /bin 目錄,$(EMB_ETC)代表開發板中的 /etc 目錄
#cp $(PPP)/chat/chat $(EMB_BIN)#cp $(PPP)/pppd/pppd $(EMB_BIN)
#cp $(PPP)/pppdump/pppdump $(EMB_BIN)#cp $(PPP)/pppstats/pppstats $(EMB_BIN)
#mkdir $(EMB_ETC)/ppp
#cp $(PPP)/etc.ppp/* $(EMB_ETC)/ppp
#cp $(PPP)/scripts/ppp-on $(EMB_BIN)
#cp $(PPP)/scripts/ppp-off $(EMB_BIN)
#cp $(PPP)/scripts/ppp-on-dialer $(EMB_ETC)/ppp
複製完成(其實放到相應的/usr/sbin目錄也是可以的,只要你仔細看ppp-on的腳本)
此後,連接好ARM與GPRS模塊後,便可以輸入命令 #ppp-on 執行撥號了!
執行上面的ppp-on 命令以後 等一會,你可以看見GPRS模塊上面的指示燈快速而穩定地閃爍,表明撥號成功了
這時候你可以在開發板上執行#ifconfig 命令,可以看見新建了一個 ppp0 的設備 ,上面還有IP地址等信息呢!
經過這部後,還要修改DNS服務器地址
#vi /etc/resolv.conf
添加 nameserver 211.136.20.203(這要視乎你本地的移動DNS服務器地址)
廣東 中國移動CMNET
primary DNS address 211.137.130.3
secondary DNS address 211.137.130.19
保存退出
嘗試一下 ping www.baidu.com 看看能夠ping出什麼東西來?,如果ping不通,使用#ifconfig發現有ppp0設備,也有eth設備,可以先關掉eth設備試下#ifconfig eth0 down (根據顯示的eth名)
如果這樣就搞定了,我想我也不用寫了,當發現還是不成功,而且看上去還是有很多不明白的時候可以再接着上面的步驟繼續如下操作:
首先是ppp-on,ppp-off,ppp-on-dialer只是一些寫好的腳本,自己可以查看,不是很難。
主要步驟是先在板子的/etc/ppp/peers目錄下建立文件gprs(gprs也可以是其它名字),寫入撥號參數。接着在/etc/ppp目錄下建立gprs-connect-chat(撥號命令)、chap-secret(用戶名等),最後調用#pppd call gprs(前提是你已經在前面的步驟中把pppd等文件複製指定目錄下了),可以通過#tail -f /var/log/messages命令查看日誌。最後關閉掉eth設備,即可通過ppp0設備上網了。下面給出各個文件的內容
1.
#/etc/ppp/peers/gprs
# This is pppd script for China Mobile, used GPRS Module
# Usage: root>pppd call gprs
/dev/ttyUSB0 #自己的設備文件名,首先最後在ppp撥號上網前保證你的模塊能正確接收和返回AT命令吧
115200 #波特率
nocrtscts #無硬件流控的
modem
#noauth #想讓ppp在後臺運行可以去掉註釋
debug
#nodetach
#hide-password
usepeerdns
noipdefault
defaultroute
user "cmnet" #你的用戶名,最好隨便起個,不加雙引號也可以的
0.0.0.0:0.0.0.0 #從遠端分配ip地址等
ipcp-accept-local
#ipcp-accept-remote
#lcp-echo-failure 12
#lcp-echo-interval 3
#noccp
#novj
#novjccomp
#persist
#connect '/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat'
connect '/usr/sbin/chat -v -s -f /etc/ppp/gprs-connect-chat'
#disconnect '/bin/chat -v -f /etc/ppp/gprs-disconnect-chat'
可以根據自己的需要和文件存放的位置修改,切忌直接複製啊!
2.
#/etc/ppp/gprs-connect-chat
# chat script for China Mobile, used GPRS module.
TIMEOUT 15
ABORT "DELAYED"
ABORT "BUSY"
ABORT "ERROR"
ABORT "NO DIALTONE"
ABORT "NO CARRIER"
TIMEOUT 40
'' AT
OK AT+CFUN=1 #都是標準的AT命令,如果採用的3G網卡的話需要這個命令,不是則應該刪除
OK ATS0=0
OK ATE0V1
OK AT+CGDCONT=1,"IP","CMNET" #中移動的
OK ATDT*99***1#
CONNECT ''
3.
#/etc/ppp/chap-secrets
#client server secret IP address
"cmnet" * "cmnet" *
現在一般都採用chap認證,也有pap認證的。
最後想關閉ppp了,那麼可以用上面的ppp-off,也可以直接ps下,再kill了啊!呵呵!
上面設置花了好多時間都沒成功,由於時間緊急,以後有時間了在繼續調試,下面我們又一種簡單的方式來gprs上網,就是通過命令設置
AT 命令與解釋
如果 sim 卡已經開通了 GPRS業務就可以通過程序來實現數據傳輸了 。 作爲服務器端必須有一個或者能映射一個固定的公網 IP ,而且約定的通信端口必須是處於監聽狀態,否則撥號連接將不成功 。
AT+CGDCONT=1,"IP","CMNET" // 接入點爲中國移動 CMNET
AT%CGPCO=1,"PAP,,",1 // PAP 驗證,用戶名密碼爲空即可
AT$NOSLEEP=1 // 使模塊在長時間沒有通信的時候不會進入睡眠
AT+CNMI=2,1,,1 // 短信接收提醒,使在 gprs 模式下時能夠收到短信
AT$DESTINFO="x.x.x.x",1,x // X代表遠端服務器IP和端口,1代表TCP,如是2代表UDP
ATD*97# // 使用內置撥號協議撥號
如上設置後就對串口操作就可以把數據發送到互聯網,或接受互聯網發來的數據