Arduino Mega Server

Модератор: Alex

Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Описание работы RELE

Сообщение ser009 » Вт мар 28, 2017 7:54 am

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

Добавил в код ещё одну секцию rele.
Вывел её состояние на панель.

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

Код: Выделить всё

function getDashData() 

DASH.JS
СпойлерПоказать
var digitalPins = ["D2","D3","D4","D5","D6","D7","D8","D9","D10", "D22","D23","D24","D25","D26","D27","D28","D29","D30","D31"];
var analogPins = ["A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","A11","A12","A13","A14","A15","A16"];
Теперь добавляем в Arduino "server_ajax"
СпойлерПоказать
String makeDigitalPorts() {
String s = "";
byte pins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
for (byte i = 0; i < sizeof(pins); i++) {
s += makeTag("D", String(pins), String(digitalRead(pins)));
}
return s;
}[/code]

После небольших исправлений мы получим состояние 28 и 29 входов.
Теперь что касается управления. (это мое решение и если есть замечания с удовольствием их выслушаю)
Добавил в Arduino вкладку "rele"
СпойлерПоказать

Код: Выделить всё

/*
  Modul RELEs
  part of Arduino Mega Server project
*/

#ifdef RELE_FEATURE

// pins
#define rele1pin 28 // Rele1
#define rele2pin 29 // Rele2

#define RELE_ON   1
#define RELE_OFF  0

char rele1object[] = "rele1";
char rele2object[] = "rele2";

char rele1onMess[] = "On"; char rele1offMess[] = "Off";
char rele2onMess[] = "On"; char rele2offMess[] = "Off";

// states
  // 0 - on
  // 1 - off
  // 2 - not defined
  // 3 - not defined and not contXstatus
byte rele1state = 2; byte old_rele1state = 3; byte rele1objectState = 2;
byte rele2state = 2; byte old_rele2state = 3; byte rele2objectState = 2;

// init
void relesInit() {
  pinMode(rele1pin, OUTPUT);
  pinMode(rele2pin, OUTPUT);
  modulReles = MODUL_ENABLE;
  started("Reles", true);
}

void relesWorks() {
  // rele1
  
  if (rele1state != old_rele1state) {
      old_rele1state = rele1state;
      
      if (rele1state == 1) {
        rele1objectState = RELE_ON;
        digitalWrite(rele1pin, HIGH); 
        printAndSend(rele1object, rele1onMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(rele1object, RELE_ON);
        #endif
      } else {
        rele1objectState = RELE_OFF;
        digitalWrite(rele1pin, LOW); 
        printAndSend(rele1object, rele1offMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(rele1object, RELE_OFF);
        #endif
      }
  }

}  
#endif // RELE_FEATURE               
Не забываем исправить

Код: Выделить всё

void  setup() void loop
Теперь об управлении
функция отправки команды на включение/выключение реле
СпойлерПоказать

Код: Выделить всё

function GetButton1() {
  if (RELE1_state === 1) {
    RELE1_state = 0;
    strRELE1 = "&RELE1=0";
  } else {
      RELE1_state = 1;
      strRELE1 = "&RELE1=1";
    }
  } 
Arduino дополняем "server_ajax"
СпойлерПоказать

Код: Выделить всё

#ifdef RELE_FEATURE
    if (StrContains(HTTP_req, "RELE1=1")) {
    rele1state = 1;}
    //digitalWrite(rele1pin, HIGH);}
    else if (StrContains(HTTP_req, "RELE1=0")) {
    rele1state = 0;}
    //digitalWrite(rele1pin, LOW);}
    if (StrContains(HTTP_req, "RELE2=1")) {
    rele2state = 1;
    digitalWrite(rele2pin, HIGH);}
    else if (StrContains(HTTP_req, "RELE2=0")) {
    rele2state = 0;
    digitalWrite(rele2pin, LOW);}
#endif             
сама кнопка на страничке
СпойлерПоказать

Код: Выделить всё

 <p>Выход D28 - <button type="button" onclick="GetButton1()" id="D28">...</button> </p> <br /><br /> 
СпойлерПоказать
Отопление.JPG
Отопление.JPG (93.79 КБ) 11066 просмотров
Последний раз редактировалось ser009 Чт мар 30, 2017 3:52 pm, всего редактировалось 1 раз.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Вт мар 28, 2017 8:02 am

Отлично ! В ветке по прикручиванию железа выкладывали решения по управлению Реле . У Меги вагон свободных выводов - попробуем прикрутить побольше.Вставлю код в Мегу - отпишусь.
И все таки полный код для страниц Dash.htm и .js можно увидеть ? Особенно в скрипте как и что прописать.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Arduino Mega Server

Сообщение ser009 » Вт мар 28, 2017 10:13 am

serghei писал(а):Спасибо в очередной раз! Реально полезное дело. Осталось разобраться с синхронизацией времени. В настройках этернета указал все правильно. Все сервера на ЕСП получают время без проблем. Но в Меге другой код ( через IP ). Менял кучу адресов NTP - не помогает. Тот адрес, что указан в дистрибутиве из Молдовы пингуется, но время ожидания ответа превышает все нормы.
Не могу проверить внешние IP адреса, т.к. нахожусь на работе и не имею прямого доступа в интернет, все через прокси с паролями. Но у нас в локалке есть свой NTP сервер прописал его и вуаля все работает.
СпойлерПоказать
time.JPG
time.JPG (142.13 КБ) 11045 просмотров
Последний раз редактировалось ser009 Чт мар 30, 2017 3:52 pm, всего редактировалось 1 раз.
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Arduino Mega Server

Сообщение ser009 » Вт мар 28, 2017 10:18 am

serghei писал(а): И все таки полный код для страниц Dash.htm и .js можно увидеть ? Особенно в скрипте как и что прописать.
Вложения
+rele.rar
(4.77 КБ) 210 скачиваний
За это сообщение автора ser009 поблагодарил:
serghei (Ср мар 29, 2017 6:11 pm)
Рейтинг: 1.16%
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Arduino Mega Server

Сообщение ser009 » Ср мар 29, 2017 3:31 pm

Хочу прикрутить вот такие переключатели.
Взято с онлайн конструктора https://proto.io/freebies/onoff/. Может кто делал уже такие?
Ещё нужна реализация отправки данных в переменную Arduino ( верхняя и нижняя уставки ). Для удобной настройки порогов термостата
СпойлерПоказать
кнопки.JPG
кнопки.JPG (36.29 КБ) 10994 просмотра
Последний раз редактировалось ser009 Чт мар 30, 2017 3:51 pm, всего редактировалось 1 раз.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Описание работы RELE

Сообщение serghei » Ср мар 29, 2017 6:27 pm

ser009 писал(а):... (это мое решение и если есть замечания с удовольствием их выслушаю)..
В очередной раз спасибо ! Это уже получается третья версия реализации управления реле в АМС. Первый через вкладку "key", второй 4-х канальное реле в ветке по прикручиванию железа. И вот это третье.
Код вставил, но с вебом не повезло - чего то не получается.Вывел статус второго реле. Выскажусь вообще по управлению релюшками. Так как свободных пинов много , хочется в отдельном модуле видеть механизм подключения до 16 (8) реле. И иметь отдельную страницу, по образу NRF24. Управлять с Веба уже понятно как, но хочется включение привязать к какой нибудь цифре в скетче. Поднялась влажность - включился вентилятор.
В целом - отлично!
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Arduino Mega Server

Сообщение ser009 » Чт мар 30, 2017 5:53 am

Алгоритм регулирования не очень сложен.
Меня больше сейчас волнует вопрос настройки гибкой настройки с web-интерфейса.
Для начала банальное задание параметров c web в переменные arduino.
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Arduino Mega Server

Сообщение ser009 » Чт мар 30, 2017 3:51 pm

Сегодня попытался добавить логер событий на sd-карте.
Очень удобно отслеживать события.
Файл создается, дополняется событиями.
Пока не разобрался как привязать запись времени.
СпойлерПоказать
сообщения.JPG
сообщения.JPG (62.87 КБ) 10899 просмотров
За это сообщение автора ser009 поблагодарил:
geor (Чт мар 30, 2017 4:00 pm)
Рейтинг: 1.16%
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Arduino Mega Server

Сообщение ser009 » Сб апр 01, 2017 11:17 am

Вот сама страничка. Не получается навести красоту.
Первый вариант имеет минус - он статичен.
Второй лишен этого недостатка, но не получается сделать конец строк. Все строки идут одна за одной.
Подскажите кто разбирается
СпойлерПоказать
сообщения1.JPG
сообщения1.JPG (120.35 КБ) 10842 просмотра
ALARM_20170401.rar
(705 байт) 177 скачиваний
получилось прикрепить время, но портянка получилась знатная :lol:
СпойлерПоказать

Код: Выделить всё

File alarm = SD.open("Alarm.txt", FILE_WRITE);
        alarm.print(String (year()));
        alarm.print("-");
        alarm.print(String (month()));
        alarm.print("-");
        alarm.print(String (day()));
        alarm.print(" ");
        alarm.print(String (hour()));
        alarm.print(":");
        alarm.print(String (minute()));
        alarm.print(":");
        alarm.print(String (second()));
        alarm.print("\t");
        alarm.println("Реле1 - включено");
        alarm.close();
 
сообщения2.JPG
сообщения2.JPG (111 КБ) 10836 просмотров
причесал малость
СпойлерПоказать
при событии

Код: Выделить всё

AlarmLog = "Выход D29. Реле2. ВЫКЛЮЧЕНО";
           alarmLoger(String (AlarmLog)); 
Штамп времени+событие

Код: Выделить всё

void alarmLoger(String AlarmLog){
   File alarm = SD.open("Alarm.txt", FILE_WRITE);
        alarm.print(String (year()));
        alarm.print("-");
        if(month() < 10) {alarm.print('0');}
        alarm.print(String (month()));
        alarm.print("-");
        if(day() < 10) {alarm.print('0');}
        alarm.print(String (day()));
        alarm.print(" ");
        if(hour() < 10) {alarm.print('0');}
        alarm.print(String (hour()));
        alarm.print(":");
        if(minute() < 10) {alarm.print('0');}
        alarm.print(String (minute()));
        alarm.print(":");
        if(second() < 10) {alarm.print('0');}
        alarm.print(String (second()));
        alarm.print("\t");
        alarm.println(String (AlarmLog));
        alarm.close();
}
 
в текстовике получаем:
2017-04-01 21:10:48 Выход D28. Реле1. ВКЛЮЧЕНО
2017-04-01 21:10:48 Выход D29. Реле2. ВЫКЛЮЧЕНО
2017-04-01 21:11:31 Выход D28. Реле1. ВКЛЮЧЕНО
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Arduino Mega Server

Сообщение ser009 » Сб апр 01, 2017 5:28 pm

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

В оригинале настраивать вход/выход/счетный вход/ШИМ/ и т.д. :?:
Ответить