1. 引言
随着技术的发展,手机的功能也在不断的增强,手机已然成为人们特别青睐的通讯工具,正因为手机用户不断增加,使得手机短信通知服务显得相当的方便。在我们的实验室中有着几十位成员,大家在忙碌中有时可能会忘记一些重要事件,本系统能提前通过短信给与他们提醒,充分体现了人性化的管理。短信息服务(SMS: Short Message Service)是GSM系统(Global System for Mobile Communication)中提供的一种GSM终端(手机)之间,通过服务中心进行文本信息收发的应用服务,它利用信令信道传输,直接把要发送的信息加上目的地址发送到短信息服务中心,再由短信息服务中心发送给最终的信宿 [1]。基于GSM的短信提醒系统不仅方便,是非常经济的一种通知方式,还具有实现简单、保密性好、频谱利用率高等特点。
2. 提醒系统的组成与工作原理
提醒系统主要有GSM模块与计算机组成。在设计系统时,暂时将重要事件定为实验室成员的生日信息,那么接下来我们主要围绕生日提醒这一主题展开。在计算机中通过MATLAB软件中的GUI工具箱设计好界面及串口,将所有成员生日信息用EXCEL表存储,每当运行设计好的GUI面时,系统会自动读取EXCEL表中的信息进行判断,一旦条件满足,那么就会通过串口去控制GSM模块给用户发短信,用户接收到的信息是“happy birthday!!”。系统结构图如图1所示。

Figure 1. System module structure diagram
图1. 系统简单结构图
系统设计基本步骤依次为:数据的录入、上位机的设计、数据的传输、任务的执行。数据的录入主要包括生日人的基本信息:姓名、性别、班级、生日日期、联系电话等;上位机是该系统主要不部分,在上位机实现该系统的大部分功能,比如:数据的提取、判断、指令的发送等;数据的传输主要是通过串口线将PC机与GSM模块连接,实现通信的功能;任务的执行就是GSM模块在接收到上位机传输过来的指令后对其做出响应,完成发送短信的任务。GSM信息发送流程图如图2所示。

Figure 2. GSM message sending flow chart
图2. GSM信息发送流程图
3. 硬件部分
提醒系统主要包括的硬件部分是一台计算机与GSM模块。本系统中采用的GSM模块搭载的芯片是SIM900A。SIM900A是两频的GSM/GPRS模块,工作频段为EGSM 900MHZ和DCS1800 MHZ,传输速率支持从1200BPS到115200BPS,支持标准的AT指令。在与计算机连接之后只要负责接收计算机传输过来的AT指令,并将已经编写好的信息发送出去。GSM模块实物图如图3所示。
4. 软件部分
软件部分主要包括系统界面设计和代码的编写。如何做到自动发送短信是本系统在软件部分遇到的主要问题。
4.1. GUI界面的设计
该系统在上位机中主要实现的功能有:1) 数据的载入,将实现存储在EXCEL表中的信息读取到上位机中;2) 时间的判断,在EXCEL表中存有每位成员的生日信息,当系统运行时,每天都会定点判断当天是否有成员过生日,有则将生日人的信息提取并显示到上位机中。
在上位机设计的过程中主要注意数据类型的转化及发送AT指令的延时时间。数据类型的转化,例如在表中显示的数据都是以string (字符串)类型存储的,从表格中提取出数据进行判断的时需要的是数值型(num)数据,因此这一过程需要进行数据类型转化。在上位机的设计过程中,有许多步骤需要进行数据类型转化,所以这是一个需要引起注意的地方 [2],在这个过程熟练掌握class函数的使用十分重要。
在GUI界面中主要包括所有成员信息模块、生日人信息模块以及串口模块。所有成员信息先存放在一个在EXCEL表中,然后编写程序从EXCEL表中读取信息,所有成员信息模块中用一个列表控件来显示从EXCEL表中读取的信息,成员所有信息都可以在这个控件中找到 [3]。在生日人信息模块中最多只能显示三名成员在同一天生日的信息。在串口模块中,可以选择需要的串口号、波特率、校验位、数据位以及停止位。具体的界面设计如图4所示。
4.2. 代码的编写
如何往GSM模块中自动发送AT指令是本系统在编写代码的一个重点与难点。在发送AT指令时,如果过于频繁,将会导致GSM模块报错,因此在每发送完一条指令后,需要有一定的延时再发送下一条指令。短消息编码有三种模式:Block模式、基于AT指令的Text模式、基于AT指令的PDU模式 [3]。Block模式已经很少使用,Text模式比较简单,但它只支持英文信息,PDU模式是一种通用的编码方式,短消息正文经过十六进制编码后被传送。因为本文发送的信息为“happy birthday!!”,比较简单,所以选择Text模式即可。本系统所用到的AT指令 [4] [5] 如表1所示。
AT+CSCS = “GSM”是设置为GSM字符集;AT +CMGF =1是设置为Text模式,对应的有PDU模式;AT+CMGS = “123”双引号里面输入的是接收短信的手机号码。每发送一条指令都要有回车键,编写代码时在每一条指令发送完毕后接着发送十进制13即可。通过串口发送指令的部分代码如下:
scom=get(handles.figure1,'UserData'); % 将当前界面数据保存于scom
for j1 = 1:5
if j1 == 1
for j1_1 = 1:2
if j1_1 == 1
val = 'AT+CSCS=GSM';
else
val = 13;
end
if ~isempty(val) % 若要发送的数据不为空,发送数据
m = 1000; % 设置倒计数的初值(防卡死)
while m % 获取串口的传输状态,若串口没有正在写数据,写入数据
str=get(scom,'TransferStatus'); % 获取串口的读取状态
if~(strcmp(str,'write')||strcmp(str, 'read&write'))% 判断串口是否在读窗口数据,或者将数据写入串口
fwrite(scom,val,'uint8','async'); % 数据写入串口
break;
end
m = m - 1; %倒计数
end
end
end
pause on;
pause(3);
pause off;
上述程序是实现往GSM模块发送AT+CSCS=GSM指令,类似的也可以实现往GSM模块发送AT +CMGF =1和AT+CMGS = “123”指令。在发送完上面三条程序后,接着就要往GSM模块发送短信内容,代码的编写都差不多,只需将上程序中val = 'AT+CSCS=GSM',改成val = ' happy birthday!!'。在发送完短信内容之后还要以十六进制将1A发送给GSM模块作为结束,在本系统中是将1A转化成十进制26发给GSM模块的 [6]。
值得注意的是,GSM模块使用中发送AT指令时,如果过于频繁,将会导致GSM模块报错,因此在每发送完一条指令后,需要有一定的延时再发送下一条指令。
5. 结束语
本系统界面的设计是利用MATLAB GUI工具箱,相对于传统的界面制作软件来说相对简单点。在本系统中串口操作界面也合并到系统界面,这样运行系统时不需要调用其他串口工具,操作起来比较方便。提醒系统应用于团队,能及时提醒团队成员重要事件的发生,这可以给团队成员带来方便,提高团队的工作效率。
基金项目
广西科技师范学院青年科研创新团队(No.GXKS2020QNTD02)、广西来宾市科学研究与技术开发项目广西来宾市智慧农业云平台研究与建设(来科能193305)、广西高校中青年教师基础能力提升项目(No.2018KY0701,No.2018KY0703,No.2019KY0863,No.2020KY23024)。
NOTES
*通讯作者。