SIM900 получение СМС в режиме GPRS
- Войдите на сайт для отправки комментариев
Доброго дня!
такая ситуация -
к ардуино Mega2560 подключен SIM900.
работает в режимах приема звонка, приема СМС И отправки данных на сервер.
проблема -
если не включен режим GPRS, то СМС принимается отлично, считываю строку, в которой есть номер телефона и сам текст СМС. его парсю, и все в порядке.
пример строки
,,+CMT: "+7911111111","","17/01/21,13:25:09+12",,wsk1,,
НО если включен режим GPRS, то строка принимается обрезанной
,,+HTTPACTION:0,200,19,,,,+CMT: "+79111111111","","17/01/21,13:
переменная заведомо длинее 190 символов.
вероятно я не до конца считываю поток с модуля. или не верно? прошу помощи, а то уже давно бьюсь.
аналогичные примеры на форумах смотрел, но не нашел решения проблемы
код считывания с модуля прилагаю.
буду рад услышать конструктивную помощь и направление, куда рыть...
char msg[190] = "";
GsmAvailable(); // проверим порт модуля
void GsmAvailable() { //
if (gsmSerial.available()) { // если идет поток с SIM,
while (gsmSerial.available()) {
char buf = gsmSerial.read();
if ('\r' == buf) // если конец инфы с модуля
buf = ',' ; //Добавл
if ('\n' == buf) // если конец инфы с модуля
buf = ',' ; //Добавл
msg[i++] = buf;
}
//закрываем массив
// msg[i++] = '\0';
}
Serial.print("soobsch GPRS 2 - ");
Serial.println(msg);
Serial.println(i);
}
if (i > 0) // определяем тип сообщения с модуля и запускаем соответствующую обработку
GsmMes(); // парсю код
i = 0;
// этой процедурой подключаю HTTP
////////Инициализировать HTTP
void P_initialized_Http() {
init_gsm(); // сброс модуля
stop_http(); // //остановить HTTP !!!!!!!!????
if (!SendAT("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"", "OK")) //тип подключения - GPRS
return ;
if (!SendAT("AT+SAPBR=3,1,\"APN\",\"internet.beeline.ru\"", "OK"))
return;
if (!SendAT("AT+SAPBR=3,1,\"USER\",\"beeline\"", "OK"))
return;
if (!SendAT("AT+SAPBR=3,1,\"PWD\",\"beeline\"", "OK"))
return ;
if (!SendAT("AT+SAPBR=1,1", "OK")) //Reopen bearer //Открыть несущую (Carrier)
{
delay(300);
SendAT("AT+SAPBR=0,1", "OK"); //close bearer
delay(300);
if (!SendAT("AT+SAPBR=1,1", "OK"))
return;
}
delay(300);
if (!SendAT("AT+HTTPINIT", "OK")) //Инициализировать HTTP
return;
if (!SendAT("AT+HTTPPARA=\"CID\",1", "OK")) //Carrier ID для использования.
return;
initialized_Http = 1;
// NextMillisOut = millis() + PeriodNextMillisOut;
}