在本文中,我们将学习如何使用通过Arduino的控制GSM调制解调器发送和接收短信。让我们来看看,GSM调制解调器是什么,如何与Arduino的,它的接口如何与设置发送短信。
我们还将探索除了人类发送短信外,GSM调制解调器能实现的所有应用。
什么是GSM调制解调器?
GSM是全球移动通信系统的缩写;它是由ETSI(欧洲电信标准协会)开发的一个标准,描述了2G通信的协议。
它是第一个为全双工语音通信而优化的移动通信数字协议。简而言之,全双工通信意味着双方可以同时发送/接收数据(或语音)。
GSM协议还允许分组数据,如GPRS和EDGE的传输。
SIM800 GSM调制解调器:
GSM调制解调器是接受有效的SIM卡(用户身份模块),基本上任何SIM将工作,其支持GSM协议和与网络预订的硬件。
它就像一个没有屏幕和键盘的手机。它有四个I / O引脚,具体取决于您选择的型号。
两个用于TX和RX(传输和接收),另外两个用于VCC和GND的引脚,这在所有内容中很常见。
它还由RS232端口组成,用于调制解调器和计算机之间的串行通信,但我们不会在此项目中使用。
它具有标准的直流电源插孔,其可以从外部电源,例如电压适配器供电。
它的工作电压范围从5到12V的直流插孔,取决于型号。它有3个LED指示灯,用于电源,状态和网络。
功率LED指示电力的存在,状态指示灯指示GSM调制解调器是否正在操作与否,网络LED指示建立的移动网络的。
初始网络LED在搜索网络时每1秒闪一次,一旦建立移动网络,每3秒闪一次。
您需要2〜3秒启动GSM调制解调器按下电源按钮,一旦完成,将它锁定至移动网络。
要验证您的GSM modem工作,只需拨打您插入SIM卡的号码。你应该收到回铃音。如果是,那么您的模块工作正常。
我们将使用SIM800 GSM modem,支持四频段850/900/1800/1900 MHz。如果您有一个SIM900调制解调器,不用担心,程序和电路在这个项目是兼容的。
现在,你会得到关于GSM调制解调器的一些想法,现在让我们学习如何与Arduino的接口吧。
电路图:
正如你可以推断出形成图,电路连接是死容易。你只需要3个男性对女性的头管脚。USB电缆线是在这个项目强制性的,因为我们要通过串行监控通信。
始终,使用外部适配器为GSM调制解调器供电。来自Arduino的力量不足以GSM调制解调器;它甚至可以过载Arduino的电压调节器。
这就是硬件部分。现在,让我们转向编码。
计划:
// -------------计划开发的R.Girish --------------- //
的#include
#define rxPin 9 // gsm TX------> arduino 9
#define txPin 8 //gsm RX--------> arduino
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
字符文本[150];
字符串消息=“”;
int x;
void setup()
{
Serial.begin (9600);
而(串行){}
mySerial.begin (9600);
延迟(1000);
系列。println("写你的信息(以点结尾):");
}
无效循环()
{
X = 0;
而(Serial.available () > 0)
{
文本[X] = Serial.read();
文本消息+ = [x];
X ++;
如果(文本[X-1] == 46)
{
Serial.println( “你的消息被发送......”);
SendTextMessage();
ShowSerialData();
延迟(1000);
以(r);
以“成功”);
消息= “”;
X = 0;
}}}
空白SendTextMessage ()
{
mySerial.print( “AT + CMGF = 1R”);
延迟(1000);
mySerial.print(“在+发生= " + 91 xxxxxxxxxx“r”);//将x替换为10位数的电话号码
延迟(1000);
mySerial.println(消息);
myserial.print(“r”);
延迟(1000);
mySerial.println((字符)26);
mySerial.println();
}
无效ShowSerialData()
{
而(mySerial.available()!= 0)
serial.write(myserial.read());
}
// -------------计划开发的R.Girish --------------- //
不要忘记在信息的每一个结尾都加上,否则将无法在程序发送的消息发送到规定的数量。在该计划的10个数字的电话号码替换x。请确保您有您的SIM卡上工作的SMS方案。
如果您不是来自印度,请更改程序中的国家代码。
例如:
对于英国:+44
对我们来说:+ 1
加拿大:+ 1
对于俄罗斯:+7
您还可以通过适当编码Arduino自动发送短信调制解调器。你可以在你的手机上收到自动信息警报,如:防盗警报,火灾警报,你所在地区的天气警报等。
你甚至可以在GSM调制解调器中用GPRS连接互联网,但这是另一篇文章的主题。
我们将在接下来的文章中学习如何接收短信使用GSM调制解调器和Arduino的
如果你有更多关于如何使用GSM Modem发送短信的问题,请在评论部分提问。
如何使用GSM Modem接收短信
在上面的讨论中,我们学会了如何发送邮件使用GSM调制解调器文本消息,还讨论了基本的GSM调制解调器。
在本节中,我们将讨论如何通过arduino IDE的串行监视器接收SMS。我们不仅要接收短信,还要通过按不同的键发送短信。在一个瞬间,按“s”将发送预先输入的文本信息,按“r”将收到实时短信。
这是作者的原型:
这个怎么运作
使用GSM ModeN接收SMS的电路非常简单,您只需要3个男性标题引脚。GSM调制解调器的TX连接到Arduino的引脚#9和GSM调制解调器的RX连接到Arduino的引脚#8,GSM和Arduino之间也给出了地面连接的地面连接。
始终使用GSM调制解调器外接电源,不从的Arduino到GSM调制解调器连接5VCC,因为有超载的Arduino的电压调节器的好机会。
不要忘了执行上的SMS短信的费用率刀或您的SMS签约减少类似的东西。
否则,你将发送短信数后,最终为空账户余额,因为不会有从每一个发来的短信后,您的手机供应商的任何确认,由于SIM卡是GSM调制解调器。
你唯一能确认的警告短信,关于你的空账,所以要小心你的开支。现在让我们来编码部分项目。
计划:
// -----------------程序开发的R.Girish ------------- //
的#include
SoftwareSerial gsm (9 8);
void setup()
{
gsm.begin(9600);//设置GSM模块的波特率
Serial.begin (9600);//设置串口监控(Arduino)波特率
延迟(100);
}
无效循环()
{
如果(Serial.available () > 0)
开关(Serial.read ())
{
例“s”:
发送();
打破;
例“r”:
接待();
打破;
情况下 'S':
发送();
打破;
例“R”:
接待();
打破;
}
如果(gsm.available () > 0)
Serial.write (gsm.read ());
}
void发送()
{
gsm.println(“+ CMGF = 1”);
延迟(1000);
gsm.println(“at + cmgs =”+ 91xxxxxxxxxx“r”);//用手机号码替换x
延迟(1000);
gsm。println("Hello I am GSM modem!! ");//您要发送的短信
延迟(100);
gsm.println((char)的26);// CTRL + Z的ASCII码
延迟(1000);
}
收到无效()
{
gsm.println(“+ CNMI = 2 2 0, 0, 0);// AT命令接收实时短信
延迟(1000);
}
// -----------------程序开发的R.Girish ------------- //
输入电话号码
在程序的“xxxxxxxxxxx”上输入接收人的电话号码,并在开头写上你的国家代码。
输入您希望在引号内的程序来发送文本:gsm.println(“你好,我是GSM调制解调器!!!”);//你要发送的短信
编写程序并上传至arduino。
插入SIM卡和功率GSM调制解调器与外部电源,并按下3秒(取决于模型),等待10至20秒,以建立移动网络的电源按钮时,网络LED应在每3秒闪烁一次。如果一切上述操作后,我们准备去下一个步骤。
现在打开串行监视器,然后按“R”GSM调制解调器已准备好接收SMS。现在从任何手机发送短信到插入GSM调制解调器的SIM的数量。
文本消息应该在串行监视器上弹出,类似如下所示:
“Hello world”是发送到GSM调制解调器的信息,发送短信的号码也会显示出来。
现在,让我们发送短信到与预先输入的消息,该方案预先输入的号码。按“S”,你会看到如下图所示类似:发送的短信是“你好,我是GSM调制解调器”。
现在,你知道如何发送和如何使用GSM调制解调器接收短信。
你好先生,
我没有收到GSM模块的回复。..你能帮助我如何得到回复。..在这一行程序显示了一个错误
myserial.print(“at + cmgs =”+ 91xxxxxxxxxx“r”);
如果我们给出如下所示,它没有显示任何错误
mySerial.print(“AT + CMGS = \” + 91xxxxxxxxxx \” \ r”);