GPRS是General Packet Radio Service(通用分組無線服務技術)的簡稱,它是GSM行動電話使用者可用的一種移動資料業務。GPRS和以往連續在頻道傳輸的方式不同,是以封包(Packet)式來傳輸。我們基于.NET Micro Framework 4.1平台,開發了YFSoft.Hardware.GPRS庫,通過該庫,使用者簡單調用相關接口,就可以實作GPRS通信。
我們所選用的硬體為基于SIM300_V7.02子產品的開發闆,通過序列槽和.NET MF開發闆進行連接配接(如下圖)。

由于.NET Micro Framework開發闆提供的序列槽為母頭,是以和GPRS開發闆連接配接需要制作專門的連接配接線,簡單期間,我用單排針做了三線的交叉連接配接線(不過最好還是采用專門的接頭,下面的連接配接線插接不是很緊密,容易出現通信故障),如下圖。
硬體平台搭建好後,我們編寫GPRS TCP通信程式(UDP和TCP類似,這裡就不再舉例了)。
核心代碼如下:
public static void Main()
{
gprs = new GPRS("COM2", 115200, GPRS.GprsType.SIM300_V7_02);
gprs.DataReceived += new GPRSDataReceivedEventHandler(gprs_DataReceived);
if ((ret=gprs.Open()) != 0)
{
Debug.Print("Open Failed:" + ret.ToString());
gprs.Close();
return;
}
if ((ret = gprs.SetAPN("CMNET")) != 0)
Debug.Print("Config Failed:" + ret.ToString());
Debug.Print("Signal:" + gprs.Signal.ToString());
if (!gprs.Connect(GPRS.GprsMode.TCP, "221.217.???.???", 8080, 200))
Debug.Print("Connect Failed!");
gprs.Close();
Debug.Print("IP:" + gprs.LocalIP);
Debug.Print(gprs.StateString(gprs.State));
while (true)
{
Thread.Sleep(1000);
//gprs.Disconnect();
//gprs.Close();
}
static void gprs_DataReceived(object sender)
{
GPRS gprs = (GPRS)sender;
if (gprs.Available > 0)
Debug.Print(gprs.Receive());
static void key_Click(Button button, KeyPad.ButtonState state, DateTime time)
string KeyName = "";
if (state == KeyPad.ButtonState.Up && gprs != null)
if (!gprs.Send("Hello MF - " + KeyName, 1000))
{
Debug.Print("Send Failed!");
}
在開始測試前,我們需要運作一個TCP Server程式(可以從文末提供的連接配接進行下載下傳),如下圖:
而在VS2010中的.NET Micro Framework代碼運作結果如下:
我們按開發闆上的按鈕向伺服器發送資料,或通過TCPServer程式向開發闆發送資料,其運作效果就如上兩圖所示。
為了便于使用者深入了解YFSoft.Hardware.GPRS庫,我們編寫了詳盡的庫函數手冊,主要内容如下:
屬性:讀寫
說明: 逾時時間,主要指發送AT指令時,裝置的響應時間,該參數和響應時傳回OK或ERROR的AT指令配合使用。該時間機關為毫秒,實際使用時逾時等待時間有可能會遠大于該值。
屬性:隻讀
說明:目前手機信号強度。
範圍:
0 -113 dBm or less
1 -111 dBm
2...30 -109... -53 dBm
31 -51 dBm or greater
99 not known or not detectable
說明:GPRS狀态。
0 - None,
1 - IP_INITIAL,
2 - IP_START,
3 - IP_CONFIG,
4 - IP_IND,
5 - IP_GPRSACT,
6 - IP_STATUS,
7 - TCP_CONNECTING,
8 - UDP_CONNECTING,
9 - IP_CLOSE,
10 - CONNECT_OK,
說明:本地IP位址。
說明:TCP 連接配接狀态。
說明:目前接收緩沖區已接收的資料長度。
聲明:GPRSDataReceivedEventHandler DataReceived
參數:object sender – GPRS類的執行個體
說明:TCP或UDP已接收到資料
聲明:SMSMessageReceivedEventHandler MessageReceived
說明:短信接收通知
聲明:GPRS(string portName, int baudRate,GprsType type)
參數:portName –序列槽名稱,如COM1
baudRate – 波特率,預設115200
type – GPRS子產品類型,目前支援SIM300_V7_02及和其相容的子產品。
傳回:無
說明:GPRS類的構造函數。
聲明:void SetDebugMode(bool on)
參數:on – True 開啟Debug模式 False 關閉Debug模式
說明:設定Debug模式,開啟後,通信過程中的AT指令的内容會通過Debug.Print函數輸出。
聲明:int Open()
參數:無
傳回:操作傳回值
0 – 成功
1 – 序列槽打開失敗
2 – 裝置不線上 (AT)
3 – 設定回顯失敗 (ATE1)
4 – 設定IP頭顯示失敗 (AT+CIPHEAD=1)
5 – 設定傳回資訊格式失敗 (ATV1)
6 – 設定消息格式失敗 (AT+CMGF=1)
7 – 設定是否輸出錯誤資訊模式失敗(AT+CMEE=0)
8 – 檢測SIM失敗(AT+CPIN?)
9 – 注冊到移動營運商的網絡失敗(AT+CREG?)
說明:打開序列槽,并進行必要的配置。
聲明:void Close()
說明:關閉序列槽。
聲明:int SetAPN(string apn)
參數:apn – 接入點的名稱,如CMNET
1 – 注冊GPRS業務失敗
2 – 配置接入點失敗
3 – 設定連接配接模式失敗,連接配接是伺服器還是域名 0是IP位址
4 – 設定應用模式失敗,如果為1 則發送的AT指令也為資料需要服務端解除,如果為0則AT指令會有響應
說明:配置GPRS必要參數。
聲明:string StateString(GprsState state)
參數:state – GPRS狀态
傳回:GPRS狀态的字元串形式
"IP INITIAL",
"IP START",
"IP CONFIG",
"IP IND",
"IP GPRSACT",
"IP STATUS",
"TCP CONNECTING",
"UDP CONNECTING",
"IP CLOSE",
"CONNECT OK"
說明: 傳回GPRS狀态的字元串形式。.NET Micro Framework和.NET Framework不同,ToString并不傳回enum的名稱,而是對應數字的字元。
聲明:bool Connect(GprsMode mode,string ip,int port,int overtime)
參數:mode –TCP或UDP
ip – 伺服器IP位址
port – 端口
overtime – 和 Overtime不同,這是等待連接配接成功的逾時時間。
傳回:連接配接狀态 bool 成功 false 失敗
注意,目前狀态為IP_IND 時,通信狀态也是成功的。
說明:連接配接TCP或UDP伺服器。
聲明:void Disconnect ()
說明:斷開GPRS連接配接。
聲明:bool Send (string buffer,int overtime)
參數:buffer – 要發送的字元串
overtime – 和 Overtime不同,這是等待資料發送成功的逾時時間。
傳回:發送狀态 bool 成功 false 失敗
說明:向TCP或UDP的伺服器發送資料。目前僅支援字元發送。
聲明:string Receive ()
傳回:傳回TCP或UDP伺服器發回的資料(一次傳回目前緩沖區的全部字元串,最長1024)。
說明:接收TCP或UDP的伺服器發送的資料。目前僅支援字元資料接收。
聲明:bool SendMessage (sring phone,string msg,int overtime)
參數:phone – 電話号碼
msg – 要發送的字元串
說明:發送短信。目前僅支援字元發送。
聲明:string[] ReceiveMessage ()
傳回:傳回目前未讀的短信字元串集合。
說明:接收短信。目前僅支援字元資料接收。
略
QQ群:127465602