在去年年初,就已經推出V1.0.0的GPRS庫,不過在這個版本上隻是實作了西文短信收發和字元串方式的GPRS資料通信,功能還相對不完善(參見我以前的博文《GPRS通信實作》)。最近更新的版本,對以上功能進行了大幅度的更新改進,比如支援PDU方式收發短信(支援中文)、彩信發送、二進制方式 GPRS資料收發、短信按類型提取、短信删除和短信事件通知等等功能。
考慮到功能比較多,我們分三篇文章來介紹最新的GPRS庫的功能,這一篇我們先介紹和短信收發相關的内容。
庫函數中和短信收發相關的方法如下:
(1)設定短消息中心位址
聲明:int SetCenterNum (sring CenterNum)
參數:CenterNum– 短消息中心位址
傳回:操作傳回值
0 – 發送成功
-1 - 設定失敗
說明:短消息中心位址。聯通和移動不同地區,号碼都不同,一般情況下,不需要專門設定
(2)發送短信(PDU方式)
聲明:int SendMessage (sring phone,string msg)
參數:phone – 電話号碼
msg – 要發送的字元串
0 –發送成功
-1 –字元長度為0或大于70個位元組
-2 –設定短消息格式失敗
- 3 –發送短信失敗
說明:發送短信。支援中文字元發送。
(3)讀取短信
聲明:int ReceiveMessage(out GsmMessage[] msgs,MessageType msgType)
參數:
msgs – 資訊集合,每一項都包括,短信發送的電話,發送時間和内容
msgType – 消息類型:未讀消息,已讀消息,未發消息,已發消息,全部消息
傳回:傳回指定類型的短信字元串集合。
說明:接收短信。目前支援中英文短信接收。
(4)删除短信
聲明:int DeleteMessage ()
參數:無
0 – 删除0個消息
-1 – 設定PDU模式失敗
>0 – 删除的短消息個數
說明:删除全部的短消息。
除了方法外,還有一個短信收到事件,具體聲明如下:
(1)短信收到通知
聲明:SMSMessageReceivedEventHandler MessageReceived
參數:object sender – GPRS類的執行個體
說明:短信接收通知
為了便于說明庫的使用,我們設定一個場景,來進行相關代碼的功能示範。

場景是這樣設定的:
(1)、程式不斷采集溫濕度資料,一旦超出預先設定好的範圍,就會短信通知報警。
(2)、手機發送短信,控制繼電器,可以遠端打開和關閉加濕器。
具體代碼如下(其中溫濕度采集部分,詳情請參見:通過AD采集擷取溫濕度):
(1)、GPRS子產品初始化相關代碼
int ret = 0;
gprs = new GPRS("COM3", 115200, GPRS.GprsType.SIM300_V6_x);
//打開GPRS子產品
if ((ret = gprs.Open()) != 0)
{
Debug.Print("Open Failed:" + ret.ToString());
gprs.Close();
screen.DrawText("打開GPRS子產品失敗", font, Colors.Red, 20, 60);
screen.Flush();
return;
}
Debug.Print("Open OK");
screen.DrawText("打開GPRS子產品成功", font, Colors.Green, 20, 60);
screen.Flush();
//判斷是否線上,逾時時間10s
if ((ret = gprs.IsOnline(10000)) != 0)
{
Debug.Print("AT Failed:" + ret.ToString());
gprs.Close();
screen.DrawText("GPRS子產品不線上", font, Colors.Red, 20, 100);
screen.Flush();
return;
}
Debug.Print("AT OK");
screen.DrawText("GPRS子產品線上", font, Colors.Green, 20, 100);
screen.Flush();
//GPRS子產品初始化
if ((ret = gprs.Initialize()) != 0)
{
Debug.Print("Initialize Failed:" + ret.ToString());
gprs.Close();
return;
}
Debug.Print("Initialize OK");
screen.DrawText("GPRS初始化成功", font, Colors.Green, 20, 140);
screen.Flush();
//顯示信号強度
//Debug.Print("Signal:" + gprs.Signal.ToString());
gprs.MessageReceived += new SMSMessageReceivedEventHandler(gprs_MessageReceived);
(2)、GPRS子產品短信接收并控制部分
static void gprs_MessageReceived(object sender)
{
int ret = 0;
GsmMessage[] msgs = null;
//讀未讀的短消息
if ((ret = gprs.ReceiveMessage(out msgs, GPRS.MessageType.REC_UnRead)) < 0)
{
Debug.Print("ReceiveMessage Failed:" + ret.ToString());
}
else
{
if (ret > 0)
{
foreach (GsmMessage msg in msgs)
{
Debug.Print(msg.ToString());
}
//gprs.SendMessage(msgs[0].phone, msgs[0].ToString());
switch (msgs[0].message)
{
case "開":
opSwitch.Write(true);
State = true;
break;
case "關":
opSwitch.Write(false);
State = false;
break;
}
}
}
//删除短消息
//gprs.DeleteMessage();
}
(3)濕度報警相關代碼
//濕度報警
if (H > 60 && !AlarmFlag)
{
//發送報警短信(實際應用時,請填入實際的電話号)
gprs.SendMessage("158XXXXXXX", "目前濕度:" + H.ToString("F2"));
AlarmFlag = true;
}
if (AlarmFlag && H < 50)
{
AlarmFlag = false;
}
實際運作效果圖:
說明:硬體平台采用最新的紫藤207系統;GPRS子產品采用Sim300 V6.02版本的子產品;繼電器子產品采用5V驅動,可控制220V 10A的電器,一般家用小功率電器可以直接使用;溫濕度子產品采用了相對低價的AD接口的子產品。
下一篇博文,将介紹GPRS子產品是如何發送彩信的,敬請期待。
本文源碼:
http://www.sky-walker.com.cn/MFRelease/Sample/YF_GPSR01.rar類庫下載下傳:
http://www.sky-walker.com.cn/MFRelease/library/v42/YFSoft.Hardware.GPRS.rarMF簡介:
http://blog.csdn.net/yefanqiu/article/details/5711770MF資料:
http://www.sky-walker.com.cn/News.asp?Id=25