Arduino и GSM модуль SIM900, как получить сообщения номер телефона?
У меня есть Arduino и GSM модуль SIM900, я хочу получить номер при получении сообщения. Как это сделать, если есть команда или функция на языке C++. Спасибо
SoftwareSerial SIM900(7, 8);
void setup()
{
SIM900.begin(19200); // for GSM shield
SIM900power(); // turn on shield
delay(10000); // give time to log on to network.
SIM900.print("AT+CMGF=1\r"); // set SMS mode to text
delay(100);
SIM900.print("AT+CNMI=2,2,0,0,0\r");
// blurt out contents of new SMS upon receipt to the GSM shield's serial out
delay(100);
}
void SIM900power()
// software equivalent of pressing the GSM shield "power" button
{
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(7000);
}
void loop()
{
if (SIM900.available() > 0) // if there's Message
{
inchar = SIM900.read(); //Get the character from the cellular serial port.
// command or function for get the phone number from message
}
}
1 ответ
Попробуйте поиграть напрямую с модемом, например, подключив вход и выход к последовательному порту USB, тогда он станет более понятным.
Дело в том, что при появлении нового сообщения вы получите несколько байтов от модема, которые выглядят так:
+CMTI: "SM",4
...где 4
это идентификатор. Вы можете отправить на модем AT+CMGR=4
(4
будучи идентификатором из ранее), и вы получите ответ, как это:
+CMGR: "REC UNREAD","+123456789",,"15/04/22,13:22:11+32"
Yay, a nice text message!
OK
Если последняя часть не удалась, вам может понадобиться сначала сказать модему прочитать SM
печатать сообщения, используя AT+CPMS="SM"
,
Для получения дополнительной информации см. http://www.developershome.com/sms/cmgrCommand2.asp