如何将 Arduino 与 GSM 模块连接并删除所有已读短信?
本文将介绍如何将 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());
}
}
您可以修改以上代码,删除所有已发送短信以及已读短信。

