Получение СМС на GSM модуль
- Войдите на сайт для отправки комментариев
Пт, 16/10/2020 - 10:17
GSM Siemens TC35 + Nano+смартфон. Отправляю СМС с модулей успешно, т.е. симка работает, в сети определяется. Получение же СМС со смарта не работает. Если после отправки симку достать и воткнуть в телефон, то сообщение приходит только в этот момент. Т.е. модуль сам не читает СМС. Почему?
#include <SoftwareSerial.h> SoftwareSerial GPRS = SoftwareSerial(9, 8); void setup() { Serial.begin(9600); GPRS.begin(9600); delay(3000); GPRS.print("AT+CMGF=1"); // режим текста delay(2000); GPRS.print("AT+CNMI=2,2,0,0,0"); delay(2000); GPRS.println("AT+CMGD=1,4"); // удалить прежде все СМС - удалено! Проверил. delay(2000); Serial.print("GPRS ready...\r\n"); } void loop() { if (GPRS.available() > 0) { textMessage = GPRS.read(); Serial.print(textMessage); // ничего нет delay(10); } }
Код, мягко говоря, недостаточный для чтения СМС. Нужно не просто читать из модуля все подряд, а искать в приходящих данных команду приема СМС и выделять полученный текст.
Хорошо, но нет же никаких "приходящих данных". Или я неправильно делаю проверку на их наличие?
В строчках 9, 11 и 14 вы посылаете команды в модем, но не проверяете - принял ли он их, какой статус? Может там ошибка? например, в строчках 9 и 11 вы не посылаете терминатор, а в строчке 14 он есть. Откуда эта разница?
Вообще, идея просто лупить в модем команды, как в пустоту - неверный подход к работе. На каждую посланную команду приходит ответ - и его нужно анализировать.
выложенный код не компилируется. В строке 07 сделать задержку побольше. например 5 сек. А самое главное, строчки 9 и 11 долны быть println
Проверку делать не умею(( Задержку увеличил - не помогает. Скетчей - примеров в Инете не могу найти. На получение СМС на тлф есть примеры, а мне нужно в обратную сторону. Их 1-2 и то на английском. Что-то пишут, про соответствие номера СМС при его чтении. Но это же нужно при парсинге. Пока задача минимум - чтоб откликался.
строки 21-24 оформить в виде подпрограммы и вызывать ее до и после любого обращения к модулю
Да, я вставлял их после delay в 2 сек после каждой команды в Setup. Проскакиваем вниз и просто выводится Ready. Получается, что GSM вообще не принимает никакие команды. Сейчас сравню с скетчем по "отправке СМС на тлф" - он у меня работает. Выложу здесь, т.к. связан с вопросом..
Строка 13 непонятна....
тут есть сброс модуля как минимум и все посылки содержат \r
В обратном он сейчас тоже есть. Но толку нет. Может пины 8,9 должны наоборот теперь подключаться? Но это абсурд.
Что такое /r я не знаю... попробую, хотя скетч из сети, якобы работющий. Делал print и println.
В обратном он сейчас тоже есть. Но толку нет. Может пины 8,9 должны наоборот теперь подключаться? Но это абсурд.
Что такое /r я не знаю... попробую, хотя скетч из сети, якобы работющий. Делал print и println.
13 строка это для arduino micro/leonardo и других на процессоре 32U4
Получение же СМС со смарта не работает.
Как же ему бедному работать, если код даже не компилируется?
Если Вам нужна помощь, выкладывайте тот самый (для альтернативно одарённых: тот самый) (для тупых: тот самый) скетч с которым у Вас проблемы. Вы же там что-то перед публикацией поправили (ХЗ что) и как разбираться что у Вас там и как? Чтение СМС у Вас написано неверно, но ... этот код не имеет смысла смотреть, т.к. он не только не работает, но и не компилируется.
25 28 31 так и не исправили на print \r
Сейчас исправил. Объясните плз, как вообще все это должно работать? Верно, ли я что отправляю СМС со своего смарта на номер Симки модуля? СМС записывается на сим карту или нет? Это важно? Как проверить Симку вообще? Но если она ОТПРАВЛЯЕТ, значит и принимать должна. И пробую потом ставить симку в тлф. ТЛФ должен показать, что ранее приходили СМС или нет?
СМС отправляю латиницей. И цифры. Никакие символы не ставлю.
СМС у вас никуда не сохраняется - так вы настроили командой AT+CNMI=2,2,0,0,0. Но в Мониторе показываться должна.
Что касается кода, что у вас закомментирован - начиная со строки 43 - это все равно никогда работать не будет. потому что вы из СМС принимаете один-единсвенный символ.
dim3740 - вы откуда такой вылезли то? Вы же самых основ ардуино не знаете... если бы у вас была свежая регистрация, я бы посоветовал пойти светодиодом мигать. Но ник 2015 года???...да ж не знаю. что сказать. Если за пять лет знаний ноль - то наверно не стоит себя мучать уже
b707 давайте не будем поучать))) У меня уже внуки есть, и проявите уважение. Прошу по существу вопроса.
Что касается кода, что у вас закомментирован - начиная со строки 43 - это все равно никогда работать не будет. потому что вы из СМС принимаете один-единсвенный символ.
Я не прошу полной реализации. Вы же не станете отрицать, что хоть что-то, хоть 1 символ должно приниматься?
Вы же не станете отрицать, что хоть что-то, хоть 1 символ должно приниматься?
у других-то принимается. А у вас... не уверен :)
Если вы даже не в курсе, что такое /r/n ...фиг знает, что еще вы там наворотили в коде и в схеме...
Хотите помочь? Спрашивайте, я отвечу обо всем. Нет? зачем писать свои эмоции?
Вы бы для начала подключили этот модуль к компу и погоняли команды в терминале ... увидели бы приходит что то или нет
Ладно, всем спасибо. Буду разбираться.
зачем писать свои эмоции?
причем тут эмоции. Я реально не уверен, что у вас там в схеме и насколько живой модуль. Вон и Командир выше тоже совсетует его сначала с компом погонять...
Команду в таком виде
GPRS.print(
"AT+CMGF=1"
);
модуль просто не видит ему надоGPRS.print(
"AT+CMGF=1\r"
);
И соответственно находится в неизвестно каком состоянии
В терминале, делая по-командно, выявил ERROR на AT+CNMI в сетапе. Читаю руководство.... (пусть 2,2,0,0,0 как у меня)...
Как это понять? Ответ должен содержать данные, которых еще нет. Зачем тогда эту команду ставят в сетапе?
Читаю руководство.... (пусть 2,2,0,0,0 как у меня)...
Как это понять? Ответ должен содержать данные, которых еще нет. Зачем тогда эту команду ставят в сетапе?
Понять это так, что все что вы цитируете - относится к формату сообщения +CMT. Читайте внимательнее, про CMNI тут только первая строчка
Вот вам ссылка
https://infocenter.nordicsemi.com/index.jsp?topic=%2Fref_at_commands%2FREF%2Fat_commands%2Ftext_mode%2Fcnmi_read.html
Да, у меня при определенных параметрах CNMI выдается ERR, при других - ОК, но все равно приема нет. В мануалах пишут о связи этих параметров с моделью GSM модуля, наличие дисплея, куча режимов и т.п. Значит, пробовать коды без знания особенностей самого модуля не стоит.
По другой ссылке, кроме вашей, совсем иная инфа. Вы дали на nRF91. У меня другой модуль.
dim3740, понимаете ли, каждый производитель модемов придумывает свою херню, не совместимую с другими. Соответственно не имея такого именно модема и не желая от безделья гадать на кофейной гуще, сложно что то советовать. Однозначно проблема в настройках, читайте доку и все будет. Или тупо выкиньте этот модем и перейдите на более распространённые модели.
Я когда начинал, намучался с промышленным модемом, доставшимся на халяву, теперь реально понимаю лучше денег потратить и работать с проверенным решениями.