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

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

Тема в разделе "Теплицы и парники", создана пользователем Анкор Плюс, 19.05.18.

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

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Обновил на гитхабе, дело, как оказалось, за малым косяком - в конструкторе транспорта RS-485 не запоминал таймаут на чтение в переменную. Поправил.

    В прошивке пока сделал таймаут в 30 миллисекунд, это чудовищно много (примерно на 150 байт), но объясняется просто: в дебаг-режиме многое плюётся в Serial, а подсчёт таймаута в это время идёт. Короче, при выключенном дебаг-режиме там и 10 миллисекунд за глаза будет, пмсм ;)

    Также добавил возможность ограничивать диапазон сканирования: в метод begin контроллера передаётся максимальное кол-во модулей в системе (пока там поставил 20, максимум - 255). Это позволит в конкретной разрабатываемой системе оптимизировать процесс сканирования шины, и вообще - так грамотней ;)

    В прошивке - модулю назначил ID номер 10.

    Взял две Меги, соединил их по Serial1, загрузил на одну прошивку модуля, на вторую - прошивку контроллера. Контроллер выдаёт:

    Код:
    [C] begin.
    RS485: begin.
    [C] Start scan...
    Search for online modules - BEGIN!
    [C] Scan module #0 at transport #0
    [C] Module #0 not answering!
    [C] Scan module #1 at transport #0
    [C] Module #1 not answering!
    [C] Scan module #2 at transport #0
    [C] Module #2 not answering!
    [C] Scan module #3 at transport #0
    [C] Module #3 not answering!
    [C] Scan module #4 at transport #0
    [C] Module #4 not answering!
    [C] Scan module #5 at transport #0
    [C] Module #5 not answering!
    [C] Scan module #6 at transport #0
    [C] Module #6 not answering!
    [C] Scan module #7 at transport #0
    [C] Module #7 not answering!
    [C] Scan module #8 at transport #0
    [C] Module #8 not answering!
    [C] Scan module #9 at transport #0
    [C] Module #9 not answering!
    [C] Scan module #10 at transport #0
    [C] ONLINE MODULE FOUND: #10
    [C] Scan module #11 at transport #0
    [C] Module #11 not answering!
    [C] Scan module #12 at transport #0
    [C] Module #12 not answering!
    [C] Scan module #13 at transport #0
    [C] Module #13 not answering!
    [C] Scan module #14 at transport #0
    [C] Module #14 not answering!
    [C] Scan module #15 at transport #0
    [C] Module #15 not answering!
    [C] Scan module #16 at transport #0
    [C] Module #16 not answering!
    [C] Scan module #17 at transport #0
    [C] Module #17 not answering!
    [C] Scan module #18 at transport #0
    [C] Module #18 not answering!
    [C] Scan module #19 at transport #0
    [C] Module #19 not answering!
    [C] Switch to next transport!
    [C] Scan done, scanned: 20 modules, found: 1 online module(s), ask for slots!
    Search for online modules - DONE!
    [C] Ask for slots!
    
    Модуль выдаёт:
    Код:
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    Send ScanResponse message
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    CATCH MESSAGE!
    Messages::Scan
    
    Видно, что модуль откликнулся на запрос себя ответом "ScanResponse message", т. е. всё нормально, о чём свидетельствует результат сканирования в контроллере:
    Обращаю внимание: пока онлайн модуль просто помещается в список онлайн модулей, и - пока ВСЁ. Модуль, среди прочего - передаёт своё имя и другие настройки - пока они нигде не фигурируют, т. к. часть, отвечающая за опрос настроек слотов модуля - ещё не написана.

    В общем, часть сканирования - оттестирована, и модуль откликается на запрос контроллера. Так и запишем ;)

    З. Ы. Проверьте, отпишитесь, плз - так ли у вас, как описано выше. В принципе - на 99,99% вероятности - должно быть именно так, а косяк, который был - чисто по недогляду.
     
  2. Сергейфывчяфй
    Регистрация:
    25.02.12
    Сообщения:
    317
    Благодарности:
    266

    Сергейфывчяфй

    Живу здесь

    Сергейфывчяфй

    Живу здесь

    Регистрация:
    25.02.12
    Сообщения:
    317
    Благодарности:
    266
    Дмитрий, закачал в протеус, он явно не успевает, команда от модуля проходит, но контроллер не успевает его зарегить, второй модуль с адресом 5 не видит запрос.
     
  3. yatatoshka
    Регистрация:
    04.07.16
    Сообщения:
    9
    Благодарности:
    2

    yatatoshka

    Участник

    yatatoshka

    Участник

    Регистрация:
    04.07.16
    Сообщения:
    9
    Благодарности:
    2
    Верно, писал в спешке, увидел уже в опубликованном(
    В IDишниках все понятно, насчет регистрации упустил момент, почему-то подумал раз сканирование есть, значит и регистрация уже готова)
    Я вчера, когда уже раз 15й его запустил, подумал об этом же. Даже полез в src искать, где подправить, но потом отвлекся и забыл)
    В протеусе все как у вас! Пробовал запустить на железе, под рукой были две ардуино нано...
    Контроллер не увидел модуль, модуль ответил на запрос но далее ругнулся иероглифами:
    Код:
    -> Messages::Scan
    -> Send ScanResponse message
    -> ⸮⸮
    ->    датчикиCATCH MESSAGE!
    
    Подозреваю, это изза того, что UART один у наны, и связь и дебаг в одну кучу... Пробовал отключить дебаг, но тогда непонятно, что там происходит) Подумал, можно для такого софтСериал прикрутить.
    Понимаю, что отклонился от "шаблона", это я так, для общей информации... За мегами завтра съезжу, гдето были несколько штук, на них тоже попробую.
    Есть много разного железа, в том числе разные модули RS485, рассыпухой MAX485, буду бетатестером) :|:
     
  4. Сергейфывчяфй
    Регистрация:
    25.02.12
    Сообщения:
    317
    Благодарности:
    266

    Сергейфывчяфй

    Живу здесь

    Сергейфывчяфй

    Живу здесь

    Регистрация:
    25.02.12
    Сообщения:
    317
    Благодарности:
    266
    В протеусе модуль зарегистрировался только если их соединить RX-TX, если включить через MAX487 на терминале модуля видно, что "Send ScanResponse message", но модуль не регистрируется. Похоже не хватает быстродействия компа.
     
  5. HANTER333
    Регистрация:
    21.12.15
    Сообщения:
    1.617
    Благодарности:
    1.156

    HANTER333

    Живу здесь

    HANTER333

    Живу здесь

    Регистрация:
    21.12.15
    Сообщения:
    1.617
    Благодарности:
    1.156
    Если модули и MAX485 китайские, то можете поймать большой головняк:aga: (уже проходили)
     
  6. tchernyavsky
    Регистрация:
    27.03.16
    Сообщения:
    473
    Благодарности:
    160

    tchernyavsky

    Живу здесь

    tchernyavsky

    Живу здесь

    Регистрация:
    27.03.16
    Сообщения:
    473
    Благодарности:
    160
    Подтверждаю, сам я уже поимел гемора с этими модулями (штук 10 оказались дохлыми), сейчас пытаюсь победить NRF, но китайские глюки скорее доканают меня! :|::mad:
     
    Последнее редактирование: 24.07.19
  7. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Протеус, видимо, не успевает просто. Что касается тестирования в железе - то на момент отладки крайне рекомендуется использовать две Меги, чтобы Serial оставался свободным для отладочной информации. Соединять, как я писал выше - перекрёстно, т. е. RX к TX, 18 и 19 пины. На MAX485 пока тестировать нет смысла, т. к. заработает, 100%.

    Самое простое пока, на время отладки - увеличить таймауты приёма в прошивках модуля и контроллера, там есть комментарии прямо в прошивке, когда создаётся экземпляр класса RS485.

    Как я писал - у меня две меги, всё опрашивается, онлайн-модуль находится. Так что эксперименты с эмуляцией в протеусе можно считать некорректными - не может он в честную эмуляцию, выходит. Потому как даже если не реалтайм, то он должен корректно и с таким же коэффициентом замедления считать millis(), как и скорость эмулирования кода. Впрочем, на протеус больших надежд и не возлагалось ;)

    Я пока продумываю дальнейшую структуру кода - сейчас надо будет писать опрос слотов у модуля - какие модуль выставляет наружу, на какие подписывается. После этого - уже собственно логика диспетчеризации, а всякие настройки - оставим на чуть попозже. Быстро не будет, пока всё в процессе продумывания.
     
  8. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Можно. В конструктор класса RS485 передаётся ссылка на потомок класса Stream, передавайте туда вместо Serial ваш экземпляр SoftwareSerial, и всё ;)
     
  9. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Обновил на гитхабе, чуть дописал сканирование - теперь из ответа модуля уже выцепляется имя модуля, кол-во входящих и исходящих слотов, и всё это после окончания сканирования выводится из логики прошивки контроллера в Serial, по событию scanning().
     
  10. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

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

    olegmak3

    Живу здесь

    olegmak3

    Живу здесь

    Регистрация:
    14.08.11
    Сообщения:
    524
    Благодарности:
    442
    Адрес:
    Санкт-Петербург
    Странные скачки температуры ...С интервалом 5 минут скачки под 10 градусов?
    Вот мое, среднесуточные значения.
    06-08-19.png
     
  12. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300
    Цена деления, сутки) график за месяц
     
  13. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300
    @DIYMan, подскажи, где поменять выхлоп MQTT с запятой на точку. Teplica/Temp 21,37
     
  14. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Файл AbstractModule. cpp, строчка 1174:

    Код:
    Temperature::operator String() const
    {
        sprintf_P(SD_BUFFER,(const char*) F("%d,%02u"), Value,Fract);
        return SD_BUFFER;
    }
    [
    В форматтере "%d,%02u" - поменять запятую на точку. Но это отразится везде, и для температуры, и для влажности, и для влажности почвы - они все используют класс Temperature.
     
  15. Shelllonn
    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300

    Shelllonn

    Живу здесь

    Shelllonn

    Живу здесь

    Регистрация:
    04.02.16
    Сообщения:
    759
    Благодарности:
    300
    помогло
     
Статус темы:
Закрыта.