DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2563|回复: 2
打印 上一主题 下一主题

[待整理] 智能家居系统中的短信收发程序设计

[复制链接]
跳转到指定楼层
楼主
发表于 2015-5-1 19:12:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
  摘要: 针对智能家居系统中安防报警信息实时收发及家电远程控制的需求,提出使用3G模块收发短信的方法,并设计了实现短信同时收发功能的软件架构。实验结果表明,该方法简单实用,能够满足智能家居系统的要求。
  关键词: 智能家居;短信收发;ARM;3G

  Abstract: Aiming at the demands including realtime receiving/sending of security alarm information and home appliance remote control in Smart Home system, a solution is put forward to receive/send message using 3G module, and a software architecture is designed to realize message receiving/sending at the same time. Experimental results show the design is simple and practical, and it can meet the requirements of Smart Home system.
  Key words: Smart Home; message receiving/sending;ARM;3G

引言
  随着国民经济和科技水平的提高,特别是信息技术的迅猛发展与提高,家庭生活朝着现代化方向发展,居住环境更加舒适化、安全化,“智能家居”这一概念也开始为人所熟知。在智能家居系统中,人们对信息(特别是报警信息及家电控制信息)及时传递的要求增多;而手机以其价格低廉、携带方便、可实时通信等优点,在普通老百姓中有相当高的普及率。基于以上两点,使用手机短信来实时传递信息成为优先选择。本文在分析串口连接3G模块发送和接收短消息的基础上,对自行设计的短信收发软件架构原理以及实现的关键技术进行了分析说明。
1 系统实现
  本系统作为智能家居系统的重要组成部分,一方面,当报警传感器报警时,将相应报警信息存放到队列中,并由ARM主控芯片通过3G模块将报警短信发送到用户手机;另一方面,用户可通过手机发送短信,由3G模块接收该短信,并将短信内容传送给ARM主控芯片来控制家电执行相应操作。
1.1 硬件设计
  整个系统硬件组成如图1所示。
  本设计主控芯片采用飞思卡尔的多媒体应用处理器IMX515。IMX515具有极高的处理性能,集成了飞思卡尔先进的ARM CortexA8内核的高能效配置,运行速率可达800 MHz,工作温度范围的扩大使其可以用于频率高达600 MHz的工业设备。3G模块采用上海域格公司的CEM600模块。CEM600是一个PCI Express Mini Card 1.2标准接口的CDMA2000 1X EVDO Rev.A模块,采用高通EVDO单芯片平台QSC6085,具有语音、短信、高速数据业务和GPS等功能。
  本系统中,ARM主控芯片IMX515与3G模块采用串行异步通信接口,串行通信速率为115 200 bps。利用串行接口,IMX515芯片向3G模块发送一系列AT命令,以实现控制3G模块收发短信的功能。对应3G模块CEM600的主要AT命令如下:
  “AT”检测模块与串口是否连通,能否接收AT命令。



图1 系统硬件组成


  “AT+CMGF”设置短信采用的格式。
  “AT^HCMGS”发送一条短信到3G网络。
  “AT^HCMGL”获取短信在模块中的索引。
  “AT^HCMGR”从模块中读取某个存储位置的短信。
  “AT+CMGD”删除模块中某个存储位置的短信。
1.2 软件设计
  本文介绍的短信处理操作在一个线程中实现。首先,使用open()函数打开设备文件,并对设备进行初始化(包括设置通信的波特率、停止位、数据位等);然后,使设备一直在检测设备状态、读短信队列并发送短信、读取设备中未读短信、删除已读短信4个基本状态之间不断循环切换,如图2所示。这样就实现了发送和接收短消息的并发操作。



图2 4个基本状态


  该系统基于状态机实现,状态机的描述如图3所示,由以下10种状态组成:



图3 状态机描述


① stBeginRest状态:检测设备可否正常工作,若不能正常工作则不停循环检测设备。
② stContinueRest状态:休眠500 ms,从短息队列中获取要发送的短信。若队列为空则休眠5 s后转入读取短信状态stReadMessageRequest;若队列不为空则转入发送短信状态stSendMessageRequest。
③ stSendMessageRequest状态:发送短信,然后转入获取短消息反馈状态stSendMessageResponse。
④ stSendMessageResponse状态:获取设备对发送短信命令的反馈,如果发送成功则转入状态stBeginRest;如果发送失败或无反馈,则转入发送等待状态stSendMessageWaitIdle。
⑤ stSendMessageWaitIdle状态:休眠500 ms,判断是否已经重发5次,若已重发5次则转入状态stContinueRest,否则转入发送短信状态stSendMessageRequest。
⑥ stReadMessageRequest状态:读取短信列表,然后转入获取读短信列表命令反馈状态stReadMessageResponse。
⑦ stReadMessageResponse状态:根据反馈信息,获取读短信列表并返回状态,如果读取成功且有未读短信则获取每条短信,在设备中存储位置并读出所有短信息,然后转入删除短信状态stDeleteMessageRequest;如果读取成功但没有未读短信或读取短信失败,则转入初始状态stBeginRest;如果获取读短信列表后未收到反馈,则休眠5 s转入初始状态stBeginRest。
⑧ stDeleteMessageRequest状态:删除短信并转入获取删除操作反馈状态stDeleteMessageResponse,如果删除完所有已读短信则转入初始状态stBeginRest。
⑨ stDeleteMessageResponse状态:获取设备对删除短信命令的反馈,如果删除成功则继续转入删除短信状态stDeleteMessageRequest。否则转入删除等待状态stDeleteMessageWaitIdle。
⑩ stDeleteMessageWaitIdle状态:休眠500 ms,然后转入删除短信状态stDeleteMessageRequest。
2 短消息收发技术分析
  首先,我们必须了解ESTI制定的SMS规范,其中与我们讨论的短消息收发有关的规范主要包括GSM03.38、GSM03.40和GSM07.05。前两者主要描述SMS的技术实现(含编码方式),而后者则规定了SMS的DTEDCE接口标准 (AT命令集)。
  目前,实现发送和接收SMS信息主要有3种方式:Block Mode、Text Mode和PDU Mode。Block Mode已经过时,目前很少用了;Text Mode是纯文本方式,可使用不同的字符集,主要用于欧美地区,也可用于发送中文短消息,但国内手机基本上不支持;而PDU Mode可以被所有手机支持,可以使用任何字符集,它也是手机默认的编码方式。本文介绍的就是在PDU Mode下发送和接收短消息的实现方法。
  PDU串表面上是一串ASCII码,由0~9、A~F这些数字和字母组成,它们是8位字节的十六进制数,或者BCD码十进制数。PDU串不仅包含可显示的消息本身,还包含很多其他信息,如SMS服务中心号码、目标号码、回复号码、编码方式和服务时间等。
  我们先以发短信“Hello!”为例说明PDU串的结构和编排方式。青岛地区短信中心号码是+8613800532500,目标手机号码是18766255358,消息内容是“Hello!”。从手机发出的PDU串可以是:08 91 68 31 08 50 23 05 F0 11 00 0D 91 68 81 67 26 55 53 F8 00 0800 06 C8 32 9B FD 0E 01
  该PDU串中各字段的含义如表1所列。
表1 发送短信PDU串中各字段含义



2.1 短消息发送过程分析
  ARM主控芯片通过串口向3G模块发送AT命令以实现对其基本操作。发送短信流程及主要函数如下:
  当程序进入stContinueRest状态时,读短信息队列以获取发送短信内容并存入QString str中,然后进入stSendMessageRequest状态;调用接口函数sendWarning(int fd,QString str),程序进入发送短信状态;读取配置文件中短信中心号码及目标号码,调用编码函数gsmEncodePdu(),按照PDU编码规范构建PDU串;调用短信发送函数excuteSend(int fd,char* cmgf,char* cmgs,char* message),完成短信的发送操作。其流程如图4所示。



图4 发送短信流程
2.2 短消息接收过程分析
  3G模块将收到的短消息存放在模块存储器中,ARM从模块中接收短信实际上就是从3G模块的存储器中读出短信息。
  当程序进入stReadMessageRequest状态,执行函数gsmReadMessage()。接口函数gsmReadMessage(int portfd)首先执行命令“AT+CMGF=1”,设置短信模式为文本模式(模块所用电信手机卡默认模式);然后执行命令“AT^HCMGL=4”来读取模块中当前所有短信。执行完该函数后,程序进入stReadMessageResponse状态,根据模块对读短信AT命令的反馈,记录下当前每条短信在模块中的存储位置及短信总数,并执行函数gsmParseMessageList()。解析短信函数gsmParseMessageList(int portfd,int *location,int sumSMS)逐条解析当前CEM600模块中所有短信,将每条短信的发送方号码、日期时间及短信内容存放到家电控制信息队列中。
结语
  本文对使用ARM主控芯片控制3G模块进行发送和接收短信的过程进行了详细描述。经过多次测试证明该方法能成功实现发送和接收短信,实时性、可靠性等性能参数均能满足实际应用需要。短消息发送的安全问题以及对垃圾短信的屏蔽将是下一阶段的研究重点。

参考文献
[1] 符意德,陆阳.嵌入式系统原理及接口技术[M].北京:清华大学出版社,2007.
[2] 上海域格信息技术有限公司.CEM600/CEM800 AT COMMAND使用手册,2010.
[3] 杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003.
[4] Neil Matthew,Richard Stones.Linux程序设计[M].北京:人民邮电出版社,2010.
冯金超(硕士研究生)、张秀娟(教授),主要研究方向为计算机应用技术、嵌入式系统及应用。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
板凳
发表于 2022-1-29 19:53:00 | 只看该作者
看帖回复是种美德支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-4-27 22:52 , 耗时 0.139553 秒, 20 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表