Arduino - передача SMS по событию

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Papipa, 20 ноя 2017.

Метки:
  1. Papipa

    Papipa Гик

    Прошу помочь с запуском GSM модуля. Куплен, как писал выше чуть, GOOUUU Tech IOT-GA6. Соединил GSM модуль с UNO R3, согласно описаниям подключения:
    RX<->TX
    TX<->RX
    VCC с 5V Дуни
    GND<->GND

    Ну и собственно всё пока. Первое что заметил - Дуня при подключении таком отказывается шить скетч, просто прогресс-бар записи скетча доходит до 100%, и оставаясь зелёным, бар записи так и висит, не исчезая - то есть запись до конца произойти не может почему-то. AT команды через монитор порта Дуни посылаю - ну собсно реакции тоже ноль. При этом звоню на симку, которая в GSM модуле - вызов идет!!!

    Что и как дальше мне действовать? Правильно ли спаял модуль? Как получить связь в итоге с ним? Инетов обчитался уже по уши, но все что нужно по мануалам - я вроде как сделал. Но не работает.

    Кстати читал про сброс модуля при старте - нужно соединить PWR и VCC модуля на пару секунд для старта - так ли это? Как быть потом тогда, при автономомной работе Дуни - если Дуня выключится-включится, то как запустить GSM модуль?
     
  2. Papipa

    Papipa Гик

    Вобщем, подключился каким-то магическим образом.

    Итого связка Дуни и GSM модуля:
    pin5->TX
    pin6->RX
    GND->GND
    +5V->VCC
    и PWR на GSM модуле соединил с VCC

    Скетч взял самый простой, из стандартной SoftwareSerial похоже:

    Код (C++):
    #include <SoftwareSerial.h>

    SoftwareSerial mySerial(5, 6); // RX, TX

    void setup() {
      // Open serial communications and wait for port to open:
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }


      Serial.println("Goodnight moon!");
    delay(3000);
      // set the data rate for the SoftwareSerial port
      mySerial.begin(115200);
      //mySerial.println("AT");
    }

    void loop() { // run over and over
      if (mySerial.available()) {
        Serial.write(mySerial.read());
      }
      if (Serial.available()) {
        mySerial.write(Serial.read());
      }
    }
     
    Связь как бы есть. Но прут крокозябры,
    например на команду "AT" вот такое на экране в ответ:
    at
    OI

    На команду "ATI" вот ответ:
    ati
    Kiogc⸮⸮ŊVHh)⸮⸮֬⸮⸮uŲj
    Re{ision: Ga6_A5_R05_GR⸮YUG_A01_D17`72SH⸮H⸮j⸮

    Запрос инфы об операторе "at+cspn?":
    at+a⸮pn?
    +CMQ*IH}I⸮⸮j

    Запрос уровня сигнала:
    at+csq
    +CSQ: 0l,99
    OK

    А вот команда позвонить на сторонний номер вообще не работает, тоже краказабры, в т.ч. скорверканное слово "Error".

    В чем может быть дело?!! Чую, какой-то общий баг, где-то недонастроено что-то, но что. Весь день сижу, читаю-пробую, но уже соображалка не того.

    Хелп помогите!! )
     
  3. Papipa

    Papipa Гик

    Дуня кстати подключена одновременно к БП (6В 2А) и к USB порту компьютера для мониторинга порта - ну питания должно хватать, как понимаю...
     
  4. kt315where

    kt315where Гик

    тут в предыдущих сообщениях советовали AThinker A6 , у меня такой модуль, отличная вещь. Стоит недорого. В комплекте есть даже антенна, штырьки уже припаяны, т.е этот модуль готов к старту прямо "из коробки". Ток потребления минимален, причем нормально работает с 5 вольтовой логикой ардуины без согласования логики. (сам модуль имеет 3.3 логику, но при этом отлично работает с 5 вольтовой логикой). AT команды немного отличаются, но к ним я нашел PDF файл где впринципи всё понятно описано. Единственное что у него неудобно - это при старте ардуины нужно обязательно кинуть ему строку со скоростью порта ардуины и кодировкой текста и смс. Хоть производитель пишет что скорость определяет автоматически (по умолчанию 115200), так нефига. Пока строку со скоростью не кинуть - модуль пишет ироглифы
     
  5. ImrDuke

    ImrDuke Гик

    Подскажите на него ссылку на али.
     
  6. Papipa

    Papipa Гик

    Мгм... Ну чистый А6 я уже не куплю, раз этот вариант взял. Собственно с А6 они максимально похожи, как понимаю.
    А вот покажите, пжл, Ваш скетч - как инициируете Дуню, GSM модуль? Про задание скорости принудительно я и не подумал...может, действительно, тут корова и зарылась.... А про задание кодировки я вообще как-то лекцию проспал (не читал)...
     
  7. kt315where

    kt315where Гик

    В начале работы ардуино я посылаю модулю вот эти строчки (в void setup)

    Код (C++):
     mySerial.println("AT");
      delay(100);
      mySerial.println("AT+IPR=9600"); // Скорость порта GSM модуля (на всякий случай);
    // mySerial.println("ATE0"); //ЭХО
      delay(500);
      mySerial.println("AT+CLIP=1");  //включаем АОН (определитель номера)
      delay(500);
      mySerial.println("AT+CMGF=1");  //режим кодировки СМС - обычный (для английских символов)
      delay(100);
      mySerial.println("AT+CSCS=GSM"); //кодировка текста GSM
      delay(100);
      mySerial.println("AT+CNMI=2,2,0,0,0"); // режим отображения НОВЫХ СМС в порту
      delay(100);
    Да, наверное Вы уже заметили что в моем случае модуль подключен к SoftwareSerial, поэтому скорость 9600 . По заявлению производителя модуль определяет скорость порта автоматически по первой присланной команде, поэтому я вначале пишу ему просто AT, а потом уже присылаю команды с настройками

    Еще один нюанс. Присылать команды модулю надо уже ПОСЛЕ его инциализации (загрузки), т.е сначала включаем GSM модуль, ждем несколько секунд пока он загрузит свою программу внутри себя и только потом начинаем общение с ним по serial. У меня работает только так, т.е если начать ему присылать команды сразу после включения - настраивается не всегда. видимо ему сначала нужно прогрузиться самому, а потом только он начнет понимать команды в порту. Из-за этого я тоже долго мучался сначала
     
    Papipa нравится это.
  8. kt315where

    kt315where Гик

    Вот он, только у меня немного другая ревизия (антенна крепится не на плату, а выносная на проводке). А так всё тоже самое https://ru.aliexpress.com/item/Free...-d1be-4abc-97ca-15a84b6b65c4&rmStoreLevelAB=0
     
    ImrDuke нравится это.
  9. Papipa

    Papipa Гик

    Не совсем понял. У меня тоже в Дуне подключается только эта библиотека, далее по скетчу порт вывода текста настраивается на 9600 а вот для работы с GSM модулем - на 115200. Это неправильно?!
     
  10. kt315where

    kt315where Гик

    У меня скорость порта к которому подключен GSM модуль в обе стороны 9600

    А чтобы видеть текст, который присылает модуль я сделал так:
    текст (от модуля к ардуине) сохраняется в переменную VAL и из неё уже выводится в аппаратный сериал ардуины
    Скорость аппаратного сериала тоже 9600 соответственно. как оказалось этой скорости достаточно для простых команд вроде позвонить или передать смс, норм работает
     
  11. Papipa

    Papipa Гик

    Ну собственно у меня вообще в задаче минимальные потребности - слать SMS по факту изменения ситуации в эл. цепи. Так что хоть 115200, хоть 9600, да хоть 1200 - лишь бы СМС уходили в теч. 1-2 минут ))
     
  12. kt315where

    kt315where Гик

    ну короче попробуйте поставить везде 9600 скорость и начинайте общаться с GSM модулем спустя несколько секунд после старта. Если питание общее, то можно поставить задержку в void setup, чтобы gsm успевал прогрузиться. я только так смог добиться стабильного обмена данными с модулем A6
     
  13. Papipa

    Papipa Гик

    Собственно да, всё в таком виде и заработало. Огромное спасибо! Краказябры исчезли, на команды отвечает. Но проблема - звонить не хотит модуль )) Оно мне и не нужно, только СМС, до которых еще не дошел, но из принципа интересно - с чего вдруг отказ в звонке? Ошибка вот такая, без кавычек: "+CME ERROR:58". Не попадалась Вам она?
     
  14. Papipa

    Papipa Гик

    А и вообще, можете поделиться кодом живым - как звонить и как слать SMS? С "позвонить" почти уже разобрался, СМСтеперь не могу отправить.
     
  15. Papipa

    Papipa Гик

    Ибо команды АТ немного все-таки отличаются, тот мануал, с которого начал - некоторые просто выглядят по другому, нежели нужно GSM контроллеру
     
  16. Papipa

    Papipa Гик

    Кто нибудь!! Скажите, как отправить SMS с GSM модуля, какой набор команд? Вроде всё повключал - текстовый режим, пам-пам-пам, СМС не могу отправить. Звонить могу, разобрался. Но надо СМС-ки как раз отправлять...
     
  17. kt315where

    kt315where Гик

    насколько я помню ошибка ERROR:58 выдается при неправильной/ошибочной команде, т.е ввести любое слово которое модуль не знает он выдаст ERROR:58

    покажите строчки, которые вы говорите модулю чтобы позвонить/послать смс
     
  18. Papipa

    Papipa Гик

    А всё уже, разобрался )) Таки-пришлось полдня убить на чтение мануалов и тестирование вариантов команд...

    Сейчас размышляю на тему стабильной работы модуля, т.к. по сути он должен неделями и месяцами бездействовать, и лишь изредка, ну допустим раз в 2-3 месяца отсылать СМС-ку об отключении электросети. В связке с Дуней. Продумываю, вобщем, скетч. Дуня как-то сканить должна, проверять, наверное, работоспособность модуля GSM, возможно перезагружать его периодически (можно ли как-то программно перезагружать, кстати?!), возможно периодически слать команду "АТ" хотя бы, и ждать ответа "ОК"... Ну как-то так, нужен жизнеспособный скетч, работающий годами.
     
    Leo51 нравится это.
  19. DIYMan

    DIYMan Guest

    Правильно мыслите ;) В моём проекте ( в подписи) именно так и сделано: периодически отслеживается живость модема путём отсыла ему команды AT - если не пришёл ответ в течение какого-то времени - перезагрузка модема. Если ответ на любую команду не пришёл в течение установленного времени - перезагрузка модема.

    Перезагрузка сделана по питанию, через транзистор - просто рвётся цепь питания на N секунд, потом включается, ждётся ещё N секунд (пока модем прочухается), потом уже - переход к инициализации работы с модемом. "Ждётся" - не в delay, реализовано конечным автоматом.
     
    Papipa нравится это.
  20. Papipa

    Papipa Гик

    Файлов в проекте неимоверное множество... Где там можно выискать (надо вариант кода скетча Дуни) такие моменты, как:
    - метод чтения ответов GSM модуля (из порта в переменную?) и их анализ;
    - команда перезагрузки модема;
    - длительность пауз ожидания инициации модема после перезагрузки, и вообще при включении системы
    ... ну и может еще что-то, связанное с интерактивностью взаимодействия Дуни и модема