在本文中我们将学习如何使用Arduino控制的GSM modem发送和接收短信。让我们看看什么是GSM modem,如何与Arduino接口,如何用设置发送短信。
除了通过人类发送短信之外,我们还将探索我们可以使用GSM调制解调器实现的所有应用程序。
什么是GSM modem?
GSM代表全球移动通信系统;它是由ETSI(欧洲电信标准研究所)开发的标准,他描述了2G通信的协议。
它是用于移动通信的第一数字协议,其针对全双工语音通信优化。简而言之,全双工通信是指双方可以同时发送/接收数据(或语音)。
GSM协议也允许包数据的传输,如GPRS和EDGE。
SIM800 GSM调制解调器:
GSM modem是一种硬件,它接受一个有效的SIM卡(用户身份模块),基本上任何SIM卡都可以工作,它支持GSM协议和网络订阅。
它就像一个没有屏幕和键盘的手机。它有四个I/O引脚,取决于你选择的型号。
两个为TX和RX(发送和接收),另两个引脚为VCC和GND,这是普遍的。
它还包括RS232端口,用于调制解调器和计算机之间的串行通信,但我们不打算在这个项目中使用。
它有标准的直流电源插孔,可以从外部电源如电压适配器供电。
根据模型,它具有5至12V的工作电压范围为5至12V。它有3个LED指示灯,适用于电源,状态和网络。
电源指示灯表示电源是否供电,状态指示灯表示GSM modem是否工作,网络指示灯表示移动网络已建立。
最初网络LED在搜索网络时每秒闪烁每一秒一次,一旦它建立了每3秒闪烁的移动网络一次。
您需要按2 - 3秒的电源按钮来激活GSM modem,一旦您按下电源按钮,GSM modem就会与移动网络连接。
要验证您的GSM调制解调器是否有效,只需调用您已插入SIM卡的数量。你应该得到戒指。如果它,那么你的模块就会正常工作。
我们将使用SIM800 GSM调制解调器,支持四频带850/900/1800/1900 MHz。如果您拥有SIM900调制解调器,请不需要担心,程序和电路在此项目中兼容。
现在,你可能已经对GSM modem有了一些了解,现在让我们学习如何将它与arduino接口。
线路图:
从图中可以看出,电路连接非常简单。你只需要3个从公到母的头槌。在这个项目中,USB电缆是必须的,因为我们将通过串行监视器进行通信。
一般情况下,GSM modem需使用外接电源。GSM modem arduino电源不足;它甚至会使arduino的电压调节器过载。
这完全是关于硬件部分。现在,让我们搬到编码。
程序:
//------------- 项目由R.Girish ---------------//
# include < SoftwareSerial.h >
#define rxpin 9 // gsm tx ------> arduino 9
#define txpin 8 // gsm rx --------> Arduino 8
软件系列myserial =软件(Rxpin,Txpin);
字符文本[150];
字符串消息= " ";
int x;
无效的设置()
{
Serial.Begin(9600);
而(!串行){}
myserial.begin(9600);
延迟(1000);
serial.println(“写下您的留言(结束点):”);
}
void循环()
{
x = 0;
而(Serial.Available()> 0)
{
文本(x) = Serial.read ();
消息+ = text [x];
x + +;
如果(文本(x - 1) = = 46)
{
系列。println(“你的消息发送......”);
SendTextMessage ();
ShowSerialData ();
延迟(1000);
serial.println(“r”);
serial.println(“成功”);
消息= " ";
x = 0;
}}}
void sendtextmessage()
{
mySerial.print(“在+ CMGF = 1 r”);
延迟(1000);
myserial.print(“at + cmgs =”+ 91xxxxxxxxxx“r”);//用10位电话号码替换x
延迟(1000);
myserial.println(消息);
mySerial.print (r);
延迟(1000);
myserial.println((char)26);
mySerial.println ();
}
空白ShowSerialData ()
{
而(mySerial.available () ! = 0)
Serial.write (mySerial.read ());
}
//------------- 项目由R.Girish ---------------//
不要忘记在信息的每一个结尾都加上,否则它不会将消息发送到程序中指定的号码。在程序中用你的10个数字电话号码替换x。确保你的SIM卡上有一个可用的短信计划。
如果您不是来自印度,请在程序中更改国家代码。
例如:
英国:+ 44
对于我们:+1
加拿大:+1
俄罗斯:+ 7
您还可以通过适当地编码Arduino来自动执行GSM调制解调器发送的消息。您可以在手机上接收自动化消息警报,如:防盗警报,火警警报,当地的天气警报等。
您甚至可以通过GMS调制解调器连接到Internet,但它是另一篇文章的主题。
在我们将学习的到来的来文之一如何使用GSM Modem和Arduino接收短信
如果您对如何使用GSM调制解调器发送短信有更多疑问,请随时在评论部分中提问。
如何使用GSM调制解调器接收短信
在上面的讨论中,我们学习了如何使用GSM调制解调器发送短信,也讨论了GSM调制解调器的基础知识。
在本节中,我们将讨论如何通过Arduino IDE的串行监视器接收SMS。我们不仅要收到短信,还要通过按不同的键发送短信。对于即时,按“S”将发送预先输入的文本消息,按“R”将获得实时短信。
以下是作者的原型:
它是如何工作的
电路接收SMS使用GSM modem是非常简单的,你只需要3公到母头引脚。GSM modem的TX连接arduino的引脚9号,GSM modem的RX连接arduino的引脚8号,GSM和arduino之间也给出了接地。
GSM modem总是使用外置电源,不要从arduino连接5Vcc到GSM modem,因为arduino的电压调节器很有可能过载。
不要忘记在你的短信订阅上实施短信费率削减或类似的东西,以减少你的短信费用。
否则,在发送了几条短信后,你的账户余额就会变成空的,因为SIM卡在GSM调制解调器里,所以每次发送短信后,你的手机运营商都不会确认你的短信。
你得到的唯一确认是警告短信,关于你的空帐户,所以小心你的开支。现在让我们进入项目的编码部分。
程序:
//----------------- 项目由R.Girish -------------//
# include < SoftwareSerial.h >
软品种GSM(9,8);
无效的设置()
{
gsm.begin (9600);//设置GSM模块波特率
Serial.Begin(9600);//设置串行监视器的波特率(Arduino)
延迟(100);
}
void循环()
{
if(serial.available()> 0)
切换(Serial.read())
{
案例's':
Send ();
休息;
案例'r':
收到();
休息;
例“S”:
Send ();
休息;
案例'r':
收到();
休息;
}
if(gsm.available()> 0)
serial.write(gsm.read());
}
无效发送()
{
gsm.println(“at + cmgf = 1”);
延迟(1000);
gsm.println(“在+发生= " + 91 xxxxxxxxxx“r”);//将x替换为手机号码
延迟(1000);
gsm.println(“你好,我是gsm调制解调器!!!”); //您要发送的短信文本
延迟(100);
gsm.println((字符)26);// CTRL+Z的ASCII码
延迟(1000);
}
无效的接待()
{
gsm.println(“at + cnmi = 2,2,0,0,0”);// AT命令接收LIVE SMS
延迟(1000);
}
//----------------- 项目由R.Girish -------------//
输入电话号码
在开头的“XXXXXXXXXXX上”在“XXXXXXXXXXX”上输入收件人电话号码。
在程序中输入您想要发送的文本,引号为:gsm。你好,我是GSM modem!!//你想发送的短信
编译程序并上传到Arduino。
插入SIM卡,给GSM modem上外部电源,按下电源按钮3秒(视型号而定),等待10 ~ 20秒建立移动网络,网络LED每3秒闪烁1次。如果以上所述的一切都做好了,我们就可以进行下一步了。
现在打开串行监视器并按“r”GSM调制解调器准备接收短信。现在从任何移动电话发送短信到插入GSM调制解调器的SIM卡号码。
应在串行监视器上弹出文本消息,类似于下面说明的东西:
“Hello World”是发送给GSM调制解调器的消息,也会显示发送文本消息的号码。
现在,让短信发送到预先输入的号码在程序与预先输入的消息。按“s”,你会看到类似下图所示的内容:发送的短信是“Hello I am GSM modem”。
现在,您知道了如何使用GSM调制解调器发送和接收短信。
你好先生,
我没有得到GSM模块的回复......你租了如何获得回复的帮助。这个行中的程序在程序中显示了错误
mySerial.print(“在+发生= " + 91 xxxxxxxxxx“r”);
如果我们如下所示,它没有显示任何错误
mySerial.print(“+发生= \”+ 91 xxxxxxxxxx \ " \ r ");