SIM800L mini

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

n.osennij пишет:

скажите, а SIM800L вообще может получать координаты GPS ну хотябы используя вышки?

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

n.osennij
Offline
Зарегистрирован: 10.08.2016

Short Circuit пишет:

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

Так в том и дело, в даташите команды видел, а в видео ни одного упоминания не нашёл. Потому решил спросить на всякий случай прямо.

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

так не смотрите видео, все в даташиет раписано.

дподнимаете интернет на модуле, потом даете команду и в ответ получаете долготу и широту, все...

n.osennij
Offline
Зарегистрирован: 10.08.2016

Разве без интернета он не определит координаты? Понтяно, что разброс выше будет, но всё же. 

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

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

n.osennij
Offline
Зарегистрирован: 10.08.2016

Похоже на то. Есть вариант, но не совсем удобный [https://habrahabr.ru/company/promwad/blog/223635/]

Поправьте, если путаю, модуль Neoway m590 тоже ведь умеет выходить в интернет, но (в отличие от SIM800L) не поддерживает AT комнанды на определение координат? Или я опять заблуждаюсь?

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

не видел я у 590 возможности выдать координаты.

 

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

dioxin
Offline
Зарегистрирован: 02.11.2016

Вы чего лесапед изобретаете.. Цепляешь sim800 к ардуино и туда же цепляешь gps модуль. Вот вам  и трекер с отправкой куда угодно, хоть по sms хоть в Интернет. Кстати, щас делаю сервер для приема данных с разных датчиков, замков и сигнализаций. Заказал vps. Вот думаю, нарно через MQTT буду слать и принимать.

n.osennij
Offline
Зарегистрирован: 10.08.2016

Short Circuit пишет:

не видел я у 590 возможности выдать координаты.

Спасибо. Подтвердили мои наблюдения.
 

Short Circuit пишет:

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

Это просто ради интереса)

dioxin пишет:

Вы чего лесапед изобретаете.. Цепляешь sim800 к ардуино и туда же цепляешь gps модуль. Вот вам  и трекер с отправкой куда угодно, хоть по sms хоть в Интернет. Кстати, щас делаю сервер для приема данных с разных датчиков, замков и сигнализаций. Заказал vps. Вот думаю, нарно через MQTT буду слать и принимать.

Так это получается покупать лишний модуль. Лишние затраты, лишнее занимаемое пространство. Если sim800L умеет выходить в интернет и получать координаты, то зачем лишний модуль?

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

dioxin пишет:

Вы чего лесапед изобретаете.. Цепляешь sim800 к ардуино и туда же цепляешь gps модуль. Вот вам  и трекер с отправкой куда угодно, хоть по sms хоть в Интернет. Кстати, щас делаю сервер для приема данных с разных датчиков, замков и сигнализаций. Заказал vps. Вот думаю, нарно через MQTT буду слать и принимать.

сим800 уже сам является гпс модулем одноврнменно.. только точность меньше.

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

n.osennij
Offline
Зарегистрирован: 10.08.2016

Short Circuit пишет:

сим800 уже сам является гпс модулем одноврнменно.. только точность меньше.

Вы пробовали определять координаты с помощью sim800L? Неужели такой большой разброс?

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

да разброс. от 200-300-500-800 метров в городе до 0,5-1-2-3-5-15-20 км за городом. как повезет.

romster
Offline
Зарегистрирован: 15.04.2013

AGPS плюс\минус километр, а то и более в городе, координаты по сигналам с вышек хз даже кому может понадобиться такое ориентирование на местности, полноценный gps модуль стоит ~5ОО-6ОО рэ вроде, зато точность в метрах, опять же под определенные задачи.

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

гпс не может сразу после вкл пит найти коорд.. не может в гараже.. под капотом и т.д..  не все так просто.

dioxin
Offline
Зарегистрирован: 02.11.2016

Согласен. Если особая точность не нужна, то можно и по координатам вышек. Качаем базы, кидаем на сервер и пишем управляющие программы.

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

нафига качаем базы ??????  отправляем ТРИ!! ат команды и в ответ получаем координаты. ничего качать не нужно.

гпс модуль стоит дороже гсм модуля.

sinner82
Offline
Зарегистрирован: 12.01.2017

Да, сегодня попробовал: в сетапе настройки GPRS, а далее в основной проге три команды, и сообщение с координатами в мониторе) Правда в моём случае погрешность оказалась больше километра.... 

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

DenBak
Offline
Зарегистрирован: 30.01.2017

Доброго дня всем!

Напишу про первый опыт с sim800l, может кому то будет полезным. Подключал sim800l через DC-DC преобразователь на 3а, выставлял напряжение 4в. В качестве блока питания использовал китайский с USB выходами, заявленный ток 2,1а. Использовал нанку как мост UART-USB и мучил модуль через терминальную программу с компа АТ командами.

С первого раза модуль отказался искать сеть. Причем с разными SIM картами пробовал. При наличии сигнала сети в AT+CSQ, на команду AT+CREG? отвечал 0,0 - типа не зарегистрирован и сеть не ищет.

Предположил, что не видит SIM карту. Прозвонка ножек держателя SIM выявила короткое замыкание между первой и второй ногой, причем похоже, где то под самим держателем припой попал. Пришлось отпаивать держатель и припаивать заново. После этого проблема ушла - модуль стал стабильно регистрироваться в сети. Причем у меня он регистрируется как при питании от блока питания, так и от USB. Хотя при USB питании процесс регистрации в сети идет дольше.

Резюме - если не регистрируется в сети имеет смысл проверить пайку держателя. Ножки не должны иметь контакт друг с другом. Предпоследняя ножка держателя не припаяна - это нормально.

Есть вопрос по допустимым напряжениям на TX RX модуля. В доках прочитал, что там вообще меньше 3в максимальное напряжение высокого уровня и типо для подключения к 5в модулю нужно согласователь уровней городить. Китайцы в Али вроде пишут, что напрямую можно подключать... Нужно уровни согласовывать или нет? Кто как делает?

obuhanoe
Offline
Зарегистрирован: 18.05.2016

Добрый день.

Возник вопрос по контролю состояния sim800l и перезагрузки модуля. 

Использую AT команды, связка Мега2560 и Sim800l. Хотелось бы контролировать состояние sim800l и если он завис(нет ответа и т.д.) можно было перезагрузить Sim800l. 

Возможно такое организовать?

Спасибо

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

да, возможно.

obuhanoe
Offline
Зарегистрирован: 18.05.2016

Short Circuit пишет:

да, возможно.

1. Я нашел одну команду контроля статуса - AT+CPAS, она подойдет для этого или нужно другие использовать?

2. Каким образом нужно соединить SIM800l с мегой2560 чтобы подать команду на перезагрузку и какую команду подать для этого?

Спасибо. 

 

obuhanoe
Offline
Зарегистрирован: 18.05.2016

Short Circuit - А можете подсказать как это реализовать?

Спасибо

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

obuhanoe пишет:

Добрый день.

Возник вопрос по контролю состояния sim800l и перезагрузки модуля. 

Использую AT команды, связка Мега2560 и Sim800l. Хотелось бы контролировать состояние sim800l и если он завис(нет ответа и т.д.) можно было перезагрузить Sim800l. 

Возможно такое организовать?

Спасибо

Рабочий урезаный код моей проги, работает у меня уже более года)

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

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

В данном примере нет работы с памятью.


#include <SoftwareSerial.h>
SoftwareSerial gsm(2, 3); // 2-txd, 3-rxo
#define led 13                 // светодиод

String NBoss = "79817425566";

int i = 0;
int Automatic = 0;
int StartGSM = 0;

// Переменные для чтения смс
String currStr = "";
String dataSmsN = "";
int flag1 = 0;
int flag2 = 0;
String currStrN = "";
char currSymb = 0;
String dataSms = "";
String dataBalance = "";
//String dataBalanceNumber = "";
String dataBalanceTemp = "";
String val = "";
int ch = 0;
char data = 0;

// Переменные для обработки смс +CSQ
int intNumberLevelFirst = 0;
int intNumberLevelSecond = 0;
int IntSignalLevel = 0;
int FlagSignal = 0;

int countLed = 0;
long counter = 0;
long timerForSignalGSM = 1000000;
int timerSearchGSM = 20;// таймер для регистрации сети GSm 20*2000=40 сек

int tempBalans = 0; // переменная, хранящая метку о запросе баланса
int tempZaprosBalansa = 0; // переменная, хранящая метку о запросе каждый день баланса

int SendSmsDeviceOn = 0;

void setup() {
  // Мигание светодиода на плате, говорит о работоспособности системы
  pinMode(led, OUTPUT); digitalWrite(led, LOW);

  // Читаем из памяти данные о состоянии системы
  Automatic = 1;//EEPROM.read(0); // Убрал для примера

  
  // делаем задержку на поиск сотовой сети
  for (i=0; i<=timerSearchGSM; i++){
    if (Automatic == 1){digitalWrite(led, HIGH);delay(250);}
    if (Automatic == 1){digitalWrite(led, LOW);delay(250);}
  }
}

void loop() {
  // Запускаем GSM
  if (StartGSM == 0){
    gsm.begin(9600);
    gsm.write("AT+CMGF=1\r"); // устанавливает текстовый режим смс-сообщения
    delay(300);
  }
  if (StartGSM == 1){
    gsm.write("AT+IFC=1, 1\r"); //устанавливает программный контроль потоком передачи данных
    delay(300);
  }
  if (StartGSM == 2){
    gsm.write("AT+CPBS=\"SM\"\r");//открывает доступ к данным телефонной книги SIM-карты
    delay(300);
  }
  if (StartGSM == 3){
    gsm.write("AT+CNMI=1,2,2,1,0\r");// включает оповещение о новых сообщениях, новые сообщения 
    delay(500);
  }
  if (StartGSM == 4){
    gsm.write("AT+GSMBUSY=1\r\n"); // запрет всех входящих звонков.
    delay(300);
  }
  if (StartGSM == 5){
    gsm.write("AT+CMGDA=DEL ALL\r\n"); // команда удалит все сообщения
    delay(500);
  }
  if (FlagSignal == 0 && StartGSM == 6){
    gsm.println("AT+CSQ");// Проверяем уровень сигнала
    delay(800);
  }

  // Работоспособность системы
  countLed++;
  if (countLed >= 500){
      digitalWrite(led, HIGH);
    }
    if (countLed >= 1000){
      digitalWrite(led, LOW);
      countLed = 0;
    }

// Проверяем включено ли было устройство, если система на охране или снята с охраны и сеть есть
  if (Automatic <=1 && SendSmsDeviceOn == 1 && FlagSignal == 1 && StartGSM == 6){
    smsSendAlarm("Hi, Device on!");
    SendSmsDeviceOn = 0;
  }

  
    // Проверка уровня сигнала во время работы системы каждые 20сек(400000)
    // Смысл этой процедуры: проверка по таймеру и если уровень сигнала нормальный и вроде бы сиситема работает нормально,
    // делаем проверку уровня сигнала для проверки работоспособности системы, если сигнала нет, смотрим код, где все начинается заново
    
    counter++;
    if (counter >= timerForSignalGSM && FlagSignal == 1 && StartGSM == 6){
      gsm.println("AT+CSQ");
      delay(300);
      // Обнуляем счетчик
      counter = 0;
    }

//*********************
    if (gsm.available()) {          //есть данные от GSM модуля
    
    currStr = "";                      //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
    currStrN = "";
    dataBalanceTemp = "";
    dataSms = "";
    val = "";
    flag1 = 0;
    flag2 = 0;
    while (gsm.available()) {      //сохраняем входную строку в переменную val
      ch = gsm.read();  //int
      val += char(ch);      // String
      data = ch;      // char = int
      if ('\r' == data) {
        currStr = "";
      } else if ('\n' != data) {
          currStr += String(data);
          dataSms = currStr;
        }
        //+CMT: "+79819998877","","16/04/18,20:25:08+12"
      if (data == '+' && flag1 == 0){flag1 = 1;}
      if (data == 'C' && flag1 == 1){flag1 = 2;}
      if (data == 'M' && flag1 == 2){flag1 = 3;}
      if (data == 'T' && flag1 == 3){flag1 = 4;}
      if (data == '+' && flag1 == 4){currStrN = "";flag1 = 5;}
      if (data != '"' && flag1 == 5){currStrN += String(data); dataSmsN = currStrN;}
      if (data == '"' && flag1 == 5){flag1 = 6;}
      
      //+CUSD: 0, "Balance:117,27r ", 15
      if (data == 'U' && flag1 == 2){flag2 = 3;}
      if (data == 'S' && flag2 == 3){flag2 = 4;}
      if (data == 'D' && flag2 == 4){flag2 = 5;}
      if (data == ':' && flag2 == 5){flag2 = 6;}
      if (data == '"' && flag2 == 6){dataBalanceTemp = ""; flag2 = 7; goto c;}
      if (data != '"' && flag2 == 7){dataBalanceTemp += String(data); dataBalance = dataBalanceTemp;}
      if (data == '"' && flag2 == 7){flag2 = 8;}
//      if (data == ':' && flag2 == 7){dataBalanceTemp = ""; flag2 = 8; goto c;}
//      if (data != ':' && flag2 == 8){dataBalanceTemp += String(data); dataBalanceNumber = dataBalanceTemp; flag2 = 9;}
      
    }
    
// Смотрим данные полученные //режим кодировки СМС - обычный (для англ.)
    if (val.indexOf("+CMGF") > -1){
      if (dataSms.indexOf("OK") > -1) {
        StartGSM = 1;
      }
    }
// Смотрим данные полученные //устанавливает программный контроль потоком передачи данных
    if (val.indexOf("+IFC") > -1){
      if (dataSms.indexOf("OK") > -1) {
        StartGSM = 2;
      }
    }
// Смотрим данные полученные //открывает доступ к данным телефонной книги SIM-карты
    if (val.indexOf("+CPBS") > -1){
      if (dataSms.indexOf("OK") > -1) {
        StartGSM = 3;
      }
    }
// Смотрим данные полученные //включает оповещение о новых сообщениях, новые сообщения
    if (val.indexOf("+CNMI") > -1){
      if (dataSms.indexOf("OK") > -1) {
        StartGSM = 4;
      }
    }
// Смотрим данные полученные //запрет всех входящих звонков.
    if (val.indexOf("+GSMBUSY") > -1){
      if (dataSms.indexOf("OK") > -1) {
        StartGSM = 5;
      }
    }
// Смотрим данные полученные //команда удалит все сообщения
    if (val.indexOf("+CMGDA") > -1){
      if (dataSms.indexOf("OK") > -1) {
        StartGSM = 6;
      }
    }
// Смотрим данные полученные от модуля +CSQ: 22,0
    if (val.indexOf("+CSQ") > -1) {
      for (i=0; i<=20; i++){
        if (val[i] == 58) {
          intNumberLevelFirst = val[i+2]-48;
          if (val[i+3] == 44){ intNumberLevelSecond = 0;}
          if (val[i+3] != 44){ intNumberLevelSecond = val[i+3]-48;}
          if (val[i+3] == 44){IntSignalLevel = intNumberLevelFirst;}
          if (val[i+3] != 44){IntSignalLevel = (intNumberLevelFirst*10) + intNumberLevelSecond;}
        }
      }
      if (IntSignalLevel == 99 || IntSignalLevel == 0){
        for (i=0; i<=timerSearchGSM; i++){
          if (Automatic == 0){// можно что-то включить, например светодиод}
          delay(1000);
          if (Automatic == 0){// можно что-то выключить, например светодиод}
          delay(1000);
        }
        FlagSignal = 0; StartGSM = 0;
      }
      if (IntSignalLevel <=32 && IntSignalLevel !=0){
        FlagSignal = 1;
      }
    }
    
// Смотрим данные полученные от модуля пришло смс
    if (val.indexOf("+CMTI:") > -1) { // +CMTI: "SM",
      StartGSM = 0;
    }
    
// Смотрим данные полученные от модуля, Получили смс с балансом, теперь отсылаем 
    if (val.indexOf("+CUSD:") > -1) { 
      if (dataBalance != "" && tempBalans == 1) {
        smsSendAlarm("Hi, " + dataBalance);
        tempBalans = 0;
        dataBalance = "";
      }
      if (dataBalance[8]-48 >= 1 && dataBalance[9]-48 >= 0 && dataBalance[10]-48 >= 0){
        // ничего не делаем
      }else if (tempZaprosBalansa == 1){
        smsSendAlarm("Hi, balance < 100r, vash balance = " + dataBalance);
        tempZaprosBalansa = 0;
        dataBalance = "";
      }
    }






//----------------------- определение факта приема СМС и сравнение номера(ов) с заданным(и)
    if (val.indexOf("+CMT") > -1) {
// Здесь обрабатываем смс
    }//+cmt
    
  }
}// коней if gsm
}
}


//процедура отправки СМС
void smsSendAlarm(String text) {
//    ReadNBoss();                               //Читаем номер из памяти
    gsm.println("AT+CMGS=\"" + NBoss + "\"");  //Отправляем на GSM комманду отправка смс-номер
//    NBoss = "";                                //Очищаем перемунную
    delay(300);                                //Делаем задержку на передачу комманды
    gsm.print(text);                           //Отправляем на GSM комманду отправка смс-текст
    text = "";                                 //Очищаем перемунную
    delay(500);                                //Делаем задержку на передачу комманды
    gsm.print((char)26);                       //Отправляем на GSM комманду отправка смс!
    delay(5000);                               //Делаем задержку отправку смс
    
}

 

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

как то замороченно   с этими - if (StartGSM == ....

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Short Circuit пишет:

как то замороченно   с этими - if (StartGSM == ....

зато работает стабильно

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

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

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

проверять сеть каждые 40 сек - поверьте, это очень часто, достаточно раз в 2-3 мин.

нет сети или нет ответа - перегружаем модуль..

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

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Short Circuit пишет:

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

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

проверять сеть каждые 40 сек - поверьте, это очень часто, достаточно раз в 2-3 мин.

нет сети или нет ответа - перегружаем модуль..

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

Состав системы:
- 2 датчика температуры-влажности(один устанавливается на улице, второй в доме)
- 2 датчика движения(устанавливаются в доме)
- 1 датчик на открытие входной двери
- сирена с маяком
- Бесперебойный бокс(при отсутствии питание ваша система всегда работает)

Управление производится посредством телефона.
Возможности:
- Постановка и снятие с охраны.
- Запрос баланса (Авто режим, если на счете м.100 руб, происходит оповещение)

- Запрос состояния системы(Состояние контроля дома, напряжение 220В, напряжение аккумулятора, температура и влажность, сигнал сотовой сети)
- Квитирование тревог
- При пропадании напряжения 220В, придет смс
- При возобновлении напряжения 220В, придет смс
- При разряде аккумулятора, придет смс
- При срабатывании по датчикам, придет смс, включится сирена
- При открывании бокса, придет смс, включится сирена

obuhanoe
Offline
Зарегистрирован: 18.05.2016

Short Circuit пишет:

 40 сек - поверьте, это очень часто, достаточно раз в 2-3 мин.

командами AT+CPAS и AT+CSQ?

А какой командой перезагрузить модуль?

obuhanoe
Offline
Зарегистрирован: 18.05.2016

Short Circuit пишет:

- При пропадании напряжения 220В, придет смс

- При возобновлении напряжения 220В, придет смс

- При разряде аккумулятора, придет смс
 

Как это у Вас реализовано в коде и на физическом уровне?

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

obuhanoe пишет:

Short Circuit пишет:

 40 сек - поверьте, это очень часто, достаточно раз в 2-3 мин.

командами AT+CPAS и AT+CSQ?

А какой командой перезагрузить модуль?

если модуль реально зависает, то это проблема модуля

Его можно только по питанию передернуть

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

stambylov пишет:

obuhanoe пишет:

Short Circuit пишет:

 40 сек - поверьте, это очень часто, достаточно раз в 2-3 мин.

командами AT+CPAS и AT+CSQ?

А какой командой перезагрузить модуль?

если модуль реально зависает, то это проблема модуля

Его можно только по питанию передернуть

 

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

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

так что утверждение что это проблемы модуля - неверное совсем..

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

obuhanoe пишет:

Short Circuit пишет:

- При пропадании напряжения 220В, придет смс

- При возобновлении напряжения 220В, придет смс

- При разряде аккумулятора, придет смс
 

Как это у Вас реализовано в коде и на физическом уровне?

При пропадании напряжения 220В, придет смс

вот кусок кода из моей проги:

// Проверяем состояние напряжения 220
  counterVoltage220++;
  if (counterVoltage220 >= timerFor220V && Automatic <= 1){
    // если нет 220 и состояние220 = 0 и есть сигнал и все настройки gsm успешны
    if (analogRead(Power220) <20 && state220 == 0 && FlagSignal == 1 && StartGSM == 6){
      state220 = 1;
      smsSendAlarm("Alarm! Voltage 220 No");
    }
    //если нет 220 то гасим реле все
    if (analogRead(Power220) <20 && FlagSignal == 1 && StartGSM == 6){
      digitalWrite(rele1,!LOW);
      digitalWrite(rele2,!LOW);
    }
    //
    if (analogRead(Power220) >20 && state220 == 1 && FlagSignal == 1 && StartGSM == 6){
      state220 = 0;
      if (Automatic == 1){
        // если питание появилось и флаги тревог не активны, то выполняем заново постановку на охрану
        digitalWrite(rele2,!HIGH);
        if (ACh01 == 0 && ACh02 == 0 && ACh03 == 0){
          AutoEnable = 0;
        }
        // если появилось питание и флаги тревог активны, то вкл. реле
        if (ACh01 == 1 || ACh02 == 1 || ACh03 == 1){
          digitalWrite(rele1,!HIGH);
        }
      }
      smsSendAlarm("Voltage 220 Norm");
    }
    // Обнуляем счетчик
    counterVoltage220 = 0;
  }

При разряде аккумулятора, придет смс

// считывание аналогового значения напряжения 12В
  counterVoltage12++;
  if (counterVoltage12 >= timerFor12V){
    ReadAnalogPin = analogRead(TempVoltage12V);
    vout = (ReadAnalogPin * 5.0) / 1024.0;
    vin = vout / (R2/(R1+R2)); 
    if (vin<6.0) {
      vin=0.0;// обнуляем нежелательное значение
    }
    if (vin <= 9 && Kvitir12V == 0 && FlagSignal == 1 && StartGSM == 6){
      Kvitir12V = 1;
      smsSendAlarm("Alarm! Voltage battery < 9V");
      stateSirena = 2;
    }
    if (vin >= 10 && Kvitir12V == 1 && FlagSignal == 1 && StartGSM == 6){
      Kvitir12V = 0;
      smsSendAlarm("Voltage battery > 10V");
      if (Automatic == 1){digitalWrite(rele2,!HIGH);}
      stateSirena = 0;
    }
    // Обнуляем счетчик
    counterVoltage12 = 0;
  }

У меня Бокс Бесперебойного питания, там есть индикатор(LED) о наличии питания, к нему припаеваемся, и дальше собираем схему из резисторов, ссылка тут

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

Short Circuit пишет:

stambylov пишет:

obuhanoe пишет:

Short Circuit пишет:

 40 сек - поверьте, это очень часто, достаточно раз в 2-3 мин.

командами AT+CPAS и AT+CSQ?

А какой командой перезагрузить модуль?

если модуль реально зависает, то это проблема модуля

Его можно только по питанию передернуть

 

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

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

так что утверждение что это проблемы модуля - неверное совсем..

для всего этого реализованы 6 циклов, пока прога не пройдет все, система не будет работать, как только проходит последний цикл, все отрабатываем код

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

При замере напряжения! по ссылке в посте 432

Помните, что напряжение выше 55 В может вывести плату Arduino из строя!

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

фотки при сборке системы в бокс тут

тестил питание для gsm от 2-х разных плат питания, старые на фото имеются, но не используются

obuhanoe
Offline
Зарегистрирован: 18.05.2016

Short Circuit пишет:

stambylov пишет:

obuhanoe пишет:

Short Circuit пишет:

 40 сек - поверьте, это очень часто, достаточно раз в 2-3 мин.

командами AT+CPAS и AT+CSQ?

А какой командой перезагрузить модуль?

если модуль реально зависает, то это проблема модуля

Его можно только по питанию передернуть

 

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

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

так что утверждение что это проблемы модуля - неверное совсем..

 и нужно заново  "войти" в сеть, а для этого перегрузить модуль.

А как перегрузить модуль, можете рассказать?

Спасибо

obuhanoe
Offline
Зарегистрирован: 18.05.2016

stambylov -спасибо, буду изучать.

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

obuhanoe пишет:
заново  "войти" в сеть, а для этого перегрузить модуль.

А как перегрузить модуль, можете рассказать?

Спасибо

 

по хорошему - ставите силовой ключ на питание gsm  модуля. и ардуиной управляете этим ключом снимая питание на несколько секунд.

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

А вот этого нету, не делают ни в одном заводском шилде.

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

stambylov пишет:

для всего этого реализованы 6 циклов, пока прога не пройдет все, система не будет работать, как только проходит последний цикл, все отрабатываем код

 

это я вижу, что вы на 6 циклов разделили, то, что можно в одном исполняемом куске сделать.

Но, например гсм модуль через сутки   потерял сеть и сам не находит? Что тогда?

я не заметил у вас в коде команду "AT+CPOWD=1", значит вы полагаетесь на авось пронесет?

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

obuhanoe
Offline
Зарегистрирован: 18.05.2016

Short Circuit пишет:

obuhanoe пишет:
заново  "войти" в сеть, а для этого перегрузить модуль.

А как перегрузить модуль, можете рассказать?

Спасибо

 

по хорошему - ставите силовой ключ на питание gsm  модуля. и ардуиной управляете этим ключом снимая питание на несколько секунд.

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

А вот этого нету, не делают ни в одном заводском шилде.

Таким образом придется его выключать (если он конечно будет отзываться на команды АТ) командой AT+CPOWD=1, а как его после этого включить?

Спасибо

sinner82
Offline
Зарегистрирован: 12.01.2017

Именно про это я и пытался спросить в посте 417.   Если я правильно понял мануал модуля, то в случае отказа АТ команд ( и соответственно невозможность перегрузить модуль командой AT+CPOWD) рекомендуют пользоваться резетом на модуле, т.е. подавать на резет минусовой импульс, из чего напрашивается вывод, что резет эквивалентен сбросу питания. Вопрос в том, как это проверить, т.к. лично у меня модули не зависали ни разу.

dioxin
Offline
Зарегистрирован: 02.11.2016

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

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

dioxin пишет:

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

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

 

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

dioxin пишет:

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

можете проверять уровень сигнала, если его нет (делаем цикл, т.е. делаем 3 попытки регистрации в состовой сети), если не регистрируется gsm, то вкл. реле на 3 сек(разомкнуть питание на GSM), а дальше проходим регистрацию в сети и все остальные АТ команды для работы

dioxin
Offline
Зарегистрирован: 02.11.2016

Ну вы меня поняли... А какую задежку ставить легко подобрать.. Практика рулит! Дерзаем!

Проверяем в цикле есть ли сигнал, если нет даем команду сервоприводу на шевеление антенны туда-сюда, проверяем сигнал, если опять нет, шевелим контакты и тем-же сервоприводом пинаем себя, затем выключаем-включаем реле ;)

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

sinner82
Offline
Зарегистрирован: 12.01.2017

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

 

dioxin
Offline
Зарегистрирован: 02.11.2016

Да нет проблем. Сделайте аварийную ситуацию искусственно. Понизьте питание, экранируйте антенну, соберите простенький подавитель сети в конце концов. Если уж испытывать такую вещь как сигнализация для дома, то тут нельзя пренебрегать ничем. Или вы думаете воры тупее вас?

vsvleo
Offline
Зарегистрирован: 29.09.2016

по поводу аппаратного ресета, мне помагает соединение вывода RST с землей.

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

кстати, вот натолкнулся на подтверждение своих слов, для тех, кто еще сомневается:

http://lazysmart.ru/distantsionnoe-upravlenie/opy-t-raboty-s-gsm-modemom-sim900/

obuhanoe
Offline
Зарегистрирован: 18.05.2016

Добрый день, никто не сталкивался при запросе NTP времени (пока юзал www.ntp-servers.net) командой AT+CNTP("AT+CNTP=\"88.147.254.227\",12") - иногда(редко) время синхронизируется неверно, например +4 или +5 часов к моему. Причем синхронизируется через минуту и все нормально. С указанного сайта я использовал ip 1 яруса, перешел на ip 2 яруса - пока не замечал глюков.

P.S. - на 2 ярусе тоже была обнаружена ошибка синхронизации - 07.02.2017 20:50:11(время до синхронизации) |  08.02.2017 01:49:47 (время после синхронизации)

Ни у кого нет мыслей почему так происходит?

Потестирую на www.time.nist.gov - отпишусь позже.

Спасибо