天天看點

【物聯網智能網關-03】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)、手機發送短信,控制繼電器,可以遠端打開和關閉加濕器。

(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());

    screen.DrawText("GPRS子產品不線上", font, Colors.Red, 20, 100);

Debug.Print("AT OK");

screen.DrawText("GPRS子產品線上", font, Colors.Green, 20, 100);

//GPRS子產品初始化

if ((ret = gprs.Initialize()) != 0)

    Debug.Print("Initialize Failed:" + ret.ToString());

Debug.Print("Initialize OK");

screen.DrawText("GPRS初始化成功", font, Colors.Green, 20, 140);

//顯示信号強度

//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;

實際運作效果圖:

下一篇博文,将介紹GPRS子產品是如何發送彩信的,敬請期待。

<a href="http://weibo.com/1804832611?s=6uyXnP"></a>

繼續閱讀