SMS розетка (аналог SenseIt GS1\ МегаФон розетка) своими руками на Arduino

retrobaners
Offline
Зарегистрирован: 27.04.2015

Здраствуйте!

Возниклла мысль создать аналог смс розетки от мегафона. Подробнее об оригинале по ссылкам:

Видеообзор - https://www.youtube.com/watch?v=2Ezpt0GLU7o

Просто обзоры:

http://yamobi.ru/posts/testiruem_SMS-rozetku_nanotehnologii_otdyihayut.html

https://hi-tech.mail.ru/review/senseit_gs_1.html

или целая россыпь обзоров и отзывов:

https://www.google.com.ua/search?q=sms+%D1%80%D0%BE%D0%B7%D0%B5%D1%82%D0%BA%D0%B0+%D0%BC%D0%B5%D0%B3%D0%B0%D1%84%D0%BE%D0%BD&ie=utf-8&oe=utf-8&gws_rd=cr&ei=8sliVZu8NsWc7gbq_4DwDg

Так как в первую очередь ставится цель "минимум расхлодов", проект бюджетный. То сразу отказываемся от дорого GSM\GPRS Shild, а будем использовать более дешёвый модуль http://ru.aliexpress.com/item/GSM-GPRS-900-1800-MHz-Short-Message-Service-SMS-module-for-project-for-Arduino-remote-sensing/32285058497.html

Так как в нём используется модуль не SIM900 то сразу отказываемся от библиотеки SIM900, будем использовать SoftwareSerial (програмный серийный порт). После продолжительных поисков на этом форуме и просмотра его веток, я не нашёл похожей темы и\или устройства. Глобальный поиск привёл меня к страничке с описанием точно такого устройства как мне нужно, на радастях был переделан скетч (изменены номера портов) и залит... Увы устройство "с коробки" не заработало и мне пришлось брать учебник и садится по строчно разбирать код, вот тут то и возникли проблемы, я не понял всю логику работы этого скетча

Вот ссылка на страницу http://podrugomu.com/node/1456 И вот код с страницы:

//5.03.2013 12.48
 
#include <softwareserial.h>
#include <string.h>
 
SoftwareSerial mySerial(2, 3); // RX, TX
 
int count=0;     // counter for buffer array 
long timer = 0;
 
String currStr = "";
String rep = "";
// Переменная принимает значение True, если текущая строка является сообщением
boolean isStringMessage = false;
 
int power1 = 8;
int power2 = 9;
int power3 = 10;
int power4 = 11;
int power5 = 12;
 
 
void setup() {
   
   pinMode(power1, OUTPUT);
   pinMode(power2, OUTPUT); 
   pinMode(power3, OUTPUT);
   pinMode(power4, OUTPUT);
   pinMode(power5, OUTPUT);
 
    
   digitalWrite(power1, HIGH);
   digitalWrite(power2, HIGH);
   digitalWrite(power3, HIGH);
   digitalWrite(power4, HIGH);
   digitalWrite(power5, HIGH);
 
    
   powerUp();
    
   Serial.begin(19200); 
   mySerial.begin(19200); 
    
   
   //mySerial.println("AT+IPR=19200");
   //delay(500);
    
   Serial.println("Arduino START OK");
    
   mySerial.println("ATZ");
   delay(500);
   mySerial_read();
    
   mySerial.println("AT+CMGDA=\"DEL ALL\"");
   delay(500);
   mySerial_read();
    
   mySerial.println("AT+CMGF=1");    // устанавливаем текстовый режим SMS
   delay(500);
   mySerial_read();
 
   mySerial.println("AT+IFC=0,0");  //настройка SIM900 Serial bufer
   delay(500);
   mySerial_read();
    
   mySerial.println("AT+CPBS=\"SM\"");
   delay(500);
   mySerial_read();
    
   //mySerial.print("AT+CNMI=1,2,2,1,0");
   mySerial.println("AT+CNMI=1,2,0,0,0");
   delay(500);   
   mySerial_read();
    
    
   mySerial.print("AT+CMGL=");
   mySerial.print((char)34);
   mySerial.print("ALL");
   mySerial.print((char)34);
   mySerial.print((char)13);
   delay(300);
   mySerial_read();
    
       
}
 
void loop()
{
       
    if (timer < millis())
      { 
        timer = millis()+600000;
         
        delay(2000);
         
        pinMode(13, OUTPUT); 
        digitalWrite(13,HIGH);
        delay(500);
        digitalWrite(13,LOW);
                 
        mySerial.println("AT");
        delay(200);
         
        rep = (String)mySerial.read(); 
        //Serial.println(rep);
         
        if (rep == "65"){
            Serial.println("GPRS module is OK");
        }
        else
        {
            powerUp();
        }        
         
      }
       
    mySerial_read();
    Serial_read();
      
    if (Serial.available())
        Serial.println(mySerial.read());                      
 
    if (mySerial.available())
        return;
  
    char currSymb = mySerial.read();    
    if ('\r' == currSymb) {
        if (isStringMessage) {
 
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("1 on")) {
                digitalWrite(power1, HIGH);
                Serial.println("power 1 is ON");
            } else if (!currStr.compareTo("1 off")) {
                digitalWrite(power1, LOW);
            } else if (!currStr.compareTo("2 on")) {
                digitalWrite(power2, HIGH);
            } else if (!currStr.compareTo("2 off")) {
                digitalWrite(power2, LOW);
            } else if (!currStr.compareTo("3 on")) {
                digitalWrite(power3, HIGH);
            } else if (!currStr.compareTo("3 off")) {
                digitalWrite(power3, LOW);
            } else if (!currStr.compareTo("4 on")) {
                digitalWrite(power4, HIGH);
            } else if (!currStr.compareTo("4 off")) {
                digitalWrite(power4, LOW);
            } else if (!currStr.compareTo("5 on")) {
                digitalWrite(power5, HIGH);
            } else if (!currStr.compareTo("5 off")) {
                digitalWrite(power5, LOW);
            }
            isStringMessage = false;
             
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    } 
     
 
       
           
}
 
 
void send_sms(String sms_number,String sms_text){
      delay(1500);
      mySerial.print("AT+CMGS=");          
      mySerial.print((char)34);             
      mySerial.print((String)sms_number);         
      mySerial.print((char)13);      
      delay(1500);
      mySerial.println((String)sms_text);     
      delay(500);
      mySerial.print((char)26);             
      mySerial.print((char)13);
      delay(1000);
}
 
void dial(String number){
      delay(1000);
      mySerial.print("ATD"); 
      mySerial.println((String)number); 
      delay(500);
 
}
 
void powerUp()
{
 pinMode(6, OUTPUT); 
 digitalWrite(6,LOW);
 delay(1000);
 digitalWrite(6,HIGH);
 delay(2000);
 digitalWrite(6,LOW);
 delay(3000);
}
 
void powerDown()
{
 pinMode(6, OUTPUT); 
 digitalWrite(6,LOW);
 delay(1000);
 digitalWrite(6,HIGH);
 delay(2000);
 digitalWrite(6,LOW);
 delay(3000);
}
 
void mySerial_read()
{
  int i=0;
  char buffer[200];
 
  if(mySerial.available()){
     delay(100);
     while( mySerial.available() && i< 199) {
        buffer[i++] = mySerial.read();
     }
     buffer[i++]='\0';
  }
   
  if(i>0){  
 
    Serial.println(buffer);
     
  }
}
 
void Serial_read()
{
  int a=0;
  char buffer2[200];
 
  if(Serial.available()){
     delay(100);
     while( Serial.available() && a< 199) {
        buffer2[a++] = Serial.read();
     }
     buffer2[a++]='\0';
  }
   
  //if buffer full
  if(a>0){  
 
    mySerial.println(buffer2);
    
  }
}
 
void(* resetFunc) (void) = 0; // Reset MC function  - resetFunc(); //вызов
 
</string.h></softwareserial.h>

Далее по коду вопросы:

1. Почему начинается и заканчивается строками "//5.03.2013 12.48" и "</string.h></softwareserial.h>"

2. Зачем нужны функции "powerUp" "powerDown", 

3. Какие есть в этом скетче ошибки, почему он всё таки не работает, к сожалению по тексту скетча очень мало коментариев и не совсем понятна логика работы этого скетча, поэтому прошу знающих людей помочь мне разобраться, что-бы в итоге я смог дописать коментарии и исправить ошибки, что-бы желающие могли использовать готовый скетч как основу для разработки своей смс розетки. Например я бы ещё хотел добавить возможность занесение в EEPROM память номера для управления, например добавив кнопку "reset" при нажатии которой сбрасывается номер для управления в EEPROM, а потом с первой же смской этот номер заносится в EEPROM память и в дальнейшем отрабатываются команды только с номера который был занесён в память. Плюс логично добавить какой нибуть ответ при получении смски и отработки команды на включение\выключение в виде ответного звонка и\или ответной смски. А в идеале и возможность с помощью звонка на устройство определить его состояние, включено или отключено.

Заранее спасибо всем кто откликнится!

 

retrobaners
Offline
Зарегистрирован: 27.04.2015

Примеры двух похожих устройств:

http://elgato.com.ua/ru/news/18-production/smart-home-office/125-gsm-rozetka-3-kanala-power-switch-sms

http://alitrack.ru/review/3726.html

Также нечто похожее по вункциональности выпускает и МастерКИТ .

Но проблема всех этих устройств цена, самое дешёвое что я находил это:

http://olx.ua/list/q-sms-%D1%80%D0%BE%D0%B7%D0%B5%D1%82%D0%BA%D0%B0/

Особенно впечатлил вариан http://kiev.ko.olx.ua/obyavlenie/prodam-gsm-sms-rozetku-dlya-vklyucheniya-konditsionera-ID75eUX.html#03701e522f это как раз то устройство, что я создаю,  по конструкции абсолютно видно что оно не заводского изготовления , вдумайтесь за 110 $ И это при том что ардуинку+GPRS Shild+ рыле можно купить за приблезительно 10 баксов.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

retrobaners пишет:

... И это при том что ардуинку+GPRS Shild+ рыле можно купить за приблезительно 10 баксов.

Дайте две!

 

retrobaners пишет:

Так как в первую очередь ставится цель "минимум расхлодов", проект бюджетный. То сразу отказываемся от дорого GSM\GPRS Shild, а будем использовать более дешёвый модуль http://ru.aliexpress.com/item/GSM-GPRS-900-1800-MHz-Short-Message-Service-SMS-module-for-project-for-Arduino-remote-sensing/32285058497.html

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

Вот из самого дешевого, что доступно в Китае:

http://www.ebay.com/itm/Smallest-SIM800L-GPRS-GSM-Module-Micro-Card-Boar...

Это по сути улучшенный SIM900, только маленький. Если хочется общаться через библиотеку - она подходит от SIM900.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

GSM GPRS модуль на основе NEOWAY M590 (Совместим по командам с SIM900).

http://jewelfox.ru/lot.php?id=4591

врут полюбому. есть у меня модули тоже совместимые (только для другого) и нифига

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

jeka_tm пишет:

GSM GPRS модуль на основе NEOWAY M590 (Совместим по командам с SIM900).

http://jewelfox.ru/lot.php?id=4591

врут полюбому. есть у меня модули тоже совместимые (только для другого) и нифига

Хм...

Вот и подтвердились мои подозрения - он не дружит с 5-вольтовой логикой...

А по командам он может быть и совместим. Они все, с большего, hayes-совместимые.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

рекомендуемый по даташиту стабилизатор MIC29302 на 3А!!!! даже не стоит пытаться подключать к 3.3В ардуины

retrobaners
Offline
Зарегистрирован: 27.04.2015

NEOWAY M590 Даташит на китайском языке: http://123.125.114.20/view/a09ed51c10a6f524ccbf857c.html?re=view

Вот человеку купившему модуль, китайцы прислали схему включения и скрины с ответами модема http://arduino.ru/forum/proekty/kontrolnye-vesy-dlya-paseki-s-otpravkoi-dannykh-v-sms#comment-105549 , мануал от подобного модуля http://wless.ru/files/GSM/Neoway/Neoway_M660_Module_Hardware_User_Guide_V3_4.pdf  Схема включения:

вот конкретно как человек состыковал:

http://m.geektimes.ru/post/243033/

я думаю что есть даже микросхемка какая, типа max232 которая при минимальной развязке сможет транслировать эти уровни...

Меня интересует не аппаратная стыковка, суть вопроса не в этом.

Я прежде всего жажду помощи по прагромирования, а точнее по скетчу, который выложил в шапке этой темы.

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

Прошу тех кто хорошо разбирается в программировании ардуино, дать свои коментарии.

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

retrobaners пишет:

..

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

Прошу тех кто хорошо разбирается в программировании ардуино, дать свои коментарии.

Поясните свой вопрос.

Вышеназванная функция в вашем коде есть и  есть место, откуда она вызывается.

 

retrobaners
Offline
Зарегистрирован: 27.04.2015

Вот это Вы имеете ввиду:

void powerDown()
{
 pinMode(6, OUTPUT); 
 digitalWrite(6,LOW);
 delay(1000);
 digitalWrite(6,HIGH);
 delay(2000);
 digitalWrite(6,LOW);
 delay(3000);
}

Так она полность повторяет:

 
void powerUp()
{
 pinMode(6, OUTPUT);
 digitalWrite(6,LOW);
 delay(1000);
 digitalWrite(6,HIGH);
 delay(2000);
 digitalWrite(6,LOW);
 delay(3000);
}
только последняя вызывается от сюда:
void loop()
{
       
    if (timer < millis())
      { 
        timer = millis()+600000;
         
        delay(2000);
         
        pinMode(13, OUTPUT); 
        digitalWrite(13,HIGH);
        delay(500);
        digitalWrite(13,LOW);
                 
        mySerial.println("AT");
        delay(200);
         
        rep = (String)mySerial.read(); 
        //Serial.println(rep);
         
        if (rep == "65"){
            Serial.println("GPRS module is OK");
        }
        else
        {
            powerUp();
        }        
         
      }

последняя строка, а функция "powerDown" не откуда не вызывается. Выход она работает один раз при включении?

И самое главное:  Почему это всё не работает?

Какую функцию выполняет светодиод на 13 порту, зачем и почему он мигает?

Что это и зачем:

void(* resetFunc) (void) = 0; // Reset MC function  - resetFunc(); //вызов

 

Собраное устройство, пишет всё в сериал порт, последнее "ОК".  Если отправить смс через инет, то оно обрезано и ключевое "1 on" в строке принятой смс нет. Если отправить с телефона, ардуина принимает и текст пересылает в ком порт, только реле не срабатывает...

 

retrobaners
Offline
Зарегистрирован: 27.04.2015

Добавил в код свои коментарии, не судите строго, я только учусь:

// СМС розетка , вариант 1 автор "podrugomu.com/node/1456"
 
#include <softwareserial.h> // Дириктива подключения внешней библиотеки "SoftwareSerial"
#include <string.h> // Дириктива подключения внешней библиотеки "String"
 
SoftwareSerial mySerial(2, 3); // RX, TX Порты програмного интерфейса, соответственно
 
int count=0;     // counter for buffer array - счетчик для буфера массива, переменная "count" тип "int" (2 байта)
long timer = 0; // Тип данных "long" (4 байта), переменная "timer", начальное значение "0"
 
String currStr = ""; // Класс String, объявляем строчную переменную "currStr" с пустым начальным значением
String rep = ""; // то же , строчная переменная "rep" начальное значение то же пустое
boolean isStringMessage = false; // Логического типа переменная (из двух значений "True" и "False") 
 // принимает значение True, если текущая строка является сообщением
int power1 = 8; // Переменная "power1" тип "int" (2 байта), объявляем значение номером выбраного порта. 
int power2 = 9; //то же
int power3 = 10; // то же
int power4 = 11; // то же
int power5 = 12; // то же
 
 
void setup() // Одна из двух обязательных функции, запускается один раз при включении или перезагрузки 
{ // Начало функции "setup"
   
   pinMode(power1, OUTPUT); // Устанавливаем режим выбраного порта, номером которого является значение переменной "power1",  
   pinMode(power2, OUTPUT); // в данном случае режим выбран как "выход".
   pinMode(power3, OUTPUT); // то же
   pinMode(power4, OUTPUT); // то же
   pinMode(power5, OUTPUT); // то же
 
    
   digitalWrite(power1, HIGH); // Устанавливаем уровень "HIGH" (5 вольт), на порте согласно переменной "power1" 
   digitalWrite(power2, HIGH); // то же
   digitalWrite(power3, HIGH); // то же
   digitalWrite(power4, HIGH); // то же
   digitalWrite(power5, HIGH); // то же
 
    
   powerUp(); // Выполнить функцию "powerUp", код которой находится ниже.
    
   Serial.begin(19200);  // Скорость апаратного порта установить "19200"
   mySerial.begin(19200); // Скорость програмного порта установить "19200"
    
   
   //mySerial.println("AT+IPR=19200");   ------ ЗАКОМЕНТИРОВАНАЯ СТРОКА АВТОРА-----
   //delay(500); 	------ ЗАКОМЕНТИРОВАНАЯ СТРОКА АВТОРА-----
    
   Serial.println("Arduino START OK"); // Вывести в апаратный порт "Arduino START OK"
    
   mySerial.println("ATZ"); // АТ команда модему "ATZ" (програмный сброс) 
   delay(500); // Пауза 0,5 секунды
   mySerial_read(); // Читаем ответ модема
    
   mySerial.println("AT+CMGDA=\"DEL ALL\""); // АТ команда модему , удалить все сообщения с sim карты
   delay(500); // Пауза 0,5 секунды
   mySerial_read(); // Читаем ответ модема
    
   mySerial.println("AT+CMGF=1");    // устанавливаем текстовый режим SMS (1 - включить, 0 - отключить)
   delay(500); // Пауза 0,5 секунды
   mySerial_read(); // Читаем ответ модема
 
   mySerial.println("AT+IFC=0,0");  //настройка SIM900 Serial bufer  --- Контроль передачи данных, при "0", оключен обеими
   delay(500); // Пауза 0,5 секунды
   mySerial_read(); // Читаем ответ модема
    
   mySerial.println("AT+CPBS=\"SM\"");  // Получить доступ к телефонной книге расположеной на SIM-карте ??????? ЗАЧЕМ?????
   delay(500); // Пауза 0,5 секунды
   mySerial_read(); // Читаем ответ модема
    
   //mySerial.print("AT+CNMI=1,2,2,1,0");  ------ ЗАКОМЕНТИРОВАНАЯ СТРОКА АВТОРА-----
   mySerial.println("AT+CNMI=1,2,0,0,0"); // Включить перехват SMS, перед этой командой должно быть "AT+CMGF=0" - Переход в PDU mode 
   delay(500);  // Пауза 0,5 секунды 
   mySerial_read(); // Читаем ответ модема
    
    
   mySerial.print("AT+CMGL="); // Чтение групп SMS
   mySerial.print((char)34); // передать символ (")
   mySerial.print("ALL"); // Передать строку -ALL-
   mySerial.print((char)34); // передать символ (")
   mySerial.print((char)13); // передать семвол переноса строки
   delay(300); // Пауза 0,3 секунды 
   mySerial_read(); // Читаем ответ модема
    
	/* Вопросы:
1. Зачем получать доступ к телефонной книге?
2. Почему нет команды "AT+CMGF=0" , для перехода в режим PDU  (Для передачи русских символов необходимо использовать формат PDU)
3. Почему в последнем абзаце нельзя использовать mySerial.println "AT+CMGL=\"ALL\""	, вместо такой сложной конструкции.
	*/
	
	} // Конец функции "setup"
 
void loop() // Вторая обязательная функция, работает по циклу непрерывно с момента подачи питания
{ // Начало функции "loop"
       
    if (timer < millis()) // Если переменная "timer" меньше чем время работы программы, тогда:
      { // Начало первого условия
        timer = millis()+600000; // Присвоить переменной "timer" значение , время работы программы плюс 600 тысяч.
         
        delay(2000); // Пауза 2 секунды
         
        pinMode(13, OUTPUT); // Установить 13 пин как выход
        digitalWrite(13,HIGH); // установить на нём высокий уровень (5 вольт)
        delay(500); // Пауза 0,5 секунды
        digitalWrite(13,LOW); // Установить на 13 пине низкий уровень (0 вольт)
                 
        mySerial.println("AT"); // Передать в програмный серийный порт команду "АТ" (Иницилизация модема)
        delay(200); // Пауза 0,2 секунды
         
        rep = (String)mySerial.read(); // Создать переменную "rep", присвоив ей значение, типа "строка", 
		// считаное из програмного серийного порта 
        //Serial.println(rep); ------ ЗАКОМЕНТИРОВАНАЯ СТРОКА АВТОРА-----
         
        if (rep == "65") // Если переменная "rep" равна 65 (В таблице ASCII это символ "А")
		{ // начало второго условия
            Serial.println("GPRS module is OK"); //то передать в серийный порт "GPRS module is OK"
        }
        else // Иначе (второго условия)
        {
            powerUp(); // Выполнить функцию "powerUp" (Код которой находится ниже)
        }     // конец второго условия   
         
      } // Конец первого условия , отсуствует иначе, значит продолжаем дальше по коду.
       
    mySerial_read(); // Считать один байт из програмного серийного порта
    Serial_read();   // Считать один байт с апаратного серийного порта
      
    if (Serial.available()) // Если в буфере апаратного серийного порта не пустой, то
        Serial.println(mySerial.read());  //Передать в  апаратный серийный порт вместе с спецсимволами,
	// переноса и новой строки, значение с програмного серийного порта. Иначе, дальше по коду.
 
    if (mySerial.available()) // Если в буфере програмного серийного порта не пустой, то
        return; // Прервать выполнение функции и вернуться ???
  
    char currSymb = mySerial.read();  // Создать переменную  "currSymb" размером в 1 байт и записать её значение как
		// значение считаное из програмного серийного порта.
    if ('\r' == currSymb) // Если переменная "currSymb" имеет значение "\r", то: 
	{ // начало Условия 1
        if (isStringMessage) //если текущая строка - SMS-сообщение, отреагируем на него соответствующим образом --
		// ---- КОМЕНТАРИЙ АВТОРА-----
		{ // Начало второго условия
 
            if (!currStr.compareTo("1 on")) { // Не нашёл описания команды "currStr.compareTo" :( 
                digitalWrite(power1, HIGH);
                Serial.println("power 1 is ON");
            } else if (!currStr.compareTo("1 off")) {
                digitalWrite(power1, LOW);
            } else if (!currStr.compareTo("2 on")) {
                digitalWrite(power2, HIGH);
            } else if (!currStr.compareTo("2 off")) {
                digitalWrite(power2, LOW);
            } else if (!currStr.compareTo("3 on")) {
                digitalWrite(power3, HIGH);
            } else if (!currStr.compareTo("3 off")) {
                digitalWrite(power3, LOW);
            } else if (!currStr.compareTo("4 on")) {
                digitalWrite(power4, HIGH);
            } else if (!currStr.compareTo("4 off")) {
                digitalWrite(power4, LOW);
            } else if (!currStr.compareTo("5 on")) {
                digitalWrite(power5, HIGH);
            } else if (!currStr.compareTo("5 off")) {
                digitalWrite(power5, LOW);
            }
            isStringMessage = false;
             
        } else { // Иначе
            if (currStr.startsWith("+CMT")) //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
			{ 
               isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    } 
     
 
       
           
}
 
 
void send_sms(String sms_number,String sms_text) // Функция "send_sms" Где она используется я так и не нашёл.
{
      delay(1500);
      mySerial.print("AT+CMGS=");          
      mySerial.print((char)34);             
      mySerial.print((String)sms_number);         
      mySerial.print((char)13);      
      delay(1500);
      mySerial.println((String)sms_text);     
      delay(500);
      mySerial.print((char)26);             
      mySerial.print((char)13);
      delay(1000);
}
 
void dial(String number) // Функция "dial" Где она используется я так и не нашёл.
{
      delay(1000);
      mySerial.print("ATD"); 
      mySerial.println((String)number); 
      delay(500);
 
}
 
void powerUp() // Функция "powerUp"
{
 pinMode(6, OUTPUT); 
 digitalWrite(6,LOW);
 delay(1000);
 digitalWrite(6,HIGH);
 delay(2000);
 digitalWrite(6,LOW);
 delay(3000);
}
 
void powerDown() // Функция "powerDown" Где она используется я так и не нашёл.
{
 pinMode(6, OUTPUT); 
 digitalWrite(6,LOW);
 delay(1000);
 digitalWrite(6,HIGH);
 delay(2000);
 digitalWrite(6,LOW);
 delay(3000);
}
 
void mySerial_read() // Функция "mySerial_read" для считывания буфера програмного серийного порта.
{
  int i=0; // Начальное значение переменной "i" утанавливаем как ноль.
  char buffer[200]; // Создать переменную "buffer", символьного типа размером 200 байт
 
  if(mySerial.available()){ // Первое условие: Если в буфере програмного серийного порта есть данные, то:
     delay(100); // Пауза 0,1 секунды
     while( mySerial.available() && i< 199) // Начало цикла с продалжением пока "i" меньше или равно 199 
	 {
        buffer[i++] = mySerial.read(); //Считать в переменную "buffer[i++]" очередной байт с програмного серийного порта
		// и увеличить значение "i" на одну единицу.
     } // Конец цыкла
     buffer[i++]='\0' ; // Присвоить переменной "buffer[i++]" значение '\0' --- ? Что это?
	 } // Конец первого условия.
   
  if(i>0) // Условие, если "i" больше нуля, то:
  {  
 
    Serial.println(buffer); // Передать в апаратный серийный порт значение переменной "buffer"
	// с конечным символом перевода корретки.
     
  } // Конец условия
} // Конец функции
 
void Serial_read() // Функция "Serial_read" для считывания буфера апаратного серийного порта.
{
  int a=0; // Начальное значение переменной "а" утанавливаем как ноль.
  char buffer2[200]; // Создать переменную "buffer2", символьного типа размером 200 байт
 
  if(Serial.available()) // Первое условие: Если в буфере програмного серийного порта есть данные, то:
  {
     delay(100); // Пауза 0,1 секунды
     while( Serial.available() && a< 199) // Начало цикла с продалжением пока "а" меньше или равно 199 
	 {
        buffer2[a++] = Serial.read(); //Считать в переменную "buffer[i++]" очередной байт с програмного серийного порта
		// и увеличить значение "i" на одну единицу.
     } // Конец цыкла
     buffer2[a++]='\0'; // Присвоить переменной "buffer2[а++]" значение '\0' --- ? Что это?
  } // Конец первого условия.
   
   if(a>0)  //if buffer full ---- коментарий автора--- мой комент -- Условие, если "а" больше нуля, то:
   {  
    mySerial.println(buffer2); // Передать в програмный серийный порт значение переменной "buffer2"
	// с конечным символом перевода корретки.
   
  }
}
 
void(* resetFunc) (void) = 0; // Reset MC function  - resetFunc(); //вызов  --- Вообще не понял что это?
 
// Дальше мне кажется не хватает остального кода..

Прошу прокоментировать мои ошибки.

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

Попробую теперь описать алгоритм работы этого скетча. Далее будет..

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

Скажите, а если с модулем гсм который на 3.7-4в напряжения рассчитан, использовать ардуино про мини на 3.3В, но питать от общего источника 4В - ,такой варант прокатит, какие подводные камни могут быть? 

retrobaners
Offline
Зарегистрирован: 27.04.2015

Вы не написали, мощность "общего источника" , GSM модулю часто в пике нужен ток от 0,8 до 2 Ампер, посмотрите спецификацию своего модуля, что касается Ардуино Про Мини, то в моей книги В.Петин "Проекты с использованием контролера Arduino" указано:

Входное напряжение - 3,35-12 В (модель 3,3 В) или 5-12 (модель 5 В).

Так что 4 вольта вполне, главное что-бы просадки по питанию ниже 3,35 не было в моменты пикового потребления GSM модуля.

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

мощность - батарея литийионная, ее напряжение 3,7-4,2В.  современные модули гсм до 4,5В держат.

я имел ввиду - выбросить родной стабилизатор 3,3в в ардуино мини, и питать все  от 4В от аккума.

retrobaners
Offline
Зарегистрирован: 27.04.2015

1. У батареи есть тоже граничный ток, который она может отдать...

2. Современные это в каком диапозоне времени? На данный момент наверное есть сотни модулей впущенных скажем за год на текущий момент, которые так или иначе можно подключить к ардуинке, а если взять те что раньше, то вообще... Повторяю ещё раз нужно смотреть спецификацию, а для этого нужно писать конкретнее что за модуль, да и вообще хоть фото, если не знаете.

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

 

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

выбросить стабилизатор - думаю самый лучший вариант выровнять напряжение.

 сим-800 если не ошибаюсь - до 4,5в.

рабочее напр. л.ион. акк. - 4В.

fiftelement
Offline
Зарегистрирован: 06.06.2015

Подскажите пожалуйста на GSM Shield EFcomвозможно запустить данный скетч? Нужна СМС розетка, управляемая реле, примеров найти немогу...

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

fiftelement пишет:

Подскажите пожалуйста на GSM Shield EFcomвозможно запустить данный скетч?

Возможно.

Есть только один нюанс - обычно, чтобы запустить более-менее сложный скетч, нужно понимать, что делаешь...

Цитата:

Нужна СМС розетка, управляемая реле ...

точно не наоборот?

Life23
Offline
Зарегистрирован: 10.08.2013

Ищите мою тему на этом форуме про шилд на sim900.

fiftelement
Offline
Зарегистрирован: 06.06.2015

Gippopotam пишет:

fiftelement пишет:

Нужна СМС розетка, управляемая реле ...

точно не наоборот?


Прошу прощения, наоборот )))
Нашел пример, управления светодиодами по sms, переделал под реле, вроде работает.
Добавил еще програмное включение шилда EFcom.
Позже напишу пример.

fiftelement
Offline
Зарегистрирован: 06.06.2015

Простой пример управления 2-мя реле (розеткой):

#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(2, 3);
 
int powerGSM = 6; // Пин включения GSM
int unit1 = 8; // Пин включения реле №1
int unit2 = 9; // Пин включения реле №2
 
void setup()
{
    digitalWrite(powerGSM, HIGH); // Включаю GSM модуль
    delay(1000);
    digitalWrite(powerGSM, LOW);
    delay(5000);
    gprsSerial.begin(19200);
    delay(300);
    pinMode(unit1, OUTPUT);
    pinMode(unit2, 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()
{
    if (!gprsSerial.available())
        return;
 
    char currSymb = gprsSerial.read();    
    if ('\r' == currSymb) {
        if (isStringMessage) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("unit1 on")) {
                digitalWrite(unit1, HIGH);
            } else if (!currStr.compareTo("unit1 off")) {
                digitalWrite(unit1, LOW);
            } else if (!currStr.compareTo("unit2 on")) {
                digitalWrite(unit2, HIGH);
            } else if (!currStr.compareTo("unit2 off")) {
                digitalWrite(unit2, LOW);
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}

Подскажите как организовать ответы на команды, допустим отправил команду unit1 on, в ответ получил СМС "Розетка №1 - On"? Или Status - "Розетка №1 - On, Розетка №2 - Off", Balance - ответ "100 руб."

retrobaners
Offline
Зарегистрирован: 27.04.2015

Скетч приведенный в примере (в моём с моими коментариями) не рабочий!!!

Скетч постом выше не проверял, но как помне в нем например:

1. Нет блока с проверкой состояния GPRS shild и автоперезагрузкой в случае отсуствия ответа...

2. Отсуствует реакция на звонок...

3. Нельзя определить удалённо его состояние...

4. Нет програмной инициализации, при включении, а значит, при кратковременном сбое питания, GPRS модуль не заведётся и будет ждать нажатия на кнопку...

Да и вообще, помоему он взят из стандартного примера, которые есть в штатной среде разработки Arduino..

 

fiftelement
Offline
Зарегистрирован: 06.06.2015

retrobaners пишет:

4. Нет програмной инициализации, при включении, а значит, при кратковременном сбое питания, GPRS модуль не заведётся и будет ждать нажатия на кнопку...

int powerGSM = 6; // Пин включения GSM
......
digitalWrite(powerGSM, HIGH); // Включаю GSM модуль
    delay(1000);
    digitalWrite(powerGSM, LOW);
    delay(5000);
    gprsSerial.begin(19200);
    delay(300);

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

Что касается остального, я бы и сам хотел это узнать, как добавить это в код.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Не поделитесь идеями на тему, нафига такая розетка может понадобиться?

Life23
Offline
Зарегистрирован: 10.08.2013

[quote=fiftelement]

Простой пример управления 2-мя реле (розеткой):

#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(2, 3);
 
int powerGSM = 6; // Пин включения GSM
int unit1 = 8; // Пин включения реле №1
int unit2 = 9; // Пин включения реле №2
 
void setup()
{
    digitalWrite(powerGSM, HIGH); // Включаю GSM модуль
    delay(1000);
    digitalWrite(powerGSM, LOW);
    delay(5000);
    gprsSerial.begin(19200);
    delay(300);
    pinMode(unit1, OUTPUT);
    pinMode(unit2, 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()
{
    if (!gprsSerial.available())
        return;
 
    char currSymb = gprsSerial.read();    
    if ('\r' == currSymb) {
        if (isStringMessage) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("unit1 on")) {
                digitalWrite(unit1, HIGH);
            } else if (!currStr.compareTo("unit1 off")) {
                digitalWrite(unit1, LOW);
            } else if (!currStr.compareTo("unit2 on")) {
                digitalWrite(unit2, HIGH);
            } else if (!currStr.compareTo("unit2 off")) {
                digitalWrite(unit2, LOW);
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}

Подскажите как организовать ответы на команды, допустим отправил команду unit1 on, в ответ получил СМС "Розетка №1 - On"? Или Status - "Розетка №1 - On, Розетка №2 - Off", Balance - ответ "100 руб."

[/quote ]

Не искали по форуму.. (( http://arduino.ru/forumprogrammirovanie/pomogite-novichku-dopisat-kod#co...

fiftelement
Offline
Зарегистрирован: 06.06.2015

Вот есть пример http://wiki.amperka.ru/projects:smart-power

Как переделать скетч под управление АТ-командами, вместо библиотеки GPRS_Shield_Arduino.h

// библиотека для работы с GPRS устройством
#include <GPRS_Shield_Arduino.h>
 
// библиотека для эмуляции Serial порта
// она нужна для работы библиотеки GPRS_Shield_Arduino
#include <SoftwareSerial.h>
 
// длина сообщения
#define MESSAGE_LENGTH 160
// текст сообщения о включении розетки
#define MESSAGE_ON  "Power is On"
// текст сообщения о выключении розетки
#define MESSAGE_OFF  "Power is Off"
// текст сообщения об ошибке распознавания команды
#define MESSAGE_ERROR  "Error...unknown command!"
 
// пин, к которому подключено реле
#define RELAY 5
// номер сообщения в памяти сим-карты
int messageIndex = 0;
 
// текст сообщения
char message[MESSAGE_LENGTH];
// номер, с которого пришло сообщение
char phone[16];
// дата отправки сообщения
char datetime[24];
 
bool stateRelay = false;
 
// создаём объект класса GPRS и передаём ему скорость 9600 бод;
// с помощью него будем давать команды GPRS шилду
GPRS gprs(9600);
 
void setup()
{
  // настраиваем пин реле в режим выхода,
  pinMode(RELAY, OUTPUT);
  // подаём на пин реле «низкий уровень» (размыкаем реле)
  digitalWrite(RELAY, LOW);
  // включаем GPRS-шилд
  gprs.powerUpDown();
  // открываем последовательный порт для мониторинга действий в программе
  Serial.begin(9600);
  while (!Serial) {
    // ждём, пока не откроется монитор последовательного порта
    // для того, чтобы отследить все события в программе
  }
  // проверяем, есть ли связь с GPRS-устройством
  while (!gprs.init()) {
    // если связи нет, ждём 1 секунду
    // и выводим сообщение об ошибке;
    // процесс повторяется в цикле,
    // пока не появится ответ от GPRS устройства
    delay(1000);
    Serial.print("Init error\r\n");
  }
  // вывод об удачной инициализации GPRS Shield
  Serial.println("GPRS init success");
}
 
void loop()
{
  // проверяем наличие непрочитанных сообщений
  // и находим их номер в памяти сим-карты
  messageIndex = gprs.isSMSunread();
  if (messageIndex > 0) {
    // если есть хотя бы одно непрочитанное сообщение,
    // читаем его
    gprs.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
 
    // Удаляем прочитанное сообщение из памяти Сим-карты
    gprs.deleteSMS(messageIndex);
 
    // выводим номер, с которого пришло смс
    Serial.print("From number: ");
    Serial.println(phone);
 
    // выводим дату, когда пришло смс
    Serial.print("Datetime: ");
    Serial.println(datetime);
 
    // выводим текст сообщения
    Serial.print("Recieved Message: ");
    Serial.println(message);
    // вызываем функцию изменения состояния реле
    // в зависимости от текста сообщения
    setRelay(phone, message);
  }
}
 
void setRelay(char f_phone[], char f_message[])
{
  if (strcmp(f_message, "On") == 0) {
    // если сообщение — с текстом «On»,
    // выводим сообщение в Serial
    // и подаём на замыкаем реле
    Serial.println("OK! Power On");
    digitalWrite(RELAY, HIGH);
    stateRelay = true;
    // на номер, с которого пришёл запрос,
    // отправляем смс с текстом о включении питания
    gprs.sendSMS(f_phone, MESSAGE_ON);
  } else if (strcmp(f_message, "Off") == 0) {
    // если пришло сообщение с текстом «Off»,
    // выводим сообщение в Serial
    // и размыкаем реле
    Serial.println("OK! Power Off");
    digitalWrite(RELAY, LOW);
    stateRelay = false;
    // на номер, с которого пришёл запрос
    // отправляем смс с текстом о выключении питания
    gprs.sendSMS(f_phone, MESSAGE_OFF);
  } else if (strcmp(f_message, "State") == 0) {
    // если пришло сообщение с текстом «State»,
    // отправляем сообщение с состоянием реле
    if (stateRelay) {
      Serial.println("State: Power On");
      gprs.sendSMS(f_phone, MESSAGE_ON);
    } else {
      Serial.println("State: Power Off");
      gprs.sendSMS(f_phone, MESSAGE_OFF);
    }
  } else {
    // если сообщение содержит неизвестный текст,
    // отправляем сообщение с текстом об ошибке
    Serial.println("Error... unknown command!");
    gprs.sendSMS(f_phone, MESSAGE_ERROR);
  }
}

 

fiftelement
Offline
Зарегистрирован: 06.06.2015

Puhlyaviy пишет:

Не поделитесь идеями на тему, нафига такая розетка может понадобиться?

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

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

fiftelement пишет:

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

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

Бизнес по-московски:

- Андрей, тебе нужно завтра в 8 утра быть на объекте, послезавтра сдача проекта.

- Завтра воскресенье. Я болею, у меня температура.

- Там многомиллиардный проект, на открытие приедут первые лица государства!!! При неисполнении контракта мы попадаем на многомиллионный штраф!!!

- Хорошо. Я возьму такси и приеду. Приблизительно тысяча рублей понадобится.

- А общественным транспортом никак не сможешь добраться? Я не могу согласовать расход на такую сумму.

fiftelement
Offline
Зарегистрирован: 06.06.2015

Puhlyaviy пишет:

fiftelement пишет:

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

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

Бизнес по-московски:

- Андрей, тебе нужно завтра в 8 утра быть на объекте, послезавтра сдача проекта.

- Завтра воскресенье. Я болею, у меня температура.

- Там многомиллиардный проект, на открытие приедут первые лица государства!!! При неисполнении контракта мы попадаем на многомиллионный штраф!!!

- Хорошо. Я возьму такси и приеду. Приблизительно тысяча рублей понадобится.

- А общественным транспортом никак не сможешь добраться? Я не могу согласовать расход на такую сумму.

Для личных целей, это не бизнес. Просто Интернет передаю по радиоканалу из точки А в точку Б.

Еле наскреб на оборудование...

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

хммм. а чем обычный WIFI не устраивал? с направлеными антенами в прямой видимости километров 10 уверено работает...

retrobaners
Offline
Зарегистрирован: 27.04.2015

Обсуждение WiFi и WiMax в другую ветку, не засоряйте мою тему! Тем более анекдотами.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

retrobaners пишет:

Обсуждение WiFi и WiMax в другую ветку, не засоряйте мою тему! Тем более анекдотами.

О.о вы тут ничего не попутали? За четкими ответами идите в гугл, пусть он вам и помогает!

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

fiftelement пишет:

Puhlyaviy пишет:

Не поделитесь идеями на тему, нафига такая розетка может понадобиться?

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

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

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

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Short Circuit пишет:

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

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

вот у меня тоже было такое подозрение что реле отрубающее фазу по питанию, тут как бы не поможет нифига..

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

retrobaners пишет:

cheniya-konditsionera-ID75eUX.html#03701e522f это как раз то устройство, что я создаю,  по конструкции абсолютно видно что оно не заводского изготовления , вдумайтесь за 110 $ И это при том что ардуинку+GPRS Shild+ рыле можно купить за приблезительно 10 баксов.

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

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

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

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Short Circuit пишет:

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

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

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

да пофигу на цены.. в чем смысл реального применения подобного убожества?

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

перезагрузка  роутеров, банкоматов, платежных автоматов и прочего-прочего-прочего..

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

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Short Circuit пишет:

перезагрузка  роутеров, банкоматов, платежных автоматов и прочего-прочего-прочего..

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

дык предполагается что там есть интернет.. нафига городить СМС и прочее?

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

интернет который завис?  ну-ну..

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Short Circuit пишет:

интернет который завис?  ну-ну..

странно все это. года 4 стоит раутер на входе в дом ( ну как 4 года назад оптику приволокли)... не приходилось ниразу его перезагружать за это время...  а до этого DSL стоял тот за 10 лет перезагружался может раза 2...

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

 ну и хорошо, дешевіе банкоматі и прочее - виснут ого как..

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Short Circuit пишет:

 ну и хорошо, дешевіе банкоматі и прочее - виснут ого как..

 

сначало экономим, а потом сооружаем костылики и тратим деньги на их поддержку... кто то реально не умеет считать деньги...

retrobaners
Offline
Зарегистрирован: 27.04.2015

Тема называется "

SMS розетка (аналог SenseIt GS1\ МегаФон розетка) своими руками на Arduino

"

Обсуждение WiFi и WiMax в другую ветку !!!!!!!!!!!!!

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

retrobaners пишет:

Тема называется "

SMS розетка (аналог SenseIt GS1\ МегаФон розетка) своими руками на Arduino

"

Обсуждение WiFi и WiMax в другую ветку !!!!!!!!!!!!!


Истерики закатывай маме в магазине.

retrobaners
Offline
Зарегистрирован: 27.04.2015

Puhlyaviy пишет:
retrobaners пишет:

Тема называется "

SMS розетка (аналог SenseIt GS1\ МегаФон розетка) своими руками на Arduino

"

Обсуждение WiFi и WiMax в другую ветку !!!!!!!!!!!!!

Истерики закатывай маме в магазине.

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

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Мы нормально обсуждаем практическое применение подобных девайсов.. Влетает нечто нервное и в истеричной форме заявляет что это его личное пространство и не сметь тут даже думать.. интересно оно нломальное? Или может к доктору его?

retrobaners
Offline
Зарегистрирован: 27.04.2015

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

demon969
Offline
Зарегистрирован: 24.04.2012

retrobaners пишет:

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

Простите,(за флуд не в тему) не сдержался, впервые, но я +++++++++++++++++++++++++ этот комент.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Фигасе вы тут нафлудили... Я и забыл уже что канткулы у детей начались. И как трепетно дети относятся к своим темам.
хотите написать какой я негодяй, заведите отдельную тему. И там меня обсуждайте. Хотя вроде-бы где то была такая уже.
заместо коротенького обсуждения га тему использования родобных модулей. Устроили тут моё аутодафе.

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

 так что с розеткой и приемом смс для управлению релюхой?

есть рабочий код не под библиотеку?