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 км от Краснодара
    Немножко начал возиться со списком датчиков конфига:

    screen.png

    Уже отображается список, снизу будут кнопочки - добавить/удалить, с редактированием заморачиваться не буду :)
     
  2. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Добавление/удаление датчиков сделано, в локальном конфиге в софте они теперь запоминаются:

    screen.png

    Осталось сделать выгрузку конфига обратно в контроллер и рестарт ядра при выгрузке конфига ;) На днях займусь.
     
  3. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Ещё ж надо вводить настройки SD-карточки, по идее - типа пина CS для неё. Надо помозговать на тему команды, типа - скажи, мил друг, какая периферия, помимо датчиков, юзается? А то у меня сейчас команда GET=TRANSPORT есть, но она по мнемонике завязана на список поддерживаемых транспортов, и тудыть SD-карточку добавлять - не очень красиво.

    Есть вариант - вообще не париться, и ввести просто ещё один тип записи в конфиг - настройки SD. Если там сказано - юзать SD - значит, юзать SD. Буду думать, как сделать лучше.

    Спешить с этим - не буду, т. к. тут вопрос идеологический: всю периферию не учтёшь, и в случае с той же SD-картой проще в логике конкретного проекта её инициализировать, кмк. А то, играючи с настройками, недолго и заблудиться в их развесистости. Поэтому пока считаем, что основные настройки - сделаны, и надо заняться загрузкой конфига в контроллер.
     
  4. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Приготовил два устройства с микроконтроллерами АРМ и модулями LoRa 868. На одном стоит SAMD21E18A (32 ноги), на другом SAMD21G18A (48 ног). Настроены на прием и передачу. Проверено, работают. Связь устойчивая, уровень сигнала большой. Отличная возможность поупражняться с "маленькими" АРМ. Отправлю Диме с ближайшей оказией.

    Кстати, запускал год назад Ардуино и на камне STM32F103. Можно вернуться и протестировать и его. Но с памятью у них по моему проблемы. Уточню
     
    Последнее редактирование: 22.01.18
  5. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Не могу запустить новую версию Arduino Core. Зависает в setup.
     
    Последнее редактирование: 22.01.18
  6. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Ага, вижу, поправлю.
     
  7. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Обновил, проверил на голой Due - работает. Я там просто в какой-то версии добавил при старте ядра завершение работы по выбранному порту для RS485 и ESP, чтобы при смене настроек UART не висел инициализированным. Т. е. зависало, похоже, когда у вас конфиг не вычитывался, и ядро просто тупо останавливало Serial. Добавил флаг успешности вычитки конфига в ядро, плюс - принудительно запретил ESP и RS485 инициализироваться на нулевом UART.

    Проверяйте.
     
  8. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    @timon2006, у меня к вам есть вопрос, надеюсь на консультацию ;) Размышляю сейчас над механизмом реализации опроса устройств по радиоканалу, и вижу сходу два подхода:

    1. Более простой - мастер бросает в эфир приглашение на выдачу показаний, слейв - откликается пакетом. Тут всё понятно и прозрачно, однако, такой подход более требователен ко времени - ситуация, когда мы опрашиваем 50 устройств, а включены в это время всего два из них: очевидно, что в этом случае 48 запросов уйдут в никуда, т. е. потратим 48*N времени, просто ожидаючи ответов;

    2. Вызывающий вопросы - слейвы сами кидают в эфир данные, а мастер - просто слушает эфир и обрабатывает входящие пакеты. Однако, в этом случае могут возникнуть наложения, когда N устройств одновременно сорят в эфир данными.

    Как я понимаю пункт номер 2 - в этом случае надо реализовывать что-то типа TDM, т. е. разделения устройств по таймслотам: например, мы решили, что для всех устройств у нас будет общий фрейм длительностью 50 секунд. Соответственно, если устройств 50 - то каждому из них выделен свой таймслот в 1 секунду - первому - секунда номер 1 и т. д. Пока всё более-менее понимаю, однако...

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

    Вопросы:

    1. Я хоть чуть-чуть в правильном направлении понимаю эту теорию?
    2. Какой вариант из двух предпочли бы лично вы?

    Заранее благодарен за консультацию.
     
  9. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Прошу прощения, что вмешиваюсь. Может посмотреть как организована сеть XBee. Не все конечно, но идею. Отправляю русское описание работы XBee.
     

    Вложения:

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

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Спасибо, гляну. Хотя XBee мне и не особо интересен, ибо дороговато.
     
  11. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

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

    Появилась небольшая шабашка, несколько дней буду занят, а потом - надо будет таки дописать выгрузку конфига в контроллер. Тогда и тестовый скетч сильно изменится, в плане упрощения ;)
     
  12. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Модули XBee применять не требуется. Можно попробовать применить их алгоритм в упрощенном варианте это подходит к модулям LoRa и другим радиоустройствам.
    Идея такая:
    Система состоит из "Координатора" (мастер ядро) в дальнейшем - координатор и slave (внешние устройства) в дальнейшем - устройство.
    Внешние устройства "слушают" эфир.
    У координатора два режима работы:
    1) - регистрация устройств в сети
    2) - передача / прием информации.
    В начале включения ядра координатор отправляет в эфир команду регистрации устройств в сети.
    Внешние устройства при начальном включении питания сбрасывают признак регистрации в сети, пароль доступа и другую исходную информацию.
    В начале отвечает устройство с наименьшим порядковым номером. Координатор получает данные устройства, имя и другую информацию. Записывает/регистрирует в свой лист устройств. Назначает при необходимости порядковый номер в сети (так поступает XBee), присваивает пароль, устанавливает признак регистрации в сети. Далее устройство со следующим номером с задержкой 10 ms (или другое время) передает свою информацию. И так до окончания включенных устройств.
    На регистрацию 255 устройств потребуется примерно 3-10 секунд.
    Все устройства слушают номера регистрируемых устройств и отвечает только в том случае когда все устройства с младшими номерами уже зарегистрировались.

    Задержка ответа устройства на сигнал координатора о регистрации зависит от номера устройства.
    Так к примеру у устройства с номером 1 задержка = 0 у №2= 10мс, №3=20мс, №4=30мс. и. т. д.
    Когда процесс регистрации текущего устройства закончился, координатор отправляет сигнал разрешения регистрации следующего устройства.

    Режим регистрации запускается только один раз при включении Координатора поэтому время регистрации всех устройств практически не важно. В принципе его можно уменьшить. К примеру у нас зарегистрировалось устройство с №20.
    Устройства с номерами 21-40 отсутствуют. В этом случае устройства со старшими номерами могут вычесть время ожидания младших (отключенных) устройств.

    После регистрации координатор может опрашивать устройства, отправлять и получать информацию.

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

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

    Некоторым устройствам (датчики температуры и. т. д) можно назначать интервалы сна для снижения энергопотребления. Они также могут накапливать информацию и передавать за один сеанс связи.
    Для устройств, требующих немедленной реакции этот режим не применяется.

    Примерно все в общих чертах.
     
    Последнее редактирование: 23.01.18
  13. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    Поздравляю!
     
  14. promavto
    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958

    promavto

    Разработка контроллеров

    promavto

    Разработка контроллеров

    Регистрация:
    27.02.16
    Сообщения:
    1.960
    Благодарности:
    1.958
    Адрес:
    г. Москва, Зеленоград.
    DUE c 24C64 продолжает виснуть. На "чистой" (без памяти). не виснет.

    Если закомментировать строку вывода в порт - setup проходит. Что то еще с выводом в порт.
    Core. saveConfig (unitTestConfig, sizeof (unitTestConfig), true);

    if (Core.loadConfig()
    {
    /*Serial.println (F("LOADED FROM EEPROM!");*/
    }
    else
    {
    Serial. println (F("ERROR LOADING CONFIG!");
    }

    Все равно виснет на следующей строке:
    ESP SETTINGS FOUND !
    AP Name: ESP
    AP Password: 12345678
    Router SSID: Fly
    Router Password: HtRj7UJQ
    RS485 SETTINGS FOUND!
    LoRa SETTINGS FOUND!
    FractDelimiter:,
    TemperatureUnit: 0
    SensorsUpdateInterval: 5000
    End of config.

    Завис.
     
    Последнее редактирование: 23.01.18
  15. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889

    DIYMan

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

    DIYMan

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

    Регистрация:
    19.05.13
    Сообщения:
    8.309
    Благодарности:
    6.889
    Адрес:
    80 км от Краснодара
    Ясно, буду разбираться, в чём дело. Сейчас закомментирую все вызовы end, и выложу - будем смотреть, в этом ли дело ;)
     
Статус темы:
Закрыта.