How to read messages from GSM modem in Embedded C?

谁都会走 提交于 2019-12-24 10:57:55

问题


I am currently working on my mini-project under the domain "Internet of Things". I chose to design a wireless Notice board using a GSM module.

I divided the project into two modules. First, the Arduino-LED board interface which perfectly completed.

Second, GSM-Arduino interface. Basically, a message/SMS will be sent from the mobile phone to the GSM module and then we have to read that message from GSM module using Arduino. I am facing a problem here. The message is being sent to the GSM modem but I am not able to read it. I tried writing different codes, but its not working. The message is not being displayed.

Here is the code snippet I tried.

`#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");

 }`

回答1:


You might have to set the preferred SMS storage to SIM card using the command:

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

Also, move this command to setup():

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

Lastly, note how I have used SIM900A.print() instead of SIM900A.println() and send a '\r' or 0x0d after each command. println() sends a "\n\r" and that causes problems in some modems.



来源:https://stackoverflow.com/questions/43176551/how-to-read-messages-from-gsm-modem-in-embedded-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!