Подключение железа к AMS

Модератор: Alex

alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Подключение железа к AMS

Сообщение alexsis_76 » Вс мар 10, 2019 2:05 pm

Этому вас сдесь
mypractik.ru
научили?
во первых
в указанных вами библиотеках есть задежки(куда же без них), на прерываниях какие вещи организовать довольно сложно.
во вторых
для нормальной работы кода эти библиотеки запрещают прерывания
// Turn off interrupts temporarily because the next sections
// are timing critical and we don't want any interruptions.
InterruptLock lock;
иначе разрушаются временные интервалы
это называется " критические секции".
в третьих
библиотека(та что у меня да и другие наверное) имеет изменяемый интервал опроса датчика #define MIN_INTERVAL 2000 так что как ни опрашивай реальное обращение к датчику будет происходить не чаще MIN_INTERVAL, в остальное время будут возвращаться предыдущие значения
Аватара пользователя
shemnik69
Сообщения: 590
Зарегистрирован: Пн дек 24, 2012 3:01 pm
Откуда: Саратов Saratov
Благодарил (а): 67 раз
Поблагодарили: 63 раза

Re: Подключение железа к AMS

Сообщение shemnik69 » Пн мар 11, 2019 9:26 am

Учится никогда не поздно. Данный сайт как и много других не школа и не институт. Люди ищут варианты решения и если они и отличаются от тех что применяется профи то это не ошибка а варианты решения. Я не отнушу себя к профи в вопросе программирования МК или дпжпкгих систем скорее да точнее это хобби а раз так то вариантов может быть много.
Теперь по прерываниям. Имеются в виду не прерывания по событию а есть счётчик он генерирует команду перехода на функцию скажем 2 мс. Т к. Каждый раз мы можем в этот интервал что то сделать. Например это счётчик либо таймер.
Запрет. Полностью согласен и более того знаю это и применяю. Иначе действительно аут.
А библиотека без delay есть и прекрасно работает. Смысл это не ждать время а выполнять фоновые функции паралельно веля счёт миллисекунд и отсчитав нужные интервалы опросить тот же датчик температуры. Этот метод может и кому-то не нравится своим видом, поведением или ещё чем но то что на выходе есть желаемый результат даёт ему право быть реализованым. А что ещё нужно. И в конце... Я только предложил вариант а не сказал что делать нужно так и никак по другому.
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Подключение железа к AMS

Сообщение alexsis_76 » Пн мар 11, 2019 11:18 am

что применяется профи
я честно говоря не знаю что применяют проффи, я тоже любитель
Смысл это не ждать время а выполнять фоновые функции паралельно веля счёт миллисекунд и отсчитав нужные интервалы опросить тот же датчик температуры
вы все сделали правильно, эти вещи давно всем известны и применяемы, но есть способ сделать это более понятным
Bolik.Stav
Сообщения: 74
Зарегистрирован: Вс янв 20, 2013 11:06 pm
Благодарил (а): 40 раз
Поблагодарили: 13 раз

Re: Подключение железа к AMS

Сообщение Bolik.Stav » Сб окт 12, 2019 9:58 pm

nick7zmail писал(а):
Вс апр 24, 2016 11:31 pm
Еще один девайс, под который я набросал код - вот такая плата с 4 реле. Возможно немного тороплюсь, т.к. плата мне ещё не дошла, но код уже подготовил, и вроде работает.
1) Оборудование: Плата для управления 4мя нагрузками 220v.02_122.jpg
2) Возможности: Управление платой с веб интерфейса (как MD, так и AMS), а так же физическими выключателями по типу вот этих268_P_1252303217900.jpgЛично я такими управлять собираюсь...но как вариант - можно использовать обычные настенные выключатели, а реле пустить на свет.
Алгоритм работы следующий: При включении выключателем (физическим) - на сервере меняется статус. При выключении с сервера (кнопкой) устройство отключается. Чтобы включить выключателем - нужно его отключить, и снова включить - устройство включится. С сервера так же можно включать/выключать при отключенном выключателе. Устройство так же будет исправно включаться/выключаться. Дебаг выводится в монитор порта.
3) Для установки необходимо:
-распаковать файл relays.ino в папку с ams
-вписать в начало файла arduino_mega_server

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

#define RELAYS_FEATURE
byte modulRel =      MODUL_NOT_COMPILLED; 
boolean REL_state[4] = {0};//рядом с boolean LED_state[4] = {0}; 
(в места, похожие по содержанию))
-в функцию voidsetup ()

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

  #ifdef RELAYS_FEATURE
    relInit();
  #endif      
-в функцию void loop()

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

    #ifdef RELAYS_FEATURE
      rel_control();
    #endif      
-на вкладке server_ajax

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

#ifdef RELAYS_FEATURE
void SetREL() {
  if (StrContains(HTTP_req, "REL1=1")) {
      rel_sw(0, 1);
  } else if (StrContains(HTTP_req, "REL1=0")) {
      rel_sw(0, 0);
    }

  if (StrContains(HTTP_req, "REL2=1")) {
      rel_sw(1, 1);
  } else if (StrContains(HTTP_req, "REL2=0")) {
      rel_sw(1, 0);;
    }

  if (StrContains(HTTP_req, "REL3=1")) {
      rel_sw(2, 1);
  } else if (StrContains(HTTP_req, "REL3=0")) {
      rel_sw(2, 0);
    }

  if (StrContains(HTTP_req, "REL4=1")) {
      rel_sw(3, 1);
  } else if (StrContains(HTTP_req, "REL4=0")) {
      rel_sw(3, 0);
    }
}
#endif      
-там же в команде void responseGeneric()

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

    cl.print("<REL>");
      if (REL_state[0]) {cl.print("on");}
                   else {cl.print("off");}
    cl.println("</REL>");

    cl.print("<REL>");
      if (REL_state[1]) {cl.print("on");}
                   else {cl.print("off");}
    cl.println("</REL>");
    cl.print("<REL>");
      if (REL_state[2]) {cl.print("on");}
                   else {cl.print("off");}
    cl.println("</REL>");
    cl.print("<REL>");
      if (REL_state[3]) {cl.print("on");}
                   else {cl.print("off");}
    cl.println("</REL>");
- в void parseRequest() в секцию request_generic

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

SetREL();
- теперь на sd карте - аналогично sample2 создаём кнопки, и привязываем к коду в js

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

var strREL1 = "";
var strREL2 = "";
var strREL3 = "";
var strREL4 = "";
var REL1_state = 0;
var REL2_state = 0;
var REL3_state = 0;
var REL4_state = 0;
....


        if (this.responseXML.getElementsByTagName('REL')[0].childNodes[0].nodeValue === "on") {
            document.getElementById("REL1").innerHTML = "REL 1 is ON";
            REL1_state = 1;
          } else {
              document.getElementById("REL1").innerHTML = "REL 1 is OFF";
              REL1_state = 0;
            }
        if (this.responseXML.getElementsByTagName('REL')[1].childNodes[0].nodeValue === "on") {
            document.getElementById("REL2").innerHTML = "REL 2 is ON";
            REL2_state = 1;
          } else {
              document.getElementById("REL2").innerHTML = "REL 2 is OFF";
              REL2_state = 0;
            }
        if (this.responseXML.getElementsByTagName('REL')[2].childNodes[0].nodeValue === "on") {
            document.getElementById("REL3").innerHTML = "REL 3 is ON";
            REL3_state = 1;
          } else {
              document.getElementById("REL3").innerHTML = "REL 3 is OFF";
              REL3_state = 0;
            }
        if (this.responseXML.getElementsByTagName('REL')[3].childNodes[0].nodeValue === "on") {
            document.getElementById("REL4").innerHTML = "REL 4 is ON";
            REL4_state = 1;
          } else {
              document.getElementById("REL4").innerHTML = "REL 4 is OFF";
              REL4_state = 0;
            }
....
  strREL1 = "";
  strREL2 = "";
  strREL3 = "";
  strREL4 = "";

.....
function GetButtonRel1() {
  if (REL1_state === 1) {
    REL1_state = 0;
    strREL1 = "&REL1=0";
  } else {
      REL1_state = 1;
      strREL1 = "&REL1=1";
    }
  }
  function GetButtonRel2() {
  if (REL2_state === 1) {
    REL2_state = 0;
    strREL2 = "&REL2=0";
  } else {
      REL2_state = 1;
      strREL2 = "&REL2=1";
    }
  }
  function GetButtonRel3() {
  if (REL3_state === 1) {
    REL3_state = 0;
    strREL3 = "&REL3=0";
  } else {
      REL3_state = 1;
      strREL3 = "&REL3=1";
    }
  }
  function GetButtonRel4() {
  if (REL4_state === 1) {
    REL4_state = 0;
    strREL4 = "&REL4=0";
  } else {
      REL4_state = 1;
      strREL4 = "&REL4=1";
    }
  }

Ну вроде ничего не забыл....
4) Отправка в md пока не работает, но "почва" подготовлена. Не могу склеить строковую переменную с byte)), а в разные объекты пихать не хочется. Мог кстати что-то упустить, половина делалось методом тыка)). Пишите, исправимся.
Читал-читал, но так и не нашол полного ответа. Вы смогли реализовать полностью? (работу как вы задумали, и работа с сервером MJ) .
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Подключение железа к AMS

Сообщение nick7zmail » Вс окт 13, 2019 1:32 pm

Как бэ да...всё работало на тот момент уже...только на этапе стэнда. Конечного устройства на AMS у меня нет...ремонт и разводка электрики не те.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
eGorka
Сообщения: 182
Зарегистрирован: Чт ноя 24, 2016 10:47 am
Благодарил (а): 5 раз
Поблагодарили: 25 раз

Re: Подключение железа к AMS

Сообщение eGorka » Вс окт 13, 2019 7:52 pm

Интересно, а вообще АМС у кого нибудь работающий есть?
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Подключение железа к AMS

Сообщение serghei » Вс окт 13, 2019 10:02 pm

Еще и интегрированные с гейтом MySensors )) . Да , теперь он не подключается к гейту , а сам им является. При этом элементарно решается задача работы со множеством датчиков на nrf24, nrf52832 и nrf51822
СпойлерПоказать
Screenshot_2019-10-11-16-04-38.png
Screenshot_2019-10-11-16-04-38.png (97.16 КБ) 4466 просмотров
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Подключение железа к AMS

Сообщение nick7zmail » Пн окт 14, 2019 6:43 am

А nrf это mesh сеть, или централизованная?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Подключение железа к AMS

Сообщение serghei » Пн окт 14, 2019 8:00 am

nick7zmail писал(а):
Пн окт 14, 2019 6:43 am
А nrf это mesh сеть, или централизованная?
nick7zmail , привет! Я таких тонкостей не знаю , но дефайном можно подключить режим репитера и все розеточные ноды станут ретрансляторами. К тому же в последней библе есть возможность передавать сообщения и команды с ноды на ноду , минуя гейт. Но тогда адреса надо жестко прописывать в коде.
Более подробно можно обсудить в телеге https://t.me/mysensors_rus . Скетч на форуме Тут
Так же могут слать и бродкастовые сообщения
СпойлерПоказать
MD.jpg
MD.jpg (243.41 КБ) 4443 просмотра


PS/ АМС живет в куче ипостасиях и на разных платформах
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Подключение железа к AMS

Сообщение nick7zmail » Пн окт 14, 2019 8:08 am

Ну если режим репитера есть - считай mesh сеть. Я просто в последнее время за зигби залипаю =D. Хотел тему с mysensors изучить как то...но потом в сторону зигби унесло =D.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Ответить