Погодный сенсор для умного дома Mysensors + Majordomo

201Погодная станция с NRF24L01 работает у меня уже несколько лет. Проблем с сенсором особо не было. Несколько раз в сильный дождь сенсор переставал передавать данные, но потом все восстанавливалось. В последнее время перестал показывать индикатор. Скорее всего окислились контакты. Или проводок где-то отпал. Все таки навесной монтаж — не самая надежная в мире штука. Основной недостаток существующего решения — отсутствие нормальной серверной части. Хотелось бы иметь возможность свеcти все данные в единую систему с возможностью отображения и использования этой информации для других  компонентов умного дома.

Заканчиваю длинную преамбулу. Далее будет статья про новый погодный сенсор на базе модуля с BME280, NRF24L01 и библиотекой Mysensors, подключенный к Majordomo серверу.

Технические характеристики:

  • Сенсор температуры/влажности/давления BME280 с интерфейсом I2C
  • Контроллер Atmega328 (подойдет Atmega168) 8МГц от внутреннего резонатора
  • Радиомодуль NRF24L01 2/4ГГц с протоколом Mysensors
  • Питание от двух элементов AA (Срок работы от одного комплекта не менее 2-х лет)
  • Периодичность отправки данных 5 минут
  • Ток потребления в режиме сна 11мкА
  • Ток потребления в режиме отправки 20мА (светодиод однако), длительность отправки 200мс

Принципиальная схема

%d1%81%d1%85%d0%b5%d0%bc%d0%b0

Список компонентов:

Итого около $7

Печатная плата

Плата спроектирована в программе Sprint Layers 6 для изготовления методом ЛЛТ (Лазерно-ламинаторной технологией) на одностороннем текстолите

Размер платы получился 20 x 55 мм

%d0%bf%d0%bb%d0%b0%d1%82%d0%b0-v1-0

200 201

Корпус

Корпус спроектировал для печати на 3D принтере с тем расчетом, чтобы верхняя часть была глухой, защищающая от попадания атмосферных осадков. Крышка с технологическим отверстием для сенсора BME280 снизу. Крепление к стене, раме окнаили любой другой вертикальной поверхности.

%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5

203 204 205

Программное обеспечение

Первоначально планировалось запитать NRF24 прямо от батареек, но почему то библиотечная функция sleep() не хотела отправлять NRF-ку в режим сна. Не помогли функции NRF24_PowerDown()/NRF24_PowerUP().

Потребление в режиме сна оставалось в районе 1.2-2мА. Видимо радиомодуль все же слушал эфир, не смотря на режим пассивной моды. Помогло переключение питания NRF-ки на отдельную ногу микроконтроллера. Благо их у меги в достатке. Но появилась друга беда.   После того как прописал в скетче:

#define MY_RF24_POWER_PIN 8

мой сенсор посылал первый пакет-презентацию и показания всех параметров, засыпал по функции sleep(), но вот после просыпания никак не хотел работать. Режим отладки показывал нормальную работу модуля, но пакеты на приемник не приходили. Видимо сбивались и не восстанавливались какие то настройки модуля.

Помог прямой хаккинг. Из библиотеки выдрал код инициализации NRF-ки, оформлен в виде отдельной функции, которая вызывалась после каждого пробуждения

После этого все заработало как часы. Модуль уходил в режим сна с потреблением 10-11 мкА (точнее мой прибор не мерит), затем выходил из него по таймеру, отрабатывал цикл чтения параметров и отправки длительностью 200 мс, моргая на это время светодиодом. Потребление BME280 было в рамках погрешности моего тестера, поэтому заводить его питание на вывод микроконтроллера не стал.

Итоговый скетч метеосенсора получился таким:

Работа до первого сна характеризуется горением светодиода и составляет со всеми представлениями Mysensors около 3 сек. На всякий случай оставил перезагрузку два раза в сутки (осталось от отладки, когда NRF-ка не выходила из сна)
Если будет все работать без этого в 39 строке изменить код, на

#define TM_RESET 0

Период опроса можно изменить в 37 строчке кода

#define TM_SLEEP 300000

Настройки GPIO для NRF-ки, номера ноды Mysensors и других параметров также задаются константами

Размер скетча получился 14080 байт, что вполне позволит использовать в проекте Atmega168 даже с загрузчиком.

arduino-ide

Подключение к Majordomo

Сервер Majordomo у меня работает на Orange PI PC под Armbian. К нему подключен такой вот NRF24L01 с внешней антенной.

Про Majordomo я напишу еще не одну статью, так что останавливаться здесь на нем не буду.

Модуль Mysensors ставится из маркета приложений

md-market

После этого на закладке Оборудование->Mysensors автоматически появляются все устройства с этим интерфейсом

md-mysensors-scan

Заходим в сенсор с нашей нодой 60 и связываем все параметры с объектами MD (они создаются автоматически в Оборудование->Простые устройства

md-mysensors

После этого можно использовать эти объекты в панелях и сценах интерфейса Majordomo.

md-%d1%81%d1%86%d0%b5%d0%bd%d0%b0

Подводим итоги

Использование библиотеки Mysensors значительно упрощает разработку и использование самодельных устройств в системе умного дома.
Сам по себе BME280 оказался очень интересным сенсором. Как пишут умные люди этот сенсор гораздо более прогрессивный, чем DHT22 (я уже не говорю про DHT11).

В ближайшем будущем у меня запланирована разработка еще нескольких устройств с NRF24 и Mysensors. В батарейных девайсах планирую применить Atmega328/168 в корпусах TQFP, сенсоры NRF24L01 mini и питание от CR2032.

А данный сенсор отправляется на боевой дежурство за окно

206

Для тех кто захочет повторить, выкладываю чертежи печатной платы и корпуса и скетч проекта

 

 

 

 

 

 

 

 

Вы можете оставить отзыв или трекбек со своего сайта.

54 комментария на «Погодный сенсор для умного дома Mysensors + Majordomo»

  1. Максим:

    А разве не хватает ресурсов самой EPS8266-01? ESP сама прекрасно умеет работать с сенсорами и отправлять данные по сети.

  2. Максим:

    а, там не есп стоит, а NRF, сбил с толку схожий внешний вид ))

  3. Александр:

    То есть питание беспроводного модуля осуществляется от цифрового пина контроллера?

    • Alexey:

      Да. Именно так. Без этого библиотека Mysensors никак не хотела отправлять NRF-ку в сон, хотя с другим библиотеками NRF24 нормально работало и с постоянным питанием. Может быть это проблема конкретных китайских NTF-ок

      • berk:

        не нужно питанием радиомодуля рулить с меги, реинит не нужен. На статью случайно наткнулся, проект классный, кинул ссылки в чаты сообщества. побольше бы таких…

        • Alexey:

          Может быть. Но пара модулей у меня не хотела иначе в сон уходить. Вернее уходили, но с потреблением 2мА
          Для это и придуман сей огород

  4. udavst:

    У меня такая штука пару лет за окном работает, датчик такой же, вместо контроллера — ардуина pro mini, потребляет тоже какие-то микроамперы (светодиоды убраны, стабилизатор убран, фьюзы перешиты под 1.8v, дальше всё равно nrf-ка не передаёт), nrf’ка нормально уходит в сон (пользуюсь RF24). Всё это было первый год, потом (как раз совпало с попыткой замены батареек на аккумы с солнечной батареей) стало высаживать очень быстро, аккумы дохлые были, решил с ионистором попробовать — не,не может заярдиться, оказалось BME начал постоянно потреблять несколько мА. Пришлось его тоже на ногу контроллера повесить. Тепепь вот работает, правда садиться не медленно (за 3 месяца с 3.1v до 3.03v) хотя возможно, из-за самых дешёвых батареек космос, а может, потому, что пашет на 16Mhz с кварцом.

  5. Maksim:

    По этому лучше делать как у автора :
    Голый Контроллер Atmega328 (подойдет Atmega168) 8МГц от внутреннего резонатора

  6. Andrey:

    Добрый день!
    Два вопроса автору:
    1. А можно датчик BME-280 заменить на два датчика темп/влаж (напр. DHT-22 или HDC-1080) с сохранением столь же низкого энергопотребления?
    2. Если заменить простой NRF модуль на модуль с антенной и усилителем, тока с одной ноги микроконтроллера не хватит? Или может, можно 2-3 ноги в параллель соединить?

  7. Andrey:

    И третий вопрос
    Можно ли добавить в передаваемые данные напряжение батареи?

  8. Andrey:

    Спасибо за ответ!
    Начинаю пробовать,
    если расстояния не хватит с обычным NRF , попробую подключить NRF с усилителем через мелкий MOSFET.

  9. Andrey:

    а какой загрузчик должен быть прошит в ардуине?

    • Alexey:

      Я обычно прошиваю Optiboot
      Он корректно со сторожевым таймером работает

      • Andrey:

        Добрый день! Попались три версии оптибута 6.2, 7.0 и 8.0. какую лучше использовать?

      • Никита:

        На MySensors есть бутлоадер позволяющий прошивать ардуинки по воздуху (через NRF) без дополнительной памяти итд итп.
        Но конечно не особо имеет смысл при батарейном питании в финальной версии.
        Зато во время разработки в труднодоступных местах — это божественно — прошивать не подключаясь проводом, всегда мечтал об этом! Прошивается из контроллера сети, поддерживающего функцию OTA или там есть специально сниффер-дебаггер-логгер сети с такой функцией (под Win) — MYSController
        А еще в последних версиях IDE Adruino уже есть новый бутлоадер, вроде как даже оптибутовский, в котором исправили проблему бесконечного watchdog. Правда вроде забыли поменять указание занимаемого места…

        • Никита:

          А да, из недостатков «воздушного» бутлоадера — он обязан при старте связаться с gateway для проверки наличия прошивки. Что сильно увеличивает время старта, особенно если никто не отвечает (контроллер без поддержки функционала, прошивка не назначена и MYSController закрыт) — он спрашивает несколько раз. В итоге время старта может быть 3-6 секунд…

          • Alexey:

            Там есть два разных бутлоадера. Dual Optiboot — который работает с внешней микросхемой и MysBootloader, который навешивается поверх обычного
            Оба решение не без недостатков. В первом случае — лишняя микросхема. Во втором, что прошивка возможна только по воздуху. При обычной прошивке загрузчик стирается. Ну и время начальной загрузки, как вы правильно заметили. Так как сенсоры работают стабильно, решил обойтись пока без прошивки по воздуху

  10. Александр:

    На даче подобный сенсор работает от ионистора и солнечной панельки.
    Вместо ВМЕ280 использую Si7021. АТМега запитана напрямую, а NFR через ХС6206.
    Параллельно ионистроу включена пара синих светодиодов, что бы лишнее сбрасывать.
    Светового дня, даже сейчас, вполне хватает для нормального подзаряда, что можно увидеть на 5ом графике.
    https://thingspeak.com/channels/120642

    • Andrey:

      а какая ёмкость ионистора?

    • Alexey:

      А можно поподробнее про схему зарядки ионистора от панели?

      • Александр:

        Схема совсем простая:
        Напряжение на солнечной панели, при прямом солнечном свете, доходит примерно до 6В.
        Для ионистроа на 5,5В — это плохо. Поэтому надо как то стравливать лишнюю напругу, я взял пару синих светодиодов, на которых падение напряжения составляет примерно 2,2 — 2,3В (сейчас точно не помню), включил их последовательно, после чего подключил параллельно панельке и ионистору.
        В результате, когда напряжение поднимется выше ~4,5В светодиоды открываются и стравливают лишнее, когда напряжение меньше — они закрыты.

        • Никита:

          а почему не захотели поставить стабилитрон близжайшим номиналом?

          • Alexey:

            Наверное еще с диодом, чтобы при пониженном напряжении солнечного элемента ионистор не разряжался

          • Александр:

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

  11. Александр:

    Емкость 4Ф, солнечная панелька 4х6 см выдает 40мА.

  12. Никита:

    У людей было огромное множество проблем и головной боли из-за неправильного и плохого питания NRF. Крайне настоятельно рекомендуется ставить конденсатор — часто паяют прямо на PLS гребенке сверху платы.

    Еще хочу предупредить других читателей, что использовать встроенную понижайку на 3.3в ардуины для питания nrf плохая идея. Особенно для pro mini если не ошибаюсь — вплоть до выхода из строя оной понижайки. При питании от 5 в ставьте отдельное питание для NRF и обязательно с конденсатором.

    По поводу не выхода из сна при питании от ноги — лично мне сразу приходит в голову проблема питания в момент старта, и (имхо) очень уж просится туда транзистор. Я не гуру электроники и не знаю сколько там будет утечки, но Вы не пробовали спросить и поискать на форуме MySensors касательно этой проблемы?
    Вот нашел еще статью про режимы и потребление, может будет интересно: http://blog.sci-smart.ru/2014/02/nrf24l01.html

    И кстати там есть функция для отправки напряжения батареи, и судя по https://github.com/Shagrat2/majordomo-mysensor/blob/master/modules/mysensor/phpMS.php#L127 она поддерживается Вашим контроллером сети Majordomo (точнее указанной частью)…

    Вы не тестировали под краном корпус? там случайно не будет по контуру затекать вода и оставаться тонким слоем по днищу? Оно конечно не достанет до электроники, но вот контакт батарейки близко, не знаю как он понравится китайскому железу… и батарейке…

    • Alexey:

      5В вообще зло для NRF-ки. Причем не только по питанию, но и по SPI
      Когда тестировал проект — подключал NRF24 к UNO. При этом NRF питал от 3.3, все как положено. Но вот логика на выходе UNO была 5В. И те радиомодули, которые поработали в такой схеме, отжирали 1мА в режиме сна. Причем даже с выключенным питанием. Я так понимаю, полетели ключи, которые входы NRF переводят в высокоимпедансное состояние в режиме сна. Причем на работоспособность это никак не сказывалось, только на энергопотребление. Так и запорол несколько модулей. Теперь они стоят в устройствах с сетевым питанием

      Решил что самое надежное — питать и контроллер и NRF 2.7 — 3.3В (на встроенном кварце вполне стабильно все работает)

      Корпус вроде не течет — осень пережил очень дождливую на улице. А вот при минусе алколайновые батареи замерзли. Резко понизилось напряжение, потом сенсор перестал выходить на связь. Разорился и купил литиевые энейджайзеры. Теперь при минусе все нормально

      • Никита:

        Спасибо! про батарейки весьма интересная и полезная информация!
        На энерджайзеры это Вы очень сильно раскошелились!
        Не было ли смысла купить литий-ионный аккумулятор и потом подзаряжать?
        Какая средняя и самая низка минусовая температура у Вас?
        Накопал тест разных типов аккумуляторов, похоже можно использовать все, кроме аклайновых… Но энерджайзеры действительно круты, как и их цена…
        https://fcenter.ru/online/hardarticles/tower/25880-Batarejki_na_moroze

        • Alexey:

          Литий ионные аккумуляторы заряд теряют процентов на 90. Литий полимерные чуть лучше, но тоже теряют. Например фотик у меня на морозе садится моментально, если его на теле не держать. Никель-металгидридные чуть получше, но у них изначально напряжение низкой. Их нужно 3 штуки ставить
          Солевые батареи тоже теряют, как и щелочные, хотя чуть лучше. Все советуют именно литиевые батарейки. Энержайзер в ДНС оказался дешевле чем GP. Других в доступности не было.
          Самая низкая минусовая у нас -35С. Нынче в ноябре было где-то -15. Средняя тоже в районе -12 — -15

          • Никита:

            Я думаю, что стоит добавить добавить в статью (или отдельную) про питание и проблемы на морозе.
            Поверхностный поиск гугла на эту тему не дает результатов. Про источник питания на морозе — перебрасывает на смартфоновые и автомобильные проблемы…
            У нас потеплее будет. Самая низкая была вчера — днем нулевая была, снег первый пошел. Последние пару лет зимой наверное -10..-12 в среднем или максимум, уже не помню. Даже -20 редкость.

          • Alexey:

            Статейки попадаются
            https://fcenter.ru/online/hardarticles/tower/25880-Batarejki_na_moroze
            https://otvet.mail.ru/question/18255911
            Может соберусь, исследование сделаю свое

  13. Александр:

    Алексей, спасибо за прекрасный материал. Несколько вопросов.
    1. На Али практически нет 168 чипов, а 328 сильно прожорливее?
    2. Питание от CR для уличного датчика подойдет?

    • Alexey:

      1. Есть такие http://ali.pub/2wsj74
      Только мне вместо 168PA продавец прислал 168V, которые на 10МГц. Пришлой половину денег с него востребовать
      По поводу прожорлевее, я бы не сказал. Разве что ценой. С буковкой P все малопотребляющие
      Появились 328PB с кучей новых фич http://ali.pub/2wsji7
      Простенькие сенсоры получаются из Atmega88
      2. У CR2032 есть неприятная особенность — проседание напряжения при нагрузке. У меня получалось, что NRF не мог стартовать на немного подсевшей батареи, потом не уходил в сон и батарея заканчивалась очень быстро
      А вот CR2450 — вполне рабочий вариант

  14. Никита:

    Позвольте ответить Вам вместо Сергея:
    1. В проекте как раз использован чип 328, а сказано что можно заменить на 168. Потребление необходимо в даташите и читать и сравнивать, а про потребление вообще — смотрите ссылку в конце комментария.
    2. СR2032 тоже есть литивые и имеют емкость в среднем около 200мАч, а то время как литиевая (почему — см. нашу переписку выше) формата АА имеет 3-4 Wh
    (источник: https://habr.com/company/madrobots/blog/364773/)
    Что примерно раз в десять больше, а от этого зависит длительность работы устройства.
    Про LIR2032 и немного CR2032: https://habr.com/post/315110/
    Еще возникает вопрос отдаваемого тока:
    возьмем первую попавшуюся из гугла CR2032 https://www.compel.ru/infosheet/EEMB/CR2032
    Продолжительный ток разряда (МАКС) 3мА
    Импульсный ток разряда (МАКС) 15мА
    Что означает, что не факт что одна потянет питать передатчик, а он особенно в момент старта/передачи кушает прилично! Вероятно надо в паралель хотябы две, и наверное с конденсатором (утечки в конденсаторе какие будут?) ну и конечно же меньшее время работы при прочих равных. Если взять литиевые с учетом вышесказанного — то да, можно CR2032. Это мое мнение, и я не эксперт…

    А насчет потребления (очень крайне настоятельно рекомендую всем, и Сергею — думаю сможет выжать еще больше из устройства, если еще не читал, но может понадобиться помучиться над кодом из-за библиотек):

    http://www.gammon.com.au/power

    • Александр:

      Вместо CR2032 можно использовать CR2450, с заявленной емкостью 550-610 мАч.
      Я такие использую в самодельных пультах дистанционного управления (например насосом на даче).

  15. Александр:

    Всем спасибо за подробные ответы. Буду мастерить датчики с учетом этих рекомендаций.

  16. Александр:

    «После этого на закладке Оборудование->Mysensors автоматически появляются все устройства с этим интерфейсом…».
    Установил МД + MySensors — устройства не появились. Что не так? Видимо, какие-то манипуляции до того нужно выполнить?

  17. Юрий:

    Здравствуйте. Решил повторить Вашу конструкцию, но не нашёл информации о Fuse. Есле не сложно, то скажите, как Вы ставили Fuse?

  18. Юрий:

    Алексей, спасибо за подсказку. С FUSE разобрался, датчик запустил, но, увы, вопросов стало только больше. Строить умный дом пока не готов ( я начинающий «жулик» :)) ). Передаю данные об атмосферном давлении через ESP8266 на Народный мониторинг. Через это возникла насущная потребность в выносном датчике. Датчик ( благодаря Вашим знаниям) собрал, но в коде заблудился. Из теории знаю, что для работы NRF24 следует создавать ‘трубу’и задавать номер канала. Найти эти шаги в Вашем коде не смог. И главное, не понял, как организован режим Sleep. В теории WDT
    дёргает процессор раз в 7-8 секунд. Как задержка увеличивается до 5 минут — загадка
    ( для меня). Если можно, посоветуйте где почитать про решение этих задач.

    • Alexey:

      Я тоже раньше с NRF24 мучился
      Потом попробовал Mysensors и просто прозрел.
      Нормальная сеть строится. Есть бродкаст пакеты, есть адресные. Можно делать ретрансляторы и шлюзы. И, главное, отлично подключается к системам типа MajorDoMo, Domoticz и OpenHUB.
      Номер узла может формироваться автоматически (типа DHCP) или явно. Слип там тоже реализован. Причем и для контроллера и для модема
      Для ESP8266 и ESP32 есть готовый код шлюза (MQTT и на сокете). В принципе не сложно доработать код и для отправки на народный мониторинг, хотя возможности этого сервиса довольно убогие.

  19. Андрей:

    Супер!!! Можно ваш проект разместмть на форуме майсенсорс ру? естественно с ссылкой на источник

  20. Константин:

    Подскажите, а как можно корректировать показания датчиков? Температуру показывает нормально, а давление и влажность нужно менять.

Ваш отзыв

Вы должны войти, чтобы оставлять комментарии.