SIM 900 и лишнее в отправленных смс
- Войдите на сайт для отправки комментариев
доброго времени суток всем. собираю систему умного дома, попутно учусь и изучаю ардуино и программирование. конечно же мой скетч собран из готовых примеров с интернета. теорию читал, не раз, читал данный форум, но мне проще разбираться на примере и на своих ошибках. поэтому медленно и верно мучаю то что имеется и постепенно увеличиваю задачи. скетч конечно далек от идеала. проблема в следующем:
1. при запросе параметров через смс в ответ прилетает смс с параметрами, все хорошо, как и должно быть, но первые две строки в смс это АТ команда модулю SIM 900 "AT + CMGS = \"+79ххххххххх\"
2. при запросе баланса прилетает в ответ смс где только АТ команда "ATD*102#"
ранее при тестировании SIM900 на отправку смс наблюдалась такая картина:
сначала вообще смс не отправлялись, увеличил задерки между посылками АТ команд до 300мс при настройке модуля и до 200мс при командах отправки. смс стали приходить. но так же прилетали АТ команды в смс
увеличил задержки до 500 мс и 300 мс соотв. смс стали приходить как надо
одна мысль- в сериал порту остается команда в буфере, и потом считывается при отправке смс..
модуль Sim 900 и ардуино мега 2650 артемовские
забыл добавить. при остальных командах по смс, кроме запроса параметров и запроса баланса ответное смс приходит как надо
2. при запросе баланса прилетает в ответ смс где только АТ команда "ATD*102#"
А что вы хотели, вы же вместо того, чтобы отправить запрос баланса оператору, потом принять ответ, распарсить его и вытащить собственно сумму - вы вместо всего этого просто пихаете команду баланса в СМС - она и приходит.
сначала вообще смс не отправлялись, увеличил задерки между посылками АТ команд до 300мс при настройке модуля и до 200мс при командах отправки. смс стали приходить. но так же прилетали АТ команды в смс
потому что код уродский. Типичный "умный дом на СМС" из инета. По уму после каждой команды модему вы должны дождаться ответа, проверить, что это "ОК", и только потом отсылать следующую команду. И задержки ответа модема могут быть как 100мс, так и пять секунд.
распарсить-да, но для меня это пока сложновато
в ходе множественных исканий был как то код, там насколько помню баланс был заюзан аналогично, работало, но утверждать не буду, уже и не помню, если честно
согласен, код уродский и типичный из инета..
с ОК как то пытался, не пошло что то. знаю, да. ждать можно долго и не всегда одинаково занимает время ответа
стратегия у меня такая- для начала лишь бы чтоб работало, ( времени сделать все сразу хорошо нет, система постоянно используется) а потом доработка и прочее
в ходе множественных исканий был как то код, там насколько помню баланс был заюзан аналогично, работало, но утверждать не буду, уже и не помню, если честно
Баланс так работать точно не будет.
Вот еще, нашел, почему у вас приходит AT + CMGS = \"+79ххххххххх\" в запросе. Вы дважды вызываете функцию StartOneSMS() - сначала до процедуры Zapros. а потом в самой процедуре...
Вот еще, нашел, почему у вас приходит AT + CMGS = \"+79ххххххххх\" в запросе. Вы дважды вызываете функцию StartOneSMS() - сначала до процедуры Zapros. а потом в самой процедуре...
черт, точно ж.. невнимательность всего лишь..спасибо за помощь
по запросу баланса буду еще читать
про баланс. строка 149. Вы распознаете команду "Balance". Далее начинаете отсылать сразу смс, потом делаете запрос баланса.
А надо сначала сделать запрос баланса, и потом, когда смс с балансом придёт на GSM модуль, уже отправлять его пользователю.
Т.е. строка 149 далжна выглядеть так
if
(val.indexOf(
"Balans"
) > -1) { SMSbalance(); }
и далее вставляете рядом, где у вас парсятся все команды, распознавание, что прилетело смс с балансом
иногда оно начинается не +CMT, а с +USD тогда будет так
А команду запроса баланса лучше писать не так как у вас
Serial1.println(
"ATD*102#"
);
а вот так
Serial1.println(
"ATD#102#"
);
. Потому как в вашем варианте, возможно, смс с балансом будет приходить на кириллице, и оно будет не читаемо для вашего скетча.А команду запроса баланса лучше писать не так как у вас
Serial1.println(
"ATD*102#"
);
а вот так
Serial1.println(
"ATD#102#"
);
. Потому как в вашем варианте, возможно, смс с балансом будет приходить на кириллице, и оно будет не читаемо для вашего скетча.спасибо за помощь, вроде разобрался, заработало
только в моем случае смс с балансом начинается не +USD, а с +СUSD
и в ответном смс кроме баланса опять команда
есть еще такая особенность:
сейчас все датчики работают исправно и дают адекватные показания
но стоит в 15 строку вставить адрес другого датчика температуры 0x10, 0x57, 0x39, 0xBE, 0x02, 0x08, 0x00, 0x9A
то пропадают показания барометра, при чем данные с этого датчика температуры адекватные..
барометр BMP280
и в ответном смс кроме баланса опять команда
код покажите. скорее всего нужно убрать задержку 2 сек после команды запроса баланса
т.е. убираем совсем функцию SMSbalance() и строку запроса делаем в виде
if
(val.indexOf(
"Balans"
) > -1) { Serial1.println ("ATD#102#"); }
Пока идёт эта задержка 2 сек. Модуль успевает ответить на команду эхом
ATD#102#
и в ответном смс кроме баланса опять команда
код покажите. скорее всего нужно убрать задержку 2 сек после команды запроса баланса
т.е. убираем совсем функцию SMSbalance() и строку запроса делаем в виде
if
(val.indexOf(
"Balans"
) > -1) { Serial1.println ("ATD#102#"); }
Пока идёт эта задержка 2 сек. Модуль успевает ответить на команду эхом
ATD#102#
сделал вот так