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. 

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

Спасибо

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

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

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

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

001#include <SoftwareSerial.h>
002SoftwareSerial gsm(2, 3); // 2-txd, 3-rxo
003#define led 13                 // светодиод
004 
005String NBoss = "79817425566";
006 
007int i = 0;
008int Automatic = 0;
009int StartGSM = 0;
010 
011// Переменные для чтения смс
012String currStr = "";
013String dataSmsN = "";
014int flag1 = 0;
015int flag2 = 0;
016String currStrN = "";
017char currSymb = 0;
018String dataSms = "";
019String dataBalance = "";
020//String dataBalanceNumber = "";
021String dataBalanceTemp = "";
022String val = "";
023int ch = 0;
024char data = 0;
025 
026// Переменные для обработки смс +CSQ
027int intNumberLevelFirst = 0;
028int intNumberLevelSecond = 0;
029int IntSignalLevel = 0;
030int FlagSignal = 0;
031 
032int countLed = 0;
033long counter = 0;
034long timerForSignalGSM = 1000000;
035int timerSearchGSM = 20;// таймер для регистрации сети GSm 20*2000=40 сек
036 
037int tempBalans = 0; // переменная, хранящая метку о запросе баланса
038int tempZaprosBalansa = 0; // переменная, хранящая метку о запросе каждый день баланса
039 
040int SendSmsDeviceOn = 0;
041 
042void setup() {
043  // Мигание светодиода на плате, говорит о работоспособности системы
044  pinMode(led, OUTPUT); digitalWrite(led, LOW);
045 
046  // Читаем из памяти данные о состоянии системы
047  Automatic = 1;//EEPROM.read(0); // Убрал для примера
048 
049   
050  // делаем задержку на поиск сотовой сети
051  for (i=0; i<=timerSearchGSM; i++){
052    if (Automatic == 1){digitalWrite(led, HIGH);delay(250);}
053    if (Automatic == 1){digitalWrite(led, LOW);delay(250);}
054  }
055}
056 
057void loop() {
058  // Запускаем GSM
059  if (StartGSM == 0){
060    gsm.begin(9600);
061    gsm.write("AT+CMGF=1\r"); // устанавливает текстовый режим смс-сообщения
062    delay(300);
063  }
064  if (StartGSM == 1){
065    gsm.write("AT+IFC=1, 1\r"); //устанавливает программный контроль потоком передачи данных
066    delay(300);
067  }
068  if (StartGSM == 2){
069    gsm.write("AT+CPBS=\"SM\"\r");//открывает доступ к данным телефонной книги SIM-карты
070    delay(300);
071  }
072  if (StartGSM == 3){
073    gsm.write("AT+CNMI=1,2,2,1,0\r");// включает оповещение о новых сообщениях, новые сообщения
074    delay(500);
075  }
076  if (StartGSM == 4){
077    gsm.write("AT+GSMBUSY=1\r\n"); // запрет всех входящих звонков.
078    delay(300);
079  }
080  if (StartGSM == 5){
081    gsm.write("AT+CMGDA=DEL ALL\r\n"); // команда удалит все сообщения
082    delay(500);
083  }
084  if (FlagSignal == 0 && StartGSM == 6){
085    gsm.println("AT+CSQ");// Проверяем уровень сигнала
086    delay(800);
087  }
088 
089  // Работоспособность системы
090  countLed++;
091  if (countLed >= 500){
092      digitalWrite(led, HIGH);
093    }
094    if (countLed >= 1000){
095      digitalWrite(led, LOW);
096      countLed = 0;
097    }
098 
099// Проверяем включено ли было устройство, если система на охране или снята с охраны и сеть есть
100  if (Automatic <=1 && SendSmsDeviceOn == 1 && FlagSignal == 1 && StartGSM == 6){
101    smsSendAlarm("Hi, Device on!");
102    SendSmsDeviceOn = 0;
103  }
104 
105   
106    // Проверка уровня сигнала во время работы системы каждые 20сек(400000)
107    // Смысл этой процедуры: проверка по таймеру и если уровень сигнала нормальный и вроде бы сиситема работает нормально,
108    // делаем проверку уровня сигнала для проверки работоспособности системы, если сигнала нет, смотрим код, где все начинается заново
109     
110    counter++;
111    if (counter >= timerForSignalGSM && FlagSignal == 1 && StartGSM == 6){
112      gsm.println("AT+CSQ");
113      delay(300);
114      // Обнуляем счетчик
115      counter = 0;
116    }
117 
118//*********************
119    if (gsm.available()) {          //есть данные от GSM модуля
120     
121    currStr = "";                      //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
122    currStrN = "";
123    dataBalanceTemp = "";
124    dataSms = "";
125    val = "";
126    flag1 = 0;
127    flag2 = 0;
128    while (gsm.available()) {      //сохраняем входную строку в переменную val
129      ch = gsm.read();  //int
130      val += char(ch);      // String
131      data = ch;      // char = int
132      if ('\r' == data) {
133        currStr = "";
134      } else if ('\n' != data) {
135          currStr += String(data);
136          dataSms = currStr;
137        }
138        //+CMT: "+79819998877","","16/04/18,20:25:08+12"
139      if (data == '+' && flag1 == 0){flag1 = 1;}
140      if (data == 'C' && flag1 == 1){flag1 = 2;}
141      if (data == 'M' && flag1 == 2){flag1 = 3;}
142      if (data == 'T' && flag1 == 3){flag1 = 4;}
143      if (data == '+' && flag1 == 4){currStrN = "";flag1 = 5;}
144      if (data != '"' && flag1 == 5){currStrN += String(data); dataSmsN = currStrN;}
145      if (data == '"' && flag1 == 5){flag1 = 6;}
146       
147      //+CUSD: 0, "Balance:117,27r ", 15
148      if (data == 'U' && flag1 == 2){flag2 = 3;}
149      if (data == 'S' && flag2 == 3){flag2 = 4;}
150      if (data == 'D' && flag2 == 4){flag2 = 5;}
151      if (data == ':' && flag2 == 5){flag2 = 6;}
152      if (data == '"' && flag2 == 6){dataBalanceTemp = ""; flag2 = 7; goto c;}
153      if (data != '"' && flag2 == 7){dataBalanceTemp += String(data); dataBalance = dataBalanceTemp;}
154      if (data == '"' && flag2 == 7){flag2 = 8;}
155//      if (data == ':' && flag2 == 7){dataBalanceTemp = ""; flag2 = 8; goto c;}
156//      if (data != ':' && flag2 == 8){dataBalanceTemp += String(data); dataBalanceNumber = dataBalanceTemp; flag2 = 9;}
157       
158    }
159     
160// Смотрим данные полученные //режим кодировки СМС - обычный (для англ.)
161    if (val.indexOf("+CMGF") > -1){
162      if (dataSms.indexOf("OK") > -1) {
163        StartGSM = 1;
164      }
165    }
166// Смотрим данные полученные //устанавливает программный контроль потоком передачи данных
167    if (val.indexOf("+IFC") > -1){
168      if (dataSms.indexOf("OK") > -1) {
169        StartGSM = 2;
170      }
171    }
172// Смотрим данные полученные //открывает доступ к данным телефонной книги SIM-карты
173    if (val.indexOf("+CPBS") > -1){
174      if (dataSms.indexOf("OK") > -1) {
175        StartGSM = 3;
176      }
177    }
178// Смотрим данные полученные //включает оповещение о новых сообщениях, новые сообщения
179    if (val.indexOf("+CNMI") > -1){
180      if (dataSms.indexOf("OK") > -1) {
181        StartGSM = 4;
182      }
183    }
184// Смотрим данные полученные //запрет всех входящих звонков.
185    if (val.indexOf("+GSMBUSY") > -1){
186      if (dataSms.indexOf("OK") > -1) {
187        StartGSM = 5;
188      }
189    }
190// Смотрим данные полученные //команда удалит все сообщения
191    if (val.indexOf("+CMGDA") > -1){
192      if (dataSms.indexOf("OK") > -1) {
193        StartGSM = 6;
194      }
195    }
196// Смотрим данные полученные от модуля +CSQ: 22,0
197    if (val.indexOf("+CSQ") > -1) {
198      for (i=0; i<=20; i++){
199        if (val[i] == 58) {
200          intNumberLevelFirst = val[i+2]-48;
201          if (val[i+3] == 44){ intNumberLevelSecond = 0;}
202          if (val[i+3] != 44){ intNumberLevelSecond = val[i+3]-48;}
203          if (val[i+3] == 44){IntSignalLevel = intNumberLevelFirst;}
204          if (val[i+3] != 44){IntSignalLevel = (intNumberLevelFirst*10) + intNumberLevelSecond;}
205        }
206      }
207      if (IntSignalLevel == 99 || IntSignalLevel == 0){
208        for (i=0; i<=timerSearchGSM; i++){
209          if (Automatic == 0){// можно что-то включить, например светодиод}
210          delay(1000);
211          if (Automatic == 0){// можно что-то выключить, например светодиод}
212          delay(1000);
213        }
214        FlagSignal = 0; StartGSM = 0;
215      }
216      if (IntSignalLevel <=32 && IntSignalLevel !=0){
217        FlagSignal = 1;
218      }
219    }
220     
221// Смотрим данные полученные от модуля пришло смс
222    if (val.indexOf("+CMTI:") > -1) { // +CMTI: "SM",
223      StartGSM = 0;
224    }
225     
226// Смотрим данные полученные от модуля, Получили смс с балансом, теперь отсылаем
227    if (val.indexOf("+CUSD:") > -1) {
228      if (dataBalance != "" && tempBalans == 1) {
229        smsSendAlarm("Hi, " + dataBalance);
230        tempBalans = 0;
231        dataBalance = "";
232      }
233      if (dataBalance[8]-48 >= 1 && dataBalance[9]-48 >= 0 && dataBalance[10]-48 >= 0){
234        // ничего не делаем
235      }else if (tempZaprosBalansa == 1){
236        smsSendAlarm("Hi, balance < 100r, vash balance = " + dataBalance);
237        tempZaprosBalansa = 0;
238        dataBalance = "";
239      }
240    }
241 
242 
243 
244 
245 
246 
247//----------------------- определение факта приема СМС и сравнение номера(ов) с заданным(и)
248    if (val.indexOf("+CMT") > -1) {
249// Здесь обрабатываем смс
250    }//+cmt
251     
252  }
253}// коней if gsm
254}
255}
256 
257 
258//процедура отправки СМС
259void smsSendAlarm(String text) {
260//    ReadNBoss();                               //Читаем номер из памяти
261    gsm.println("AT+CMGS=\"" + NBoss + "\"");  //Отправляем на GSM комманду отправка смс-номер
262//    NBoss = "";                                //Очищаем перемунную
263    delay(300);                                //Делаем задержку на передачу комманды
264    gsm.print(text);                           //Отправляем на GSM комманду отправка смс-текст
265    text = "";                                 //Очищаем перемунную
266    delay(500);                                //Делаем задержку на передачу комманды
267    gsm.print((char)26);                       //Отправляем на GSM комманду отправка смс!
268    delay(5000);                               //Делаем задержку отправку смс
269     
270}

 

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В, придет смс

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

01// Проверяем состояние напряжения 220
02  counterVoltage220++;
03  if (counterVoltage220 >= timerFor220V && Automatic <= 1){
04    // если нет 220 и состояние220 = 0 и есть сигнал и все настройки gsm успешны
05    if (analogRead(Power220) <20 && state220 == 0 && FlagSignal == 1 && StartGSM == 6){
06      state220 = 1;
07      smsSendAlarm("Alarm! Voltage 220 No");
08    }
09    //если нет 220 то гасим реле все
10    if (analogRead(Power220) <20 && FlagSignal == 1 && StartGSM == 6){
11      digitalWrite(rele1,!LOW);
12      digitalWrite(rele2,!LOW);
13    }
14    //
15    if (analogRead(Power220) >20 && state220 == 1 && FlagSignal == 1 && StartGSM == 6){
16      state220 = 0;
17      if (Automatic == 1){
18        // если питание появилось и флаги тревог не активны, то выполняем заново постановку на охрану
19        digitalWrite(rele2,!HIGH);
20        if (ACh01 == 0 && ACh02 == 0 && ACh03 == 0){
21          AutoEnable = 0;
22        }
23        // если появилось питание и флаги тревог активны, то вкл. реле
24        if (ACh01 == 1 || ACh02 == 1 || ACh03 == 1){
25          digitalWrite(rele1,!HIGH);
26        }
27      }
28      smsSendAlarm("Voltage 220 Norm");
29    }
30    // Обнуляем счетчик
31    counterVoltage220 = 0;
32  }

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

01// считывание аналогового значения напряжения 12В
02  counterVoltage12++;
03  if (counterVoltage12 >= timerFor12V){
04    ReadAnalogPin = analogRead(TempVoltage12V);
05    vout = (ReadAnalogPin * 5.0) / 1024.0;
06    vin = vout / (R2/(R1+R2));
07    if (vin<6.0) {
08      vin=0.0;// обнуляем нежелательное значение
09    }
10    if (vin <= 9 && Kvitir12V == 0 && FlagSignal == 1 && StartGSM == 6){
11      Kvitir12V = 1;
12      smsSendAlarm("Alarm! Voltage battery < 9V");
13      stateSirena = 2;
14    }
15    if (vin >= 10 && Kvitir12V == 1 && FlagSignal == 1 && StartGSM == 6){
16      Kvitir12V = 0;
17      smsSendAlarm("Voltage battery > 10V");
18      if (Automatic == 1){digitalWrite(rele2,!HIGH);}
19      stateSirena = 0;
20    }
21    // Обнуляем счетчик
22    counterVoltage12 = 0;
23  }

У меня Бокс Бесперебойного питания, там есть индикатор(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 - отпишусь позже.

Спасибо