SIM900 GSM Shield通过SMS获取传感器数据 – Arduino教程

释放双眼,带上耳机,听听看~!

在本教程中,我们将向您展示如何使用 Arduino UNO、继电器模块和 SIM900 GSM 扩展板通过 SMS 控制 12V 灯。

SIM900 GSM Shield通过SMS获取传感器数据 - Arduino教程

在继续学习本教程之前,我们建议使用以下资源:

带中继的Arduino以太网Web服务器

SIM900 GSM GPRS扩展板指南 – Arduino教程

 项目概况

本项目使用SIM900 GSM扩展板通过Arduino接收和发送短信。该项目旨在:

  • 打开 12V lamp 当您向Arduino发送带有文本“ON”的短信时
  • 关闭 12V lamp 当您向Arduino发送带有文本“OFF”的短信时
  • 您可以通过向Arduino发送带有文本“STATE”的短信来请求灯状态,Arduino应回复文本“lamp is on”或“lamp is off”

SIM900 GSM Shield通过SMS获取传感器数据 - Arduino教程

 所需零件

在这个项目中,您需要将Arduino连接到GSM扩展板和连接到12V灯的继电器模块。以下是此项目所需零件的完整列表

  • Arduino UNO
  •  SIM900 GSM扩展板
  • 5V 2A电源适配器
  •  继电器模块
  •  12V灯泡
  •  12V灯座
  • 公 DC 筒形插孔 2.1mm
  •  12V电源适配器
  •  面包板
  •  跳线
  • 可选 – 12V/5V 电源

准备 GSM 扩展板

SIM900 GSM Shield通过SMS获取传感器数据 - Arduino教程

要使用 SIM900 GSM 扩展板:

1) 您需要一张有效的 SIM 卡。我们建议使用具有预付费计划的 SIM 卡进行测试。

2)您必须关闭SIM卡密码锁。将SIM卡插入智能手机,然后在手机安全设置中关闭密码锁。

3)GSM扩展板应使用外部5V电源供电,该电源可提供2A,或9V 1A,或12V 1A。

SIM900 GSM Shield通过SMS获取传感器数据 - Arduino教程

4)我们将使用软件串行与扩展板进行通信。因此,在串口选择上,确保跳线帽如下图所示连接,以使用软件串口。

SIM900 GSM Shield通过SMS获取传感器数据 - Arduino教程

5) 您可以通过按电源键打开/关闭扩展板,也可以通过 D9 引脚使用 Arduino 自动打开它。要自动打开和关闭屏蔽,您需要焊接 R13 连接,如下图所示。

SIM900 GSM Shield通过SMS获取传感器数据 - Arduino教程

6) 如果这是您第一次使用 GSM 扩展板,我们建议您在此处阅读我们的 GSM 扩展板指南中的初步步骤。

7) 将 SIM 卡插入 SIM 卡座。

SIM900 GSM Shield通过SMS获取传感器数据 - Arduino教程

8) 最后,按照下面的原理图将 SIM900 GSM 扩展板连接到 Arduino。

SIM900 GSM Shield通过SMS获取传感器数据 - Arduino教程

9) 您应该使用外部 900V 电源为 SIM5 GSM 扩展板供电。确保选择带有 DC 插孔旁边的拨动开关的外部电源。

SIM900 GSM Shield通过SMS获取传感器数据 - Arduino教程

注意:您可以通过使用FTDI编程器从Arduino IDE发送AT注释来测试扩展板是否正常工作 

继电器模块接线

在这个项目中,我们控制一个 12V 灯。但是,该项目可以很容易地适应控制电源电压或其他电子设备。查看我们的Arduino继电器模块指南,了解如何使用继电器控制电源电压。

我们使用的是以下 12V 灯及其相应的灯座。

SIM900 GSM Shield通过SMS获取传感器数据 - Arduino教程

将继电器模块和灯座添加到上一个电路中。

为了安全起见,我们将继电器放在塑料盒外壳内。

SIM900 GSM Shield通过SMS获取传感器数据 - Arduino教程

 使用方法

您可以在下面找到此项目的代码。确保使用Arduino应回复的电话号码编辑代码。我们建议您在上传代码之前阅读代码说明。

 

代码非常容易理解。继续阅读以了解每个代码部分的目标。

 导入库

Arduino使用软件串行通信与扩展板通信。因此,首先要包括 SoftwareSerial.h 库。

// Include Software Serial library to communicate with GSM
#include <SoftwareSerial.h>

 软件串口

然后,在引脚 7 和 8 上创建一个软件串行端口(引脚 7 设置为 RX,引脚 8 设置为 TX)。

// Configure software serial port
SoftwareSerial SIM900(7, 8);

 创建变量

您创建一个 textMessage 变量,该变量将保存 Arduino 收到的文本消息;另一个用于存储当前灯状态(继电器状态)的变量,称为 lampState。默认情况下,lampState 变量设置为 HIGH,因为我们希望默认情况下关闭继电器。继电器使用反转逻辑工作,因此您需要将其设置为 HIGH 才能将其关闭。

// Variable to store text message
String textMessage;

// Create a variable to store Lamp state
String lampState = "HIGH";

您还可以分配继电器连接到的引脚号,即引脚 12。

// Relay connected to pin 12
const int relay = 12;

 setup()

在 setup() 函数中,首先打开 GSM 扩展板。以下几行相当于按下盾牌“电源”按钮。

digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(5000);

继电器设置为输出,默认情况下其状态为关闭。

// Set relay as OUTPUT
pinMode(relay, OUTPUT);

// By default the relay is off
digitalWrite(relay, HIGH);

然后,初始化与扩展板的串行通信,并给它一些时间登录到网络。

// Initializing serial commmunication
Serial.begin(19200); 
SIM900.begin(19200);

// Give time to your GSM shield log on to network
delay(20000);
Serial.print("SIM900 ready...");

防护板设置为 SMS 模式,如下所示:

// AT command to set SIM900 to SMS mode
SIM900.print("AT+CMGF=1r"); 
delay(100);
// Set module to send SMS data to serial out upon receipt 
SIM900.print("AT+CNMI=2,2,0,0,0r");
delay(100);

 loop()

在 loop() 中,您可以读取传入的消息并比较这些消息是否包含文本 ON、OFF 或 STATE。根据消息内容,Arduino将执行不同的任务。

因此,您首先检查是否有要阅读的消息。如果有,消息将保存在 textMessage 变量中。出于调试目的,该消息显示在串行监视器上。

if(SIM900.available() >0) {
 textMessage = SIM900.readString();
 Serial.print(textMessage); 
 delay(10);
}

打开灯

如果收到的消息包含文本“ON”,则继电器将打开,打开灯。然后,将当前灯状态保存在 lampState 变量上。最后,清理 textMessage 变量,使其为空以接收新短信。

if (textMessage.indexOf("ON") >= 0){
// Turn on relay and save current state
digitalWrite(relay, LOW);
lampState = "on";
Serial.println("Relay set to ON"); 
textMessage = "";

关掉灯

另一方面,如果收到的短信包含文本“OFF”,则中继将被关闭,新状态将被保存,并且 textMessage 将被清理。

if (textMessage.indexOf("OFF") >= 0){
// Turn off relay and save current state
digitalWrite(relay, HIGH);
lampState = "off"; 
Serial.println("Relay set to OFF");
textMessage = "";

返回灯状态

最后,如果传入的短信包含文本“STATE”,Arduino应向预定义的电话号码发送一条消息,说明灯当前是打开还是关闭。

if (textMessage.indexOf("STATE") >= 0){
  String message = "Lamp is " + lampState;
  sendSMS(message);
  Serial.println("Lamp state resquest");
  textMessage = "";

使用代码底部定义的 sendSMS() 函数发送消息。

 发送短信

在代码末尾创建的 sendSMS() 函数接受字符串作为参数。该字符串应该是要发送的消息。

Arduino应答的号码设置在以下行:

SIM900.println("AT + CMGS = "XXXXXXXXXXXX"");

将 XXXXXXXXXXXX 替换为收件人的电话号码。

注意:您必须根据国际电话号码格式添加号码。例如,在中国,该数字前面是 +86XXXXXXXXX。

添加Arduino应回复的电话号码后,您可以将完整代码复制到Arduino IDE并将其上传到Arduino开发板。

 总结

在此项目中,我们演示了如何运用SIM900 GSM扩展板控制12V灯,并通过Arduino请求数据(灯的状态)。

所掌握的概念可广泛应用于操控各种电子设备。还可利用在此处获得的知识向Arduino请求有关传感器数据的信息,比如获取气象站的最新读数。

给TA打赏
共{{data.count}}人
人已打赏
ArduinoArduino-进阶动态

通过SMS控制12V的灯 - Arduino联网教程

2023-12-9 11:55:36

ArduinoArduino-进阶动态

NEO-6M GPS模块使用指南 - Arduino教程

2023-12-9 13:18:56

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
'); })();