使用連線到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+CMGS,它是傳送簡訊的指令。其**語法**為 -

AT+CMGS = "<phone_number_with_country_code>" <cr>
<SMS Text> ESC

末尾的ESC字元很重要,因為它表示簡訊文字的結束。ESC字元是Ctrl+Z,它在十六進位制中轉換為0x1A(ASCII十進位制等效值為26)。

下面給出了包含上述AT指令的Arduino程式碼。如果您使用的是除Arduino Uno以外的開發板,則並非所有數字引腳都支援SoftwareSerial。請這裡閱讀SoftwareSerial的限制。

#include <SoftwareSerial.h>

SoftwareSerial gsmSerial(9, 5); //RX, TX

void setup()
{
   gsmSerial.begin(9600); // Setting the baud rate of GSM Module
   Serial.begin(9600);    // Setting the baud rate of Serial Monitor (Arduino)
   delay(1000);
   Serial.println("Preparing to send SMS");
   SendMessage();
}

void loop()
{

}
void SendMessage()
{
   Serial.println("Setting the GSM in text mode");
   gsmSerial.println("AT+CMGF=1\r");
   delay(2000);
   Serial.println("Sending SMS to the desired phone number!");
   gsmSerial.println("AT+CMGS=\"+xxxxxxxxxxx\"\r");
   // Replace x with mobile number
   delay(2000);

   gsmSerial.println("Hello from SIM900");    // SMS Text
   delay(200);
   gsmSerial.println((char)26);               // ASCII code of CTRL+Z
   delay(2000);
}

作為練習,您可以嘗試在序列埠監視器上列印AT+CMGS命令的響應。

更新於: 2021年7月30日

10K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.