SIM800L mini

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Andrey12 пишет:

dr.lmg пишет:

Неужели на C++ нет функции или процедуры дял перевода кода символа в символ? Свою что ли писать?

Переводов множество, но специально для PDU нету конечно. Там каждый символ кодируется 4мя байтами. Нужно написать свой несложный декодер, например так

ПисАл на коленке, но думаю направление понятно. Я в сях тоже не силен, может есть более оптимальный алгоритм. И еще, в принципе в терминал у меня русский не выводится, на LCD тоже, там только латиница и китайские иероглифы. Поэтому с выводом русского могу ошибаться.

Andrey12, спасибо за код, попробую. Я только не понял, в каком месте мы получаем из 4 байт 1 символ.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

alfik777 пишет:

Может я, конечно, чего-то не понимаю, но может проще не  изобретать велосипед? Почему  нельзя использовать нормальный USSD- запрос  и получить адекватный ответ типа ".... Vash balans 193,94 r." ?

Не совсем понял про "нормальный" USSD - запрос. Отправляя ussd запрос, я ответ получу так же на кириллице. И модуль точно так же в буфер положит точно такую же строку из набора 4х байтных кодов. Потому что модуль не умеет читать кириллицу. Он и отправить кириллицу не может. Чтобы отправить смс кириллицей, текст нужно так же разложить на четырхбайтный код, и затем уже отправлять.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

dr.lmg пишет:

онял про "нормальный" USSD - запрос. Отправляя ussd запрос, я ответ получу так же на кириллице. И модуль точно так же в буфер положит точно такую же строку из набора 4х байтных кодов. Потому что модуль не умеет читать кириллицу. Он и отправить кириллицу не может. Чтобы отправить смс кириллицей, текст нужно так же разложить на четырхбайтный код, и затем уже отправлять.

ну да, его удивлет ровно тож самое что и меня...

и кстати, запрос вы отправляете не "в кирилице", так зачем  тогда божий дар с яичницей путать??

Вы для начала пробовали с модулем напрямую общаться, без библиотеки?

как АТ командами добится от модуля: ответы в  обычном текстовом режиме присылать, выясняли?

 

тогда задумайтесь над такой строкой:

AT+CUSD=1,"*111#"
  +CUSD: 0,"Na Vashem schete 1.00 r. Tarif 'Smartfon 3G'. Nomer deystvitelen do 20.03.2016. Poluchite 100 r. - 'Den'gi na zakaz': SMS na 5110",15
  OK
alfik777
alfik777 аватар
Offline
Зарегистрирован: 29.06.2015

dr.lmg пишет:

 Отправляя ussd запрос, я ответ получу так же на кириллице. И модуль точно так же в буфер положит точно такую же строку из набора 4х байтных кодов. Потому что модуль не умеет читать кириллицу. Он и отправить кириллицу не может. Чтобы отправить смс кириллицей, текст нужно так же разложить на четырхбайтный код, и затем уже отправлять.

Что ж Вы такой упёртый?, прям как я:-)) Забудьте Вы про кирилицу свою и всевозможные преобразования, используйте USSD-запрос и получите готовую цифру баланса (см. предыдущий пост)

MaksVV
Offline
Зарегистрирован: 06.08.2015

Я позвонил своему оператору mts и мне сказатели какую отправить ussd команду, чтобы все приходило на латинице и никаких проблем с декодингом, все просто. 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

не, ну кому то нравятся извращения, что вы к человеку пристали :)

есть обычные АТ команды и даташит, но кому то уперто хочется библиотеку всунуть в скетч и потом мучится.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Друзья, спасибо за помощь и за мнения :)

Команды AT у меня не работают, пытался в самом начале своего пути, перепробвал все (или почти все методы). Почему и перешел на библиотеку. Вчера попробовал еще раз с командами - не отвечает модуль. Может быть как нибудь на досуге и разберусь, но сейчас контроллер нормально работает с тем функционалом, который нужен. Допилить скетч для расшифровки строки с баланосм проше, чем переписать весь скетч на АТ команды, и еще предварительно убив кучу времени на разобор, почему он на эти команды не отвечает.

Andrey12, код попробовал. Строку он раскладывает в такой примерно вид:

31

3139

3934

...

2E193.942E

2E

Не пойму, как избавиться от всех этих цифр, чтобы получить 193.94

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

"не работают команды АТ" - это чтото новенькое.. зря вы глупости пишите.

ну, "раскладывайте" ваши строки дальше, раз команды у модуля не работают, не буду вам больше мешать.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

SIM800 не отвечает на АТ команды - аналогичная проблема.

Short Circuit пишет:

не буду вам больше мешать.

за это отдельное спасибо.

alfik777
alfik777 аватар
Offline
Зарегистрирован: 29.06.2015

Библиотека, которой Вы пользуетесь использует те же  AT-команды, так что они у Вас работают, точнее только они и используются  для связи с модулем. Переписывать весь скетч не нужно, можете использовать библиотеку, но при этом никто не запрещает использовать AT- команды там где это целесообразно. Библиотека нужна для упрощения жизни, а Вы её в данном случае используете чтоб поиметь головную боль. Прислушайтесь, AT-команды не могут не работать, и если у Вас с ними какие-то проблемы, то это не пройдет бесследно в дальнейшем, всё всплывёт в неподходящий момент.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

alfik777, я не имею головной боли как раз с библиотекой. Да, возникла сложность в чтении запроса по балансу. Но еще раз повторю, мне проще сейчас разобраться с чтением строки, чем с тем, почему модуль не отвечает на АТ команды.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Short Circuit пишет:

"не работают команды АТ" - это чтото новенькое.. зря вы глупости пишите.

ну, "раскладывайте" ваши строки дальше, раз команды у модуля не работают, не буду вам больше мешать.

Про АТ это действителньо странно, просто библиотека использует именно АТ команды, и ни что иное. А если библиотека работает то и АТ команды будут работать тоже.

При работе с модулями которые управляются по сериалу АТ командами, я не сторонник библиотек.

Но декодирование строк к АТ командам никакого отношения не имеет. Хотя если вы знаете АТ команду которая раскодирует строку с кирилицей то напишите что за команда. Я такую не нашел.

Я понимаю что можно принимать сообщения на латинице. И обработать их намного легче, согласен. Я не планирую управлять Arduino с помощью СМС, поэтому с приемом не заморачивался.
Но отправлять смс я хочу на русском, для этого надо кодировать строку. Рабочий код я тут выкладывал, что в этом такого плого? Да есть минусы, сообщение не 160 а всего 70 символов, но для большинства уведомлений мне достаточно.

alfik777
alfik777 аватар
Offline
Зарегистрирован: 29.06.2015

Действительно, декодирование строк и AT- команды - это разные вещи. Просто иногда сам изобретаю велосипед, иду напролом,  не прислушиваясь к советам. Главное идти  своим путём, который кажется проще и понятней не останавливаясь и никого не слушая:-). Зачастую позже понимаешь, что нужно было прислушаться. Так что никто не против декодирования, где-то это действительно нужно, но в данном случае, для получения баланса в читабельном виде хотелось помочь направить на "правильный " путь, более простой и естественный.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

dr.lmg пишет:

Не пойму, как избавиться от всех этих цифр, чтобы получить 193.94

У меня при декодеровке строки - 003100390033002E003900340440002E
Код выдает такой результат -  193.94À.

Почему вместо р у меня À я писал, у меня терминал не поддерживает кирилицу :-(
Если подробнее в строке каждый символ закодирован 4 байтами, то есть UNICODE.
В UNICODE диапаз
он 0020—007F  основная латиница,  0400— 04FF  это русские символы.

Ваш код в UNICODE вам надо преобразовать его в тот формат в котором вы выводите на дисплей.

С первым диапазоном, латиницей делать ничего не надо, она у всех таблиц совпадает, поправьте если я не прав. С ASCII точно совпадает.

Итак декодируем

0031 = 1
0039 = 9
0033 = 3
002E = .
0039 = 9
0034 = 4
0440 = // вот тут надо привести символ к вашей кодировке. то есть 0440 в UNICODE это р
              // не зная какую используете не могу подсказать как, но обычно простая математическая операция
             //  сложение(вычитание) опереденного числа из кода 0440

002E = .

вот и получаем преобразование UNICODE в вашу кодировку, результат на экран и все.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

alfik777 пишет:

Зачастую позже понимаешь, что нужно было прислушаться. Так что никто не против декодирования, где-то это действительно нужно, но в данном случае, для получения баланса в читабельном виде хотелось помочь направить на "правильный " путь, более простой и естественный.

А иногда послушаешь а потом жалеешь. Я так понял пока сам во всем не разберешься не поймешь как лучше. Стиль и навыки у всех свои, у кого то "и так пойдет" у когото "методология рулит, и все дложно быть красиво"

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Andrey12 пишет:

dr.lmg пишет:

Не пойму, как избавиться от всех этих цифр, чтобы получить 193.94

У меня при декодеровке строки - 003100390033002E003900340440002E
Код выдает такой результат -  193.94À.

Скетч беру и вставляю без всяких изменений. У меня почему то в терминале получается вот такой результат..

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

dr.lmg пишет:

Скетч беру и вставляю без всяких изменений. У меня почему то в терминале получается вот такой результат..

Пардон я тестил в симуляторе - https://123d.circuits.io/

Добрался до дома, переделал отладил.

String message = "003100390033002E003900340440002E";

void setup()
{
  Serial.begin(9600);
  
  Serial.println(message);
  
  char key = 0;
  char letter[2];
  String vDecode = "";
  long int lchar;
  
  for (int i = 0; i < message.length(); i= i+4) 
  {
    key = message.charAt(i+1);
    letter[0] = message[i + 2];
    letter[1] = message[i + 3];
    lchar = strtol(letter,NULL,16);
    
    Serial.println(letter);
    // если вотрой символ в 4ке символов 0 значит латиница            
    if (key == '0')
    {
      vDecode  = vDecode  + char(lchar);
    }
    else
    {    // иначе значит кирилица
      vDecode  = vDecode  + char(lchar+176);
    }
 
  }
  Serial.println(vDecode );
}

// the loop routine runs over and over again forever:
void loop() {
}

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Andrey12, спасибо огромное!

А теперь предалагаю повеселится :)

АТ команды я победил. Взгляните на результат работы в терминале. Я запрашиваю оператора слать мне СМС в латинице. Он говорит - ок, теперь все будет в транслите. Отправляю USSD запрос баланса.. хыыы.. и там опять такая же лабуда в кодировке. На этот раз 8 Bit binary Data. Я вообще х.з как это можно расшифровать, кроме как на сайте http://smspdu.benjaminerhart.com/

MaksVV
Offline
Зарегистрирован: 06.08.2015

А текст то такойже после расшифровки? Попробуйте симку в тел вставить, посм что придет. Может еще через ат команду ATD*100# попробовать запрос послать

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

тоже застрял на этой функции (проверки баланса), был у меня рабочий пример запроса бааланса, но к сожалению комп сгорел а пример не сохранил. 

пробовал 

SIM800_Serial.print("AT+CUSD=1,\"*100#\",15");
  SIM800_Serial.print("ATD#100#");

 

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

MaksVV пишет:

А текст то такойже после расшифровки? Попробуйте симку в тел вставить, посм что придет. Может еще через ат команду ATD*100# попробовать запрос послать

Вот такой текст приходит в СМС:

172.49r. Oplatu zvonkov mozhno otlozhit ! Vklyuchajte Obeshhanny`j platezh *106#

Через ATD*100# тоже отправлял - теже фаберже.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

ВОТ ЧТО НАШЕЛ ЦИТИРУЮ

Отмечу, что есть 2 варианта USSD запроса: начиная с * и начиная с #. В первом варианте ответ приходит на русском языке, во втором в латинице, если оператор такой запрос поддерживает и не ответит так же, как и в первом случае.

 

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Если на мегафоне отправить #100# - то предлагается за что-то заплатить.

А перевод на латиницу у мегафона *105*0#.

Skvo
Offline
Зарегистрирован: 13.03.2016

dr.lmg пишет:

АТ команды я победил. Взгляните на результат работы в терминале. Я запрашиваю оператора слать мне СМС в латинице. Он говорит - ок, теперь все будет в транслите. Отправляю USSD запрос баланса.. хыыы.. и там опять такая же лабуда в кодировке. На этот раз 8 Bit binary Data. Я вообще х.з как это можно расшифровать, кроме как на сайте http://smspdu.benjaminerhart.com/

dr.lmg пишет:

Вот такой текст приходит в СМС:

172.49r. Oplatu zvonkov mozhno otlozhit ! Vklyuchajte Obeshhanny`j platezh *106#

Через ATD*100# тоже отправлял - теже фаберже.

 

Привет.

Чтобы в ответе USSD была символьная информация, он должен быть закодирован в кодировке GSM 7-bit.

Но у Мегафона, транслитерация не всегда укладывается в эту кодировку. К примеру выше слово "Обещанный" переводится в "Obeshhanny`j", где присутствует обратный апостроф (гравис).

В кодировке GSM 7-bit - нет символа `(обратный апостроф), поэтому используется кодировка в GSM 8-bit data, которую нужно дополнительно раскодировать...

Из-за этих нюансов - в запросе по *100# - ты можешь встретить как наглядную информацию, так и твой "фаберже".

Все зависит от рекламы, размещенной после баланса. Вот поменяется она, и ответ может стать наглядным, если все символы после транслитерации влезут в GSM 7-bit.

 

Добавочка...

В кодировке GSM 7-bit есть классический апостроф (одинарная кавычка), для использования к примеру в " it's " , " i'm " и прочих случаях.

Вот если бы мегафон использовал её в транслитерации, к примеру "Obeshhanny'j" то и проблем бы не было с лишним кодированием, все влезало бы в GSM 7-bit..

Но так как используется обратный апостроф ` (гравис), отсутствующий в GSM 7-bit, то и имеем дополнительные проблемы...

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Skvo, час от часу не легче :)

Судя по всему, проще использовать СМС запрос на номер 000100. Сейчас в этом направлении копаю.

MaksVV
Offline
Зарегистрирован: 06.08.2015

Skvo, толково объяснил. 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

капец, нет, тобы АТ командами сначала выяснить как перевести гсм модуль:

1 - в текстовый режим.

2 - в режим GSM ! кодировки.

после этого смс начнут о чудо - приходить в латинице в  ТЕКСТОВОЙ кодировке..

и все это, внимание: - описано в пдфе на модуль, в ат командах..

но упражняйтесь по своему, не буду мешать.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

у меня тоже не получается запрос баланса, работаю с ат командами

"AT"
"AT+CMGF=1"    // устанавливает текстовый режим смс-сообщения
"AT+CSCS=\"GSM\""    //режим кодировки текста
"AT+IFC=1,1"     //Контроль передачи данных
"AT+CNMI=1,2,2,1,0"    // Настройка вывода

и все равно ответ про баланс кодированный  возвращает

Skvo
Offline
Зарегистрирован: 13.03.2016

Baks пишет:

и все равно ответ про баланс кодированный  возвращает

Циферки приведи этого кодированного ответа. Поглядим что там...

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

вот вызываю так "AT+CUSD=1,\"*100#\""

вот выдает это 

"003200320038002E003100340440002E000A041D04300431043504400438044204350020002A00350035003900230020002D002000200412041804140415041E00200432002004420435043B04350444043E043D04350021002004220440043004440438043A00200411041504
скорее всего что буфера не хватило , закрывающих ковычек нет
второй запрос "AT+CUSD=1,\"#100#\""
выдает 
 "04260435043D04300020003300300440002E002C0020041C0435043304300424043E043D0020041C043E0441043A04320430002C0020043E043F043B0430044204380442044C002004410020043E0441043D043E0432043D002E002004410447043504420430003F00200031003

 

такой запрос "ATD#100#"
выдает 
+CUSD: 1,"04260435043D04300020003300300440002E002C0020041C0435043304300424043E043D0020041C043E0441043A04320430002C0020043E043F043B0430044204380442044C002004410020043E0441043D043E0432043D002E002004410447043504420430003F00200031003D04140430", 72

 

 
хотя я как и писал , у меня запрос получался и выводил циферки как положенно но к сожелению тот скетч уплыл в небытие и хз как сделать так же
 

 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

Baks пишет:

у меня тоже не получается запрос баланса, работаю с ат командами

"AT"
"AT+CMGF=1"    // устанавливает текстовый режим смс-сообщения
"AT+CSCS=\"GSM\""    //режим кодировки текста
"AT+IFC=1,1"     //Контроль передачи данных
"AT+CNMI=1,2,2,1,0"    // Настройка вывода

и все равно ответ про баланс кодированный  возвращает

скетч это ладно, но сделайте чуть иначе: вы без скетча вручную каждую команду введите по отдельности, убедитесь что там ок ответило, а потом с своего телефона отправьте например обычное смс отправьте, убедитесь что пришло в нужной кодировке, и только потом сделайте запрос юссд и посмотрите результат, я думаю так будет правильно решать вопрос.

и потом - "AT+CNMI=1,2,2,1,0"   - настройка  какого вывода?  какой у вас модуль, 590й?

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

модуль SIM800L  все настройки возвращают положительный результат, функция возвращает положительный ответ.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

 попробуйте AT+CNMI=1,2,0,0,0 , а лучше бы вычитать в пдф на сим 900, на сим800, и на 590  - разницу в настройках этой команды.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Как я понимаю раскодировать не получится?

duinor
Offline
Зарегистрирован: 16.01.2016

Подскажите пожалуйста, кто нибудь пробовал красный модем SIM800L в режиме голоса?

Судя по инструкции к нему можно микрофон с динамиком подключить 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

и?   смотрите даташит, там схема как динамик вкл, и с какими конденсаторами нужно цепь на микрофон делать.

duinor
Offline
Зарегистрирован: 16.01.2016

С самим подключением нет проблем. Меня интересует какчество связи , чувствительность микрофона и т.д. Есть ли смысл использовать модем в качестве телефона ?

Nikk80
Offline
Зарегистрирован: 29.03.2016

Добрый день! Подскажите кто знает, как считать СМС из модуля SIM800L по запросу? Т.е. отправляю ему  AT+CMGR=1,0 модем шлет текст с номером датой и текстом СМС, но вот считать его в String никак не получается корерктно, то символы срезает то сам текст пропадает. Может есть у кого кусочек скетча на такой случай? Нужно вытащить номер отправителя и текст СМС.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

тема смс 100 раз здесь обсасывалась. гляньте поиском по  форуму.

Nikk80
Offline
Зарегистрирован: 29.03.2016

Глядел, везде чтение происходит т.с. на лету, когда можем шлет в порт непосредственно сообщение, при этом это все в теле основного цикла программы и программа минимального размера, т.е. данные успевают считаться из буфера и он не затыкается. Если считывать позже то обрезка до 64 байта всего сообщения где и сам текст и номер телефона.

Нужно же чтобы СМС хранилась в модуле и ситывалась в произвольное время, но вот с этим проблема, приходит то обрезанное то ничего не читается кроме самой команды на чтение если не отключить эхо от модема.

       #include <SoftwareSerial.h>
     
    SoftwareSerial gprsSerial(2, 3);
     
    //для зелёного светодиода будем использовать второй цифровой вход,
    //а для жёлтого - третий
   // int greenPin = 13;
   // int yellowPin = 4;
     
    void setup()
    {
        Serial.begin(19200);
        gprsSerial.begin(19200);
       // pinMode(greenPin, OUTPUT);
      //  pinMode(yellowPin, OUTPUT);
     
        // Настраиваем приём сообщений с других устройств
        // Между командами даём время на их обработку
        gprsSerial.print("AT+CMGF=1\r");
        delay(300);
        gprsSerial.print("AT+IFC=1, 1\r");
        delay(300);
        gprsSerial.print("AT+CPBS=\"SM\"\r");
        delay(300);
       // gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
        delay(500);
    }
     
    String currStr = "";
    // Переменная принимает значение True, если текущая строка является сообщением
    boolean isStringMessage = false;
     
    void loop()
    {       
        delay(30);
        sms();
    }

    void sms()
{
  gprsSerial.println("AT+CMGR=1,0");
  delay(10);
    if (!gprsSerial.available())
        return;
 while(gprsSerial.available())
 {
    char currSymb = gprsSerial.read();    
    if ('\r' == currSymb)
    {
        if (isStringMessage) 
        {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
             Serial.println("sms= " + currStr);
            isStringMessage = false;
        } else 
         {
            if (currStr.startsWith("+CMGR:"))
            {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
         }
        currStr = "";
    } 
      else if ('\n' != currSymb)
        {
          currStr += String(currSymb);
        }
 }
}
Andrey-S
Offline
Зарегистрирован: 02.01.2015

Задержку пробовали поставить? 

while (gprs.available()){
//тут код

delay(1);//а тут задержа 
}

 

Nikk80
Offline
Зарегистрирован: 29.03.2016

Да как раз спрямо в точку, вот это работает как надо, пробовал разные задержки и как раз 1мс нормально для 9600, но считывание опять же он лайн происходит,  как по команде то считать верно, вот в чем вопрос. Верхний скетч подправил, добавил команду на чтение 1й смс, удаление смс даже не включал пока.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
String PhoneNumber, SMStext;
char ch;
String val = "";
String val1 = "";
boolean isStringMessage = false;// Переменная принимает значение True, если текущая строка является сообщением
void setup() {
  Serial.begin(9600);  //Скорость порта для связи Arduino с компьютером
  Serial.println("Goodnight moon!");
  mySerial.begin(9600);  //Скорость порта для связи Arduino с GSM модулем
  //mySerial.println("AT");
  //mySerial.println("AT+CLIP=1\r");  //включаем АОН
  delay(3000);
  mySerial.println("ATE0\r");  //выключаем эхо
  delay(100);
  mySerial.println("AT+CMGF=1\r");  //режим кодировки СМС - обычный (для англ.)
  delay(100);
  mySerial.println("AT+CSCS=\"GSM\"\r");  //режим кодировки текста
  delay(100);
  mySerial.println("AT+CMGD=1,4\r");//команда на удаление всех СМС
  delay(100);
  mySerial.print("AT+CNMI=1,2,2,1,0\r"); //установка режима отправки смс в порт
   delay(1000);
  
}

void sms()
{
  
    //delay (1000);
     if (mySerial.available()>0) 
     {          //есть данные от GSM модуля
     delay(10);                        //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
     while (mySerial.available())
          {      //сохраняем входную строку в переменную val
          ch = mySerial.read();
          val += char(ch);
          delay(1);
          }
     Serial.println("Stroka "+val);
     val="";
    }
}


 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

контроль передачи в сериал - софтверный  или аппаратный?

В гсм модуле некоторые истояники рекомендуют DTR на землю замкнуть.

Nikk80
Offline
Зарегистрирован: 29.03.2016

Контроль софтверный, пробовал через AT команду установить программный контроль, тоже самое все.

На платке с Модулем пины только TX RX RST VCC GND, ну еще микрофон и динамик есть, так что DTR никак не получится.

 

Проблема то не в модуле, он все отдает как надо, либо сразу же с командой at+cnmi=1,2,2,1,0 либо через запрос at+cmgr=1,0    я во втором случае не могу загнать в строку сам текст, туда пишется только команда либо ответ модема-ОК, а смо сообщение никак не заносится, хотя должно бы/

У меня в проге какой то проблем, но понять что, не могу пока, опыта маловато, поэтому то собственно пишу сюда с просьбой подмогнуть и направить на путь )

 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

вот что значит неполноценные модули........

Nikk80
Offline
Зарегистрирован: 29.03.2016

Есть идеи по первому скетчу что не так? Про модуль понятно уже...

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

так что именно не получается? не совсем понятно. смс не отправляется?

парсить  смс не получается? - в интернете достаточно разных вараинтов примера разборки смс, посмотрите пример и думаю выберите, то, что заработает.

Nikk80
Offline
Зарегистрирован: 29.03.2016

не получается считать смс по команде на чтение смс и загнать сам текст в переменную для последующего разбора.

на команду чтения смс отвечает только в терминальном режиме вот так:

команда at+cmgr=1,0

+CMGR: "REC READ","+79206299093","","16/03/28,01:03:48+12"

temp 22

OK

в программе по вызову процедуры чтения ничего не шлет

alfik777
alfik777 аватар
Offline
Зарегистрирован: 29.06.2015

Nikk80 пишет:

На платке с Модулем пины только TX RX RST VCC GND, ну еще микрофон и динамик есть, так что DTR никак не получится.

А это  не подходит?

Nikk80
Offline
Зарегистрирован: 29.03.2016

Ха реально, есть, я что то не обратил внимание, плпта еще там обрезана и пин для звонка не подписан)