如何將Arduino與GSM模組連線並ping到網站?


在本文中,我們將瞭解如何將Arduino與GSM模組連線,並ping到網站。您將需要以下內容:

  • 一塊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命令手冊中沒有ping相關的特定命令。對於這些命令,您需要參考SIM900_PING_AT_手冊

要ping到網站,主要關注的AT命令是AT+CIPPING。其**語法**如下:

AT+CIPPING = <IPAddr or Domain
Name>[,<retryNum>[,<dataLen>[,<timeout>[,<ttl>]]]]

從方括號可以看出,除了第一個引數之外,所有引數都是可選的。

引數說明如下:

  • **IP地址或域名** - “abc.xyz.lmn.pqr”格式的IP地址或像"www.google.com"這樣的域名

  • **retryNum** - 要傳送的ping回顯請求數量(預設為4,範圍為1到100)

  • **dataLen** - ping回顯請求資料的長度(預設為32,範圍為0到1024)

  • **timeout** - 模組應等待單個回顯回覆的時間(以100毫秒為單位)(預設為100,範圍為1到600)

  • **ttl** - 生存時間(預設為64,範圍為1到255)。它基本上告訴網路路由器,如果資料包在網路中存在時間過長。在上述情況下,我們表示如果資料包在網路中存在64跳或更多跳,則應將其丟棄。

為了使CIPPING工作,必須啟用GPRS上下文(AT+CGATT = 1)。通常預設情況下它是啟用的,但您可能需要檢查(AT+CGATT),如果它未設定為1,則手動將其設定為1。

每個ping的回覆格式如下:

+CIPPING: <replyId>, <IpAddress>, <replyTime>, <ttl>\r

其中,

  • replyId顧名思義,是回覆的ID或編號

  • IpAddress是傳送回覆的遠端主機的IpAddress

  • replyTime是接收響應所花費的時間(以100毫秒為單位)

  • ttl如前所述,是生存時間。

如果回顯請求超時,則響應的replyTime值為600,ttl值為255。

Arduino程式碼

執行ping的Arduino程式碼如下所示(我們正在ping到google.com)

#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 ping");
   Ping();
}
void loop()
{
}
void Ping()
{
   Serial.println("Attach to GPRS");
   gsmSerial.println("AT+CGATT=1\r");
   delay(2000);
   Serial.println("Setting the APN");
   gsmSerial.println("AT+CSTT=\"YourAPN\"\r");
   delay(2000);
   Serial.println("Bringing up the wireless connection");
   gsmSerial.println("AT+CIICR\r");
   delay(8000);
   Serial.println("Getting local IP address");
   gsmSerial.println("AT+CIFSR\r");
   delay(5000);
   //Print the response on the Serial Monitor
   while (gsmSerial.available() > 0) {
   Serial.write(gsmSerial.read());
}
   Serial.println("Ping to Google");
   gsmSerial.println("AT+CIPPING=\"www.google.com\"\r");
   delay(5000);
   //Print the response on the Serial Monitor
   while (gsmSerial.available() > 0) {
      Serial.write(gsmSerial.read());
   }
}

將**YourAPN**替換為您實際的APN值(“www”通常有效,但請與您的網路提供商確認)。在序列監視器上,您應該首先看到響應AT+CIFSR的本地IP地址。在響應AT+CIPPING時,如果一切順利,您可能會看到如下響應

+CIPPING: 1,"203.208.37.99",68,234
+CIPPING: 2,"203.208.37.99",75,232
+CIPPING: 3,"203.208.37.99",54,233
+CIPPING: 4,"203.208.37.99",66,236

請注意AT+CIICR、AT+CIFSR和AT+CIPPING之後的較長延遲。這樣做是為了考慮到建立無線連線、獲取本地IP和獲取ping響應可能比平時花費更長的時間。您可以嘗試調整這些值。

如果由於某種原因,您的程式碼無法按預期工作,您可以參考應用筆記以獲取幫助。

更新於:2021年7月24日

1K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

立即開始
廣告
© . All rights reserved.