如何将 Arduino 与 GSM 模块连接并删除所有已读短信?

arduinohardwaresoftware & coding

本文将介绍如何将 Arduino 与 GSM 模块连接并删除所有已读短信。您需要以下组件:

  • Arduino 开发板

  • GSM 模块(SIM800C、SIM900A 是常见的型号,但您也可以使用其他型号的模块)

  • 一张 GSM (2G) SIM 卡,或一张带有 2G 备用功能的 4G SIM 卡(Jio SIM 卡不适用于本项目)

  • 一个 GSM 天线

您也可以使用 GSM 模块开发板,例如下图所示的开发板(SIM 卡槽位于开发板的另一侧)

GSM 模块通过 UART 与微控制器交互(请参见上图开发板左下角的 UART 跳线孔)。我们将使用 SoftwareSerial 连接到 GSM 模块。

电路图

电路图如下所示。

如您所见,我们将GSM模块的RX连接到Arduino的引脚5,TX连接到引脚9,GND连接到GND。由于GSM模块将使用单独的1A以上适配器供电,因此无需将Vcc连接到Arduino(它需要的电流大于Arduino引脚所能提供的电流)。由于在UART连接中,一个模块的TX连接到另一个模块的RX,反之亦然,因此Arduino的引脚5将用作TX(因为它连接到GSM模块的RX),引脚9将用作RX。

现在,GSM模块通过AT指令工作。

本文篇幅有限,无法详细介绍 AT 命令。但您需要知道,每条 GSM 命令都有其对应的 AT 命令手册,所有操作(发送短信、拨打电话、连接互联网等)都应参考该手册。

SIM900 的 AT 命令手册可在此处找到。

删除短信需要使用两条 AT 命令(一条用于将模块模式设置为文本模式,另一条用于实际删除短信)。

  • AT+CMGF=1 此命令将短信格式设置为文本模式。另一种模式是 PDU(协议数据单元)模式。我们只关心文本消息,因此将模式设置为文本模式。

  • 第二条 AT 命令是 AT+CMGDA,即短信删除命令。它的语法是 −

AT+CMGDA = <stat>

<stat> 参数接受以下文本模式值 −

  • DEL READ:删除所有已读邮件

  • DEL UNREAD:删除所有未读邮件

  • DEL SENT:删除所有已发送邮件

  • DEL UNSENT:删除所有未发送邮件

  • DEL INBOX:删除所有已接收邮件

  • DEL ALL:删除所有邮件

此函数会根据邮件是否已删除返回 OK,否则返回 −

ERROR
+CMS ERROR: <err>

其中 <err> 将指示实际发生的错误。

下面提供了包含上述 AT 命令的 Arduino 代码。如果您使用的是 Arduino Uno 以外的开发板,则并非所有数字引脚都支持 SoftwareSerial。

#include <SoftwareSerial.h>
SoftwareSerial gsmSerial(9, 5); //RX, TX
void setup()
{
   gsmSerial.begin(9600); // 设置GSM模块的波特率
   Serial.begin(9600); // 设置串口监视器(Arduino)的波特率
   delay(1000);
   Serial.println("Preparing to delete read SMSes");
   DeleteReadMessages();
}
void loop()
{
}
void DeleteReadMessages()
{
   Serial.println("Setting the GSM in text mode");
   gsmSerial.println("AT+CMGF=1\r");
   delay(2000);
   Serial.println("Deleting Read SMSes!");
   gsmSerial.println("AT+CMGDA=\"DEL READ\"\r");
   delay(2000);
   //在串口监视器上打印响应。
   while (gsmSerial.available() > 0) {
      Serial.write(gsmSerial.read());
   }
}

您可以修改以上代码,删除所有已发送短信以及已读短信。


相关文章