【物联网智能网关-03】GPRS模块中文短信收发

简介:

在去年年初,就已经推出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.rar

MF简介:http://blog.csdn.net/yefanqiu/article/details/5711770

MF资料:http://www.sky-walker.com.cn/News.asp?Id=25







本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/882120,如需转载请自行联系原作者

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
安全 物联网 Linux
IoT技术-用HackRF做一个私网LTE基站
本文中涉及到国家通信安全。请不要随便尝试。如若尝试后造成任何后果与本文作者无任何关系。
836 1
IoT技术-用HackRF做一个私网LTE基站
|
11月前
|
安全 物联网安全 网络安全
物联网安全之WIFI协议
物联网安全之WIFI协议
|
安全 物联网 数据安全/隐私保护
|
网络安全 数据安全/隐私保护 网络虚拟化
智能接入网关接入|学习笔记
快速学习智能接入网关接入
463 0
智能接入网关接入|学习笔记
|
传感器 物联网
LoRaWAN设备接入阿里云IoT企业物联网平台实战
LoRaWAN设备接入阿里云IoT企业物联网平台实战
1644 0
|
传感器 数据采集 监控
IOT常用通信方式(有线、无线)
整理归纳了IOT常用的有线和无线通信方式,供使用时备查
2442 0
|
物联网
物联网接入设备报错
物联网接入设备报错,device.serve is not a function
【物联网智能网关-03】GPRS模块中文短信收发
支持PDU方式收发短信(支持中文)、彩信发送、二进制方式 GPRS数据收发、短信按类型提取、短信删除和短信事件通知等等功能。
1035 0
【物联网智能网关-09】CAN总线通信演示(TinyGUI触屏)
CAN是Controller AreaNetwork 的缩写,ISO国际标准化的串行通信协议。最早应用在汽车上,在欧洲是汽车网络的标准协议,目前已经广泛应用在工业自动化、智能家居、船舶、纺织和医疗设备等领域
908 0
|
数据安全/隐私保护 物联网 移动开发
【物联网智能网关-18】多通道远程安全升级
随着物联网各种项目的大量实施,在运行维护过程中,其技术人员的交通住宿成本及人力成本的逐年增加,让设备的远程维护,远程升级功能变得越来越重要了。
1074 0

相关产品

  • 物联网平台