APP下载

基于SIM900A的GSM远程监控系统设计

2014-07-24王明新

电脑知识与技术 2014年15期
关键词:远程监控短信

王明新

摘要:为实现对设备的远程监控,方便管理人员对设备的远程控制并及时了解故障信息,设计了一款基于GSM技术的短信息无线监控系统。系统以SimCom公司的SIM900A模块和STC12C5A32S2单片机为核心,进行软硬件设计,介绍单片机控制SIM900A模块所使用的AT指令和短信TEXT(文本)模式接收和PDU(中文)方式发送数据格式。设计的系统运行稳定可靠,并成功的应用在仓库的温度控制项目中。

关键词:远程监控;GSM;短信;AT指令;PDU

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)15-3500-04

Design of GSM Remote Monitoring System Based on SIM900A

WANG Ming-xin

(State Press and Publication Radio Administration of No.2022, Kashi 844000, China)

Abstract: In order to achieve remote monitoring of equipment, to facilitate the remote control of devices and to keep abreast of failure information, it designs a short message wireless monitoring system based on GSM technology. System uses SimCom's SIM900A modules and STC12C5A32S2 microcontroller as core to design hardware and software, it introduces formats of single-chip control module SIM900A using AT commands and SMS TEXT (text) mode to receive and PDU (Chinese) to send data. The Designed system operated stable and reliable and successfully applied in a warehouse temperature controlled project.

Key words: remote monitoring; GSM; messaging; AT commands; PDU

采用GSM的短信功能,可以使信息及时传递,且由于短信服务费用低廉,在多个行业中,尤其在远程监控方面,已得到了广泛使用。随着数字无线通信技术的成熟和GSM/GPRS/CDMA公用网络的完善,远程监控技术进入一个新的发展阶段。

GSM是第二代移动通信技术,使用的是时分多址的变体,并且它是目前三种数字无线电话技术(TDMA、GSM和CDMA)中使用最为广泛的一种。短信息服务SMS(short messaging service)作为GSM网络的一种基本业务,已经得到越来越多的重视。基于短信息的远程无线通信技术在远程监控方面发挥着重要的作用。该文基于SimCom公司的紧凑型模块Sim900A和STC12C5A32S2单片机设计一款无线监控系统,支持PDU(中文)方式收、发短信,可以广泛应用于远程监控和嵌入式系统中。

1 系统结构与工作原理

系统主要由电源模块、数据采集与控制输出模块、单片机与SIM900A模块接口等模块组成。如图1所示。

终端在正常运行后实时监视温度变化,并与设定的温度上、下限进行比较,若温度在上、下限范围内时,单片机控制通风窗和通风电机保持预定状态;若温度超出上限或低于下限,单片机控制通风窗和通风电机打开运行或关闭,并将当前的温度值和工作状态按照目标手机号码发送短信。

2 系统硬件设计

2.1 电源模块设计

由于SIM900A模块的工作电压为3.4-4.5V,在信号传输时会猝发电压跌落,这时电流损耗的峰值会达到2A,因此电源必须能够提供足够到2A的电流。所以本设计选用一个外接9V2A的电源适配器,再使用LM2596-ADJ开关电压调节器进行降压至4.2V。STC12C5A32S2的工作电压为5V,使用LM2596-5.0开关电压调节器降压获取5V电源。如图2所示。

以LM2596-ADJ和LM2596-5.0开关电压调节器为基础的电源电路,具有功耗低,效率高等特点。电路有很高的输出线性,输出电流可达3A,满足终端系统的大电流工作要求。适配器电源通过LM2596-ADJ模块调整为4.2V单独给SIM900A模块供电,通过LM2596-5.0模块调整为5V给单片机及外围模块供电。

2.2 数据采集与控制输出模块接口设计

DS18B20单总线数字温度芯片可以使用5V供电,所以其总线端口可与单片机直连通信。

单片机的端口高电平输出能力较弱,低电平灌电流能力较强,能达到20mA。为了降低芯片的功耗,本设计采用端口低电平驱动PNP型三极管放大电路驱动5V继电器,由5V继电器控制220V的接触器接通和断开电动机工作;继电器将二次回路和一次回路产生有效的隔离,防止交流电对控制电路的干扰。

2.3 单片机与SIM900A模块通信接口设计

由于单片机和SIM900A模块的电平不匹配,所以在两模块的串口不能直连。单片机的TXD和RXD端口设置为开漏输出方式,使用4.2V电源串10K电阻将串口线上拉。如图3所示。

3 系统软件设计endprint

3.1 数据采集程序

单片机同时也要实时采集DS18B20的温度,并判断温度是否超出设定的上下限温度值。如果温度高于上限或低于下限时,控制外设开启或关闭通风窗和电动机工作。

单片机与DS18B20的温度采集程序如下:

uint get_temper()

{uchar T_H,T_L;

uint temp;

//判断DS18B20是否存在

if(ds18b20_reset())

{//跳过ROM指令

ds18b20_write_byte(0xcc);

//启动转换

ds18b20_write_byte(0x44);

if(ds18b20_reset())

{//跳过ROM指令

ds18b20_write_byte(0xcc);

//读取温度值指令

ds18b20_write_byte(0xbe);

//先读取低8位

T_L=ds18b20_read_byte();

//后读取高8位

T_H=ds18b20_read_byte();

if(T_H&0x08) //判断温度正负

T_sign=1; //温度值为负数

else

T_sign=0; //温度值为正数

//温度值换算,为便于使用数据,

//保留一位小数乘10得到整数

temp=((T_H&0x07)*256+T_L)*10*0.0625;

}}

return temp;

}

3.2 单片机控制SIM900A模块通信程序

3.2.1单片机通过SIM900A模块接收中文短信

单片机串口首先向SIM900A模块发送AT+CNMI=2,1\r\n和AT+CMGF=1\r\n(TEXT模式)。在终端系统正常运行中,当单片机串口接收到“+CMTI: "MT",1”(1表示短信序号)字符串时,发送AT+CMGR=1\r\n读取短信,短信内容部分为Unicode码,可以使用Unicode码汉字对照表直接解析短信内容。Unicode码转汉字核心代码如下:

void unicode_hanzi(uchar *pdu)

{uchar a,i,j,k;

a=strlen(pdu)/4;

for(i=0;i

{for(j=0;j

{if((pdu[i*4]==hz_unicode[j].unicode[0])&&

(pdu[i*4+1]==hz_unicode[j].unicode[1])&&

(pdu[i*4+2]==hz_unicode[j].unicode[2])&&

(pdu[i*4+3]==hz_unicode[j].unicode[3]))

{for(k=0;k<2;k++)

{pdu[i*2+k]=hz_unicode[j].hanzi[k];

}

pdu[i*2+k]='\0';

break;

}}}}

3.2.2单片机按照接收的短信内容执行相应工作

提取目标手机号码、上限和下限温度数据,将数据保存至单片机内部EEPROM中并将接收的短信内容回发到目标手机上。单片机每次重开机或断电重启之后均读取上一次保存的数据。

STC12C5A32S2单片机保存和读取内部EEPROM中数据的部分程序代码如下:

1) 扇区擦除函数

void iap_erase_sector(uint addr)

{IAP_CONTR=0x82;

//使能ISP/IAP功能并设置等待时间

IAP_CMD=3; //对eeprom擦除命令

IAP_ADDRL=addr;

IAP_ADDRH=addr>>8;

IAP_TRIG=0x5a; //操作命令触发器

IAP_TRIG=0xa5;

_nop_();

iap_disable();

}

2) 向EEPROM写字节函数

void iap_writebyte(uint addr,uchar dat)

{IAP_CONTR=0x82;

//使能ISP/IAP功能并设置等待时间

IAP_CMD=2; //从eeprom中写入字节

IAP_ADDRL=addr;

IAP_ADDRH=addr>>8;

IAP_DATA=dat;

IAP_TRIG=0x5a; //操作命令触发器

IAP_TRIG=0xa5;

_nop_();

iap_disable();

}

3) 从EEPROM中读取一字节函数

uchar iap_readbyte(uint addr)

{uchar dat;

IAP_CONTR=0x82;

//使能ISP/IAP功能并设置等待时间

IAP_CMD=1; //从eeprom中读取字节

IAP_ADDRL=addr;

IAP_ADDRH=addr>>8;

IAP_TRIG=0x5a; //操作命令触发器

IAP_TRIG=0xa5;

_nop_();

dat=IAP_DATA;

iap_disable();

return dat;

}

3.2.3单片机通过SIM900A模块发送中文短信

单片机实时读取当前温度并与上下限温度值比较,当温度超出设定的上下限值时,单片机控制外围电路打开或关闭通风窗和风机设备,提取当前温度值、通风窗和风机设备状态信息编辑成Unicode码,使用PDU(中文短信)方式通过SIM900A向目标手机发送短信。提醒用户当前终端系统环境温度和工作状态。及时控制环境温度回落至正常状态后恢复预定工作状态。

在终端系统发送中文短信前单片机向SIM900A模块发送指令AT+CMGF=0\r\n(设置PDU模式),然后将要发送的中文短信进行PDU编码。编码格式如表1所示。

91:表示国际化。

683110909605F0-短信中心号码长度为奇数时补F,再进行奇偶数交换\&11000D91\&1100:固定。

0D:手机号码长度。

91:发送到手机,到小灵通为81\&683132990333F9\&目的手机号码,长度为奇数时补F,再将奇偶数位调换。\&0008A7\&固定\&0C\&短信内容字符串长度除2取低两位转换为十六进制。\&98CE673A5DF2517395EDFF0C\&短信内容(Unicode码):风机已关闭,\&]

单片机串口发送AT+CMGS=x\r\n,其中x为从11000D91开始的字符串长度处理成十进制形式的字符串x=54/2=27。等待SIM900A模块返回“>”后,将PDU码发送即可;单片机从串口随后接收到“OK”字符串后表示短信发送完成。

4 结束语

基于SIM900A的GSM无线数据传输,在传输数据量少,工作环境比较恶劣,时效性要求不是很高的场合非常适用。本系统已在仓库的温控项目中得到了良好的应用。整个系统无需额外铺设通信线缆,节约成本,能够广泛应用于远程监控系统中。

参考文献:

[1] 何金枝,毛海燕,周国运.基于单片机的GSM远程温度控制器设计[J].制造业自动化,2012(34):128-131.

[2] 余肖勇,杨邦荣,张 勇.基于GSM监控远程目标的关键技术与应用[J].企业技术开发,2005(24):3-18.

[3] 陈克力.基于ARM的GSM远程监控系统[J].微计算机信息,2008(24):270-292.

[4] 减怀泉,李海生,范亚伟.基于GSM的温湿度远程监测系统[J].微计算机应用,2005(26):207-210.

[5] 李元臣,刘维群.基于GSM模块的远程监控系统[J].微计算机信息,2007(23):90-94.

[6] 刘勇.基于单片机和 GSM 的火灾报警器设计[J].数字技术与应用,2012(1):72.endprint

猜你喜欢

远程监控短信
道歉短信
代发短信
变电站直流电源智能化在线远程监测系统的实际应用
保鲜库智能温度远程监控系统
数据中心服务器运行状态监控系统研究 
基于Android的青少年监护系统设计与实现 
“八一”节日短信之一
短信档