Goouuu Tech IOT-GA6 не видит команды по смс

djkohr
Offline
Зарегистрирован: 16.11.2018

Доброго дня!

Я начинающий. Поэтому прошу сильно не пинать, так как спросить не у кого.

Решил собрать устройство для управления реле по смс. Нужно максимально просто, вкл/выкл, не более.

Нашел скетч для примера, переписал и поправил, но ничего не получается. Объявляю управляющий пин для реле, после заливки на этот пин приходит сигнал и реле сразу замыкается. Далее. Настроил gsm-модуль, подключил к arduino nano, в мониторе всё вижу, как включается модуль, как приходят смс, но реле не реагирует. Подсказали что нет функции парсинга смс. Как и куда её поставить? Подскажите что делаю не так? Буду благодарен за пример кода и объяснение что да как.

Пример кода:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3);  // (Rx,Tx  > Tx,Rx)

char incomingByte;
String inputString;
int relay = 13; // Выход для управления реле

void setup()
{
      pinMode(relay, OUTPUT);
      digitalWrite(relay, LOW); // Исходное состояние реле
      Serial.begin(9600);
      mySerial.begin(9600);

     while(!mySerial.available()){
        mySerial.println("AT");
        delay(1000);
        Serial.println("Connecting...");
        }
      Serial.println("Connected!"); 
      mySerial.println("AT+CMGF=1");  // Установка SMS в текстовый режим
      delay(1000); 
      mySerial.println("AT+CNMI=1,2,0,0,0");  // Процедура обработки вновь полученных сообщений
      delay(1000);
      mySerial.println("AT+CMGL=\"REC UNREAD\""); // Прочитать непрочитанные сообщения
     }

void loop()
{ 
  if(mySerial.available()){
      delay(100);

      // Последовательный буфер
      while(mySerial.available()){
        incomingByte = mySerial.read();
        inputString += incomingByte;
        }

        delay(10);     

        Serial.println(inputString);
        inputString.toUpperCase();

        // включить или выключить реле
        if (inputString.indexOf("ON") > -1){
          digitalWrite(relay, HIGH);
          }
         if (inputString.indexOf("OFF") > -1){
          digitalWrite(relay, LOW);
          }         

        delay(50);

        // Удалить сообщения и сохранить память
        if (inputString.indexOf("OK") == -1){
        mySerial.println("AT+CMGDA=\"DEL ALL\"");

        delay(1000);}

        inputString = "";
  }
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Программа всегда работает в точности так, как она написана. Но не всегда это совпадает с тем, как автор хотел ее написать.

Чтобы привести в соответствие одно с другим, существует такой процесс - отладка.

В процессе отладки мы выясняем, как именно работает программа, и пытаемся изменить ее поведение, если оно не отвечает нашим желаниям.

Т.е. один из основных моментов отладки - получение информации о том, как работает программа.

А у Вас всей диагностики - 3 строки, причем в процессе получения и обработки сообщения - вообще всего одна.

Выведите на печать хотя бы строку после приведения к верхнему регистру, а потом поставьте печать в обеих ветках проверки условия совпадения с "ON" и "OFF".

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

djkohr пишет:

Я начинающий. Поэтому прошу сильно не пинать

Вот скажите, пожалуйста, а кого пинать, если не начинающих? Заслуженных ветеранов, что-ли?

Как начинающему, Вам надо радоваться, что Вас пинают - это Ваш шанс научиться! Гораздо хуже, когда игнорируют.

djkohr
Offline
Зарегистрирован: 16.11.2018

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

djkohr
Offline
Зарегистрирован: 16.11.2018

andriano пишет:

Программа всегда работает в точности так, как она написана. Но не всегда это совпадает с тем, как автор хотел ее написать.

Чтобы привести в соответствие одно с другим, существует такой процесс - отладка.

В процессе отладки мы выясняем, как именно работает программа, и пытаемся изменить ее поведение, если оно не отвечает нашим желаниям.

Т.е. один из основных моментов отладки - получение информации о том, как работает программа.

А у Вас всей диагностики - 3 строки, причем в процессе получения и обработки сообщения - вообще всего одна.

Выведите на печать хотя бы строку после приведения к верхнему регистру, а потом поставьте печать в обеих ветках проверки условия совпадения с "ON" и "OFF".

Тогда подскажите в какой последовательности должны идти команды.

Опираясь на мои неглубокие познания полагаю что сначала определяются пины для реле, потом устанавливается скорость для общения модуля и arduiono, затем на модуль отдаются команды для настройки, далее устанавливаются правила при получении смс-сообщений и выполнения команд. Полагаю что команды из смс дожны как-то выдергиваться, то есть парсинг. Следовательно "ON" и "OFF" должны распознаваться и включать или выключать реле. Всё верно я понял?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

djkohr, знаете же, что всегда существует выбор, что дать человеку - "рыбу" или "удочку". От меня Вы можете получить только удочку. В данном случае - понимание того, как самостоятельно отлаживать программы. Если Вас это заинтересовало, то следует сначала сделать то, что я посоветовал, потом, если еще не сумели добиться желаемого, показать новый вариант кода и выводимый в монитор порта пртокол, и только потом задавать новые вопросы. IMHO нет смысла в новых вопросах, пока не найдены ответы на старые.

 

djkohr
Offline
Зарегистрирован: 16.11.2018

andriano пишет:

djkohr, знаете же, что всегда существует выбор, что дать человеку - "рыбу" или "удочку". От меня Вы можете получить только удочку. В данном случае - понимание того, как самостоятельно отлаживать программы. Если Вас это заинтересовало, то следует сначала сделать то, что я посоветовал, потом, если еще не сумели добиться желаемого, показать новый вариант кода и выводимый в монитор порта пртокол, и только потом задавать новые вопросы. IMHO нет смысла в новых вопросах, пока не найдены ответы на старые.

 

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

b707
Онлайн
Зарегистрирован: 26.05.2017

djkohr пишет:

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

так вам же обьяснили в сообщении #1, что нужно сделать. Непонятно? - переспросите. Сделали? - покажите результат.

А вы вместо этого пускаетесь в рассуждения о программе. Это никому не интересно.