1 2 3 4 5 6 7 8 9 10 10/10 10,00оценок: 9

Arduino Mega. Контроллер теплицы. Хроники - 3.0

Тема в разделе "Умный дом", создана пользователем Анкор Плюс, 27.04.17.

Статус темы:
Закрыта.
  1. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Обновил прошивку контроллера теплицы - сделал формализованный топик REPORT для MQTT. Объясняю: если раньше при отсыле топиков clientID/SET/LIGHT/ON, clientID/SET/WATER/MODE/AUTO и т. п. - в ответ приходил топик clientID/REPORT, то теперь - приходит топик clientID/REPORT/ИМЯ_КОМАНДЫ, на примере clientID/SET/LIGHT/ON - в ответ придёт clientID/REPORT/LIGHT.

    Это позволяет в MQTT-клиенте настраивать подписку на такие топики, чтобы отслеживать состояние выполнения команды, на примере включения досветки: создаём в MQTT Dash плашку-переключатель, включаем публикацию и подписку, в публикации ставим топик clientID/SET/LIGHT/, действие "вкл" - строка ON, действие "выкл" - строка OFF. В подписке указываем топик clientID/REPORT/LIGHT, и параметр $.p2 (номер параметра для каждой команды - меняется, и зависит от команды).

    Всё - теперь при нажатии кнопки будет вкл/выкл свет, при этом при приходе топика отчёта о выполнении команды - кнопка поймёт, выполнена команда или нет.

    clientID везде выше - это имя клиента MQTT, которое вы дали в настройках в конфигураторе.

    Вроде ничего не забыл ;)
     
  2. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Добавил в ядро возможность для веб-сервера подключать динамические обработчики. Например, если хочется, чтобы при запросе http: /тут_адрес_esp/test.txt выдавались какие-либо данные, зависящие от логики конкретного проекта - то сделать это очень просто, например, вот так:

    Код:
      // мы можем назначить свои обработчики запросов к веб-серверу, если надо
      #ifdef CORE_ESP_WEB_SERVER
        // для примера - назначим обработчик обращения к файлу test.txt при помощи лямбда-функции
        ESPWebServer.on("test.txt", [](const char* uri, const char* params){
    
              ESPWebServer.send(
                200,  // код ответа
                "text/plain", // тип контента
                "This is dynamic handler!" // данные контента
                );
         
          });
      #endif
    И всё. В примере показано, как это делать при помощи лямбда-функций, но и обычные функции канают ;)
     
  3. HANTER333
    Регистрация:
    21.12.15
    Сообщения:
    1.617
    Благодарности:
    1.156

    HANTER333

    Живу здесь

    HANTER333

    Живу здесь

    Регистрация:
    21.12.15
    Сообщения:
    1.617
    Благодарности:
    1.156
    Подключил по схеме promavto, демо из библиотеки UTFT работает;)
     
  4. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300
    @DIYMan, универсальный исполнительный сейчас через 1-Wire регистрируется? с HMC5883. Что то не в какую не желает
     
  5. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300
    Зарегистрировался, и все, запускаться не желает
     
  6. tchernyavsky
    Регистрация:
    27.03.16
    Сообщения:
    473
    Благодарности:
    160

    tchernyavsky

    Живу здесь

    tchernyavsky

    Живу здесь

    Регистрация:
    27.03.16
    Сообщения:
    473
    Благодарности:
    160
  7. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    В смысле не желает? Вы директиву _DEBUG закомментировали? При работе по RS-485 эта директива должна быть закомментирована, чтобы не сорить в UART.
     
  8. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @Shelllonn, сейчас проверил - закачал прошивку, зарегистрировал, привязал все слоты к одному каналу полива, подключил на один пин светодиод. Модуль работает по RS-485. В конфигураторе дёргаю полив - светодиод загорается, выключаю полив - светодиод гаснет. Гироскоп к модулю подключен. Т. е. модуль общается по RS-485 и по 1-Wire нормально.

    Сейчас проверю привязку к окнам.
     
  9. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @Shelllonn, привязка к окнам тоже работает, как обычно. Другое дело, что из-за того, что у меня нет концевиков, а только компас - в этом случае в конфигураторе всегда показывается, что первое окно открыто, т. к. в EEPROM уже была сохранена одна крайняя позиция (я вручную ткнул проводком в нужный уровень, чтобы симулировать срабатывание концевика). И модуль у меня теперь всегда выдаёт информацию, что окно открыто, прошивка при этом адекватно реагирует, т. е. учитывает обратную связь.

    Если взять окно без обратной связи - то всё работает как и раньше: открыл окно - один светодиод из пары горит в процессе открытия. Закрыл окно - другой светодиод из пары горит в процессе закрытия.

    Вроде всё работает как и задумано. От вас нужна информация, что именно у вас происходит, т. к. пока на своей стороне я не вижу непоняток.
     
  10. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300
  11. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300
    В общем нечего у меня толкового не получилось. Регистрируется, открывает закрывает, но на крайних точках не останавливается.
    лог
    Close switch triggered!
    Open switch triggered!
    UpdateWindowStatus, Z is: -957
    SaveFeedbackBorder, window #0; value=-957; first value? yes
    SaveFeedbackBorder, window #0; value=-957; first value? no
    UpdateWindowStatus, borders are: FROM=-957; TO=-957
    UpdateWindowStatus? window #0 has no feedback position!
    UpdateWindowStatus - DIRECT MODE, window #0
     
  12. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Судя по этому логу, у вас не запомнено состояние для одного из концевиков. При этом видно, что у вас срабатывают СРАЗУ ДВА концевика - такого быть не должно, от слова "совсем". Концевики надо подсоединять.

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

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

    Логика прошивки написана именно так. Опрос концевиков происходит не моментально, а раз в N секунд (две, емнип). По ходу, придётся мне две кнопки подключать, чтобы убедиться, что всё работает согласно описанной логике. Вот, смотрите, что происходит периодически:

    Код:
        windowStatuses[windowNumber].isCloseSwitchTriggered = digitalRead(CLOSE_SWITCH_PIN) == CLOSE_SWITCH_TRIGGERED_LEVEL ? 1 : 0;
        windowStatuses[windowNumber].isOpenSwitchTriggered = digitalRead(OPEN_SWITCH_PIN) == OPEN_SWITCH_TRIGGERED_LEVEL ? 1 : 0;
    
    // если сработал один из концевиков - сохраняем значение оси Z с компаса
    // первым у нас идёт концевик закрытия, т.к. мы меряем от закрытия (0%)
    if(windowStatuses[windowNumber].isCloseSwitchTriggered)
    {
    SaveFeedbackBorder(windowNumber,z,true);
    }
    // если сработал концевик открытия - также сохраняем значение в EEPROM
    if(windowStatuses[windowNumber].isOpenSwitchTriggered)
    {
    SaveFeedbackBorder(windowNumber,z,false);
    }
    
    Как видно - при срабатывании одного из концевиков происходит запись текущего положения Z-оси в EEPROM, при этом для каждого концевика - адрес записи в EEPROM свой. Уже после этого - делается вот что:
    Код:
       // читаем значения интервалов
       int fromInterval, toInterval;
       ReadFeedbackBorders(windowNumber,fromInterval,toInterval);
    Т. е. получаются граничные значения оси Z из EEPROM. Ну а далее уже - простые расчёты. Я не вижу тут логической ошибки, но, похоже, надо самому проверять - вдруг где накосячил таки.

    Проверьте - всё ли вы правильно делаете, т. к. настраивается всё - и уровни срабатывания концевиков, и интервал обновления информации о позиции окна, и многое другое.
     
  13. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300
    Это у меня касяки. Герконы подключены через оптопару, что-то глючит, наводки. Завтра подключу геркон на прямую, или кнопку.
     
  14. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300
    Close switch triggered!
    Open switch triggered!

    Это магнит висит над герконом, выдает такое
     
  15. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    У вас они оба срабатывают, что ли? Главный принцип - концевики не должны срабатывать вместе. И должны быть подключены оба концевика.
     
Статус темы:
Закрыта.