文档章节

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

物联网积木
 物联网积木
发布于 2014/05/28 15:10
字数 1150
阅读 158
收藏 10

在去年年初,就已经推出V1.0.0GPRS库,不过在这个版本上只是实现了西文短信收发和字符串方式的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


本文转载自:http://blog.csdn.net/yfiot/article/details/7614488

物联网积木
粉丝 1
博文 10
码字总数 2713
作品 0
海淀
私信 提问
用组态软件通过DTP-S09F远程控制实现水质自动监测系统

中心站的远程计算机,通过电话网、GSM、GPRS等多种方式与现场工控计算机联络,实现对采水单元、配水单元和分析单元的远程监控,数据的传输、处理和报表。 支持多种传输方式,公用电话网拨号、...

dataie456000
2014/11/20
147
0
阿里云高性能时序数据库对接grfana可视化数据平台

阿里云高性能时序数据库对接grfana可视化数据平台,现在碰到的问题是,可以查出数据,但是物联网模块上传的数据,无法进行区分,无法区分他是那个地区,那个类型的传感器, 需要一套数据分类...

终极作者
2018/10/19
134
0
现在NBIOT锁设备为何这么火?

近年来,智能锁的应用已经进入到寻常百姓家。调查显示,城镇人口占比为 49.8%,即有 2.32 亿户城镇家 庭,这些家庭中有 80%的家庭听说过并希望安装智能锁,如果以市场价格 2000 元每把来计算...

yahaha456
2018/08/17
5.9K
1
高通公司推出专为物联网而设计的新一代蜂窝芯片

高通公司宣布推出用于物联网(IoT)应用的下一代调制解调器,如资产跟踪器,健康监视器,安全系统,智能城市传感器和智能电表,以及一系列可穿戴式跟踪器。 新的Qualcomm 9205 LTE调制解调器...

朗锐智科1
01/07
0
0
破解物联网落地困境-阿里云硬件接入最佳实践

在《剑指物联》第五期中,阿里云IoT事业部总经理库伟曾提到物联网实施过程中的困境。比如在设备厂家层面:智能设备连接不稳定,网络安全差;在ISV层面:标准不统一,集成各厂商的智能设备成本...

刘洪峰iot
2018/05/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

记一次项目启动报java.lang.StackOverflowError

项目是spring boot,之前没有问题,突然有一次debug方式启动的时候报这个错误。 因为其他同事没有问题,线上也没有问题,所以先排除了是代码问题。 开始以为电脑开的软件太多,然后给jvm的内存...

chro008
21分钟前
12
0
idea 2019.2免费激活码

亲测有效到2020.6 812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNIIiwibGljZW5zZWVOYW1lIjoi5q2j54mIIOaOiOadgyIsImFzc2lnbmVlTmFtZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb......

Iverson58
28分钟前
7
0
移动APP开发中的重要注意事项

您的移动app在变化吗?如果没有,请确保遵循这些提示进行移动app开发。大多数行业的IT领导者都优先考虑劳动力和消费者的移动性。实现成功的移动app开发具有挑战性,涉及在app功能开发的基础上...

a429011717
35分钟前
6
0
Qt编写自定义控件69-代码行数统计

一、前言 代码行数统计主要用来统计项目中的所有文件的代码行数,其中包括空行、注释行、代码行,可以指定过滤拓展名,比如只想统计.cpp的文件,也可以指定文件或者指定目录进行统计。写完这...

飞扬青云
54分钟前
12
0
驰骋工作流引擎-ccflow关于 “ 是否自动计算未来的处理人”的功能变更

关键字:流程未来节点处理人 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 业务背景:一个流程在启动起来后,是可以对一些节点计算出来处理人是谁,流程的走向。对于另...

孟娟
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部