Ответ отправителю сообщением с использованием модуля Arduino Nano и Sim900

Я использую arduino Nano и модуль Sim900. Я хочу, чтобы при получении сообщения Arduino ответил "thanks" отправителю. Мой код функции получения сообщения:

void recieveSms(){
  Serial.print("\r");
  delay(1000);
  Serial.print("AT+CMGF=1\r");        
  delay(1000);                
  Serial.print("AT+CSCS=\"GSM\"\r");
  delay(1000);                  
  Serial.print("AT+CNMI=2,1\r");// set new message remind        
  delay(1000);
  Serial.print("AT+CMGR=2\r"); // read message at position 2
  delay(1000);
  Serial.print("AT+CMGD=2\r");  // delete SMS at position 2
  delay(1000);  
}

это работает, но как я могу получить номер отправителя из сообщения?


person Sadeq    schedule 08.12.2015    source источник


Ответы (1)


Легко использовать GSM-библиотеку, которая поставляется вместе с arduino IDE.

Библиотека GSM входит в состав Arduino IDE 1.0.4 и более поздних версий.

Используя эту библиотеку, используйте remoteNumber().

Вот пример кода на странице документации

#include <GSM.h>

// PIN Number
#define PINNUMBER ""

// initialize the library instance
GSM gsmAccess; // include a 'true' parameter for debug enabled
GSM_SMS sms;

char remoteNumber[20];  // Holds the emitting number

void setup()
{
    // initialize serial communications
    Serial.begin(9600);

    Serial.println("SMS Messages Receiver");

    // connection state
    boolean notConnected = true;

    // Start GSM shield
    // If your SIM has PIN, pass it as a parameter of begin() in quotes
    while(notConnected)
    {
        if(gsmAccess.begin(PINNUMBER)==GSM_READY)
            notConnected = false;
        else
        {
            Serial.println("Not connected");
            delay(1000);
        }
    }

    Serial.println("GSM initialized");
    Serial.println("Waiting for messages");
}

void loop()
{
    char c;

    // If there are any SMSs available()  
    if (sms.available())
    {
        Serial.println("Message received from:");

        // Get remote number
        sms.remoteNumber(remoteNumber, 20);
        Serial.println(remoteNumber);

        // This is just an example of message disposal    
        // Messages starting with # should be discarded
        if(sms.peek()=='#')
        {
            Serial.println("Discarded SMS");
            sms.flush();
        }

        // Read message bytes and print them
        while(c=sms.read())
            Serial.print(c);

        Serial.println("\nEND OF MESSAGE");

        // delete message from modem memory
        sms.flush();
        Serial.println("MESSAGE DELETED");
    }

    delay(1000);

}
person dmSherazi    schedule 09.12.2015
comment
это решение не работает для меня. С помощью библиотеки gsm я не могу отправить сообщение. Почему? Я подключил Rx sim900 к tx Arduino nano и tx sim900 к rx Arduino Nano. - person Sadeq; 09.12.2015
comment
Я очень ищу это решение. Я думаю, что этот пример работает только с Arduino GSM Shield, но у меня его нет. У меня есть модуль Sim900. - person Sadeq; 09.12.2015
comment
просто подключите контакты, которые используются для последовательного программного обеспечения, для подключения к вашему SIM900 rx tx. - person dmSherazi; 10.12.2015
comment
спасибо за вашу помощь, я подключаю sim900 rx, tx к контакту 2,3 arduino в соответствии с справкой gsmShield lib. но не отправляйте сообщение. - person Sadeq; 12.12.2015