Погодный сенсор для умного дома 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

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

 

 

 

 

 

 

 

 

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

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

  1. Максим:

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

  2. Максим:

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

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

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

    • Alexey Alexey:

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

  4. udavst:

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

Ваш отзыв