如何在嵌入式C中从GSM调制解调器读取消息



我目前正在"物联网"域下从事我的小项目。我选择使用GSM模块设计无线公告板。

我将项目分为两个模块。首先,Arduino-LED板接口完美完成。

第二,GSM-Arduino接口。基本上,一条消息/短信将从手机发送到GSM模块,然后我们必须使用Arduino从GSM模块读取该消息。我在这里面临一个问题。该消息正在发送到GSM调制解调器,但我无法阅读它。我尝试编写不同的代码,但它不起作用。未显示该消息。

这是我尝试过的代码片段。

`#include SoftwareSerial.h
SoftwareSerial SIM900A(2,3);// RX | TX
// Connect the SIM900A TX to Arduino pin 2 RX 
// Connect the SIM900A RX to Arduino pin 3 TX.

void setup()
{ 
      SIM900A.begin(9600);   // Setting the baud rate of GSM Module 
      Serial.begin(9600);    // Setting the baud rate of Serial Monitor(Arduino)
      Serial.println ("SIM900A Ready");
      delay(100);
      Serial.println (" Press s to send and r to recieve ");
}
 void loop()
 {
     if (Serial.available()>0)
     switch(Serial.read())
     {
       case 's':  SendMessage();
               break;
       case 'r':  RecieveMessage();
               break;
      }
    if (SIM900A.available()>0)
        Serial.write(SIM900A.read());
}

 void SendMessage()
{
     SIM900A.println("AT+CMGF=1");    //Sets the GSM Module in Text Mode
     delay(1000);  // Delay of 1000 milli seconds or 1 second
     Serial.println ("Set SMS Number");
     SIM900A.println("AT+CMGS="+91xxxxxxxxxx"r"); //Replace with your mobileno.
     delay(1000);
     Serial.println ("Set SMS Content");
    SIM900A.println("Hello, I am SIM900A GSM Module");// The SMS text you want to send
     delay(100);
     Serial.println ("Finish");
     SIM900A.println((char)26);// ASCII code of CTRL+Z
     delay(1000);
     Serial.println (" ->SMS Sent");
}

 void RecieveMessage()
{
     Serial.println ("SIM900A Receiving SMS");
     delay (1000);
     SIM900A.println("AT+CNMI=2,2,0,0,0"); // AT Command to receive a live SMS
     delay(1000);
     Serial.write (" ->Unread SMS Recieved");
 }`

您可能需要使用以下命令将首选短信存储设置为 SIM 卡:

SIM900A.print("AT+CPMS="SM"r");

另外,将此命令移动到 setup((:

SIM900A.print("AT+CMGF=1r");

最后,请注意我如何使用SIM900A.print((而不是SIM900A.println((,并在每个命令后发送"\r"或0x0d。 println(( 发送一个"\r",这会导致某些调制解调器出现问题。

最新更新