Arduino库教程-GSM-Receive SMS
Receive SMS
- 该程序等待一个短信,并打印到串口监视器。它采用 Arduino GSM Shield的GSM库和一个活动的SIM卡。为了操作,SIM卡不需要一个数据计划。
硬件要求
- Arduino 或者 Genuino 开发板
- Arduino + Telefonica GSM/GPRS Shield
- SIM 卡
电路
这是在一块Arduino或者Genuino开发板上的Arduino GSM Shield图
样例代码
- 首先,加上GSM库
#include <GSM.h>
- SIM卡可能有一个引脚数,来使能它们的功能。为您的SIM卡定义引脚。如果你的卡没有引脚,你可以让它空白:
#define PINNUMBER ""
- 初始化将要使用的类的实例。你同时需要GSM和GSMVoiceCall类。
GSM gsmAccess;
GSM_SMS sms;
- 创建一个字符串数组,以保存发送消息的数字:
char remoteNumber[20];
- 在setup()里,打开一个到计算机的串口连接。打开连接后,发送一个消息示意程序已经开始了。
void setup(){
Serial.begin(9600);
Serial.println("SMS Messages Receiver");
- 创建一个本地变量来跟踪连接状态。直到SIM连接到网络之前,你可以用这个来防止程序开始运行:
boolean notConnected = true;
通过调用gsmAccess.begin()连接到网络。它以SIM卡的引脚当作一个参数。你也可以用gprs.attachGPRS()连接到GPRS网络。这个要求你前面声明的APN,登录和密码。通过放在while()循环里,你可以不断地检查连接的状态,等到他们都成为真。
当调制解调器连接到GPRS网络,gsmAccess() 将返回GSM_READY。以此为连接与否的标志。一旦连接好,setup()的其余部分将会运行。
while(notConnected)
{
if(gsmAccess.begin(PINNUMBER)==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
- 用一些信息发送到串口监视器来结束setup。
Serial.println("GSM initialized.");
Serial.println("Waiting for messages");
}
调制解调器接收到的短消息消息。模拟卡有一些存储空间来存储传入的短信。SIM卡可以容纳的短信数量可以为10,或多达200,这取决于SIM卡。你应该检查你的供应商,以确定你的卡可以保存多少在内存中。
在loop(),创建一个变量char类型来暂时保存任何短信接收到的字符。用sms.available()检查对SIM卡上是否存在信息:
void loop()
{
char c;
if (sms.available())
{
- 如果一个SMS可用,通过调用sms.remoteNumber(remoteNumber, 20)来检索远程发射机的数量。在 remoteNumber参数是你在程序开始部分声明的字符数组,它可以不超过20个字符。这个号码发送到串口监视器。
Serial.println("Message received from:");
sms.remoteNumber(remoteNumber, 20);
Serial.println(remoteNumber);
可以调用sms.flush()删除短信。用 sms.peek()可以识别信息索引序号,这个有助于消除。
下面的代码不会删除SIM卡的任何东西,但你可以重复一个for循环,或定义一个特定的索引序号来消除,来代替假#(如下使用)
if(sms.peek()=='#')
{
Serial.println("Discarded SMS");
sms.flush();
}
[Get Code]
读取消息,用sms.read()。在这里,您把每个字符从信息保存到变量C,并打印出来,因为它可以阅读。
while(c=sms.read())
Serial.print(c);
- 表示消息是完整的,并用sms.flush()把它从内存删掉。。
Serial.println("\nEND OF MESSAGE");
sms.flush();
Serial.println("MESSAGE DELETED");
}
- 增加一个延迟,并关闭loop
delay(1000);
}
一旦你的代码被上传,打开串口监视器。依靠一个电话或其他短信功能的服务,发送短信到您SIM卡。当接收到的时候,你应该在屏幕上看到消息打印出来。
完整程序如下。
/*
SMS receiver
This sketch, for the Arduino GSM shield, waits for a SMS message
and displays it through the Serial port.
Circuit:
* GSM shield attached to and Arduino
* SIM card that can receive SMS messages
created 25 Feb 2012
by Javier Zorzano / TD
This example is in the public domain.
http://www.arduino.cc/en/Tutorial/GSMExamplesReceiveSMS
*/
// include the GSM library
#include <GSM.h>
// PIN Number for the SIM
#define PINNUMBER ""
// initialize the library instances
GSM gsmAccess;
GSM_SMS sms;
// Array to hold the number a SMS is retreived from
char senderNumber[20];
void setup() {
// initialize serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("SMS Messages Receiver");
// connection state
boolean notConnected = true;
// Start GSM connection
while (notConnected) {
if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
notConnected = false;
} else {
Serial.println("Not connected");
delay(1000);
}
}
Serial.println("GSM initialized");
Serial.println("Waiting for messages");
}
void loop() {
char c;
// If there are any SMSs available()
if (sms.available()) {
Serial.println("Message received from:");
// Get remote number
sms.remoteNumber(senderNumber, 20);
Serial.println(senderNumber);
// An example of message disposal
// Any messages starting with # should be discarded
if (sms.peek() == '#') {
Serial.println("Discarded SMS");
sms.flush();
}
// Read message bytes and print them
while (c = sms.read()) {
Serial.print(c);
}
Serial.println("\nEND OF MESSAGE");
// Delete message from modem memory
sms.flush();
Serial.println("MESSAGE DELETED");
}
delay(1000);
}
[Get Code]
更多
GSM Constructor
GSM.begin()
GSM.shutdown()
GSM_SMS Constructor
beginSMS()
ready()
endSMS()
available()
remoteNumber()
read()
write()
print()
peek()
flush()
Arduino GSM Shield – 完整的产品描述。
Getting started with the GSM Shield – 在几分钟内启动所有东西
GSM library – GSM 库的参考网页
GSMExamplesMakeVoiceCall -如何用麦克风和扬声器进行语音通话。
GSMExamplesReceiveVoiceCall - 接收并连接该呼叫,呼叫的号码显示在串口监视器上,然后挂断电话。
GSMExamplesReceiveSMS - 如何收到一个SMS信息。
GSMExamplesSendSMS - 如何通过串口监视器发送SMS输入号码和文本。
GSMExamplesWebServer - 当从客户端获取一个请求时,Web服务器返回模拟输入引脚上的值。
GSMToolsTestGPRS – 试图用提供的APN和证书来通过GPRS访问互联网 。
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号