Приветствую всех читателей Habr! В своей очередной статье снова поведу речь о ARDUINO. Хочу поделиться с вами очередным своим проектом, реализованном на микроконтролере nRF52832. Это датчик температуры и влажности на sht20 | (даташит) c монохромным дисплеем на электронных чернилах(E-INK|E-PAPER), который является частью экосистемы MySensors.


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

Идея девайса с таким функционалом зрела в голове давно, первая попытка реализовать эту идею была предпринята на микроконтроллере atmega328. И в принципе это было сделано, но хотелось большей энергоэфективности, более красочного вывода информации на дисплей.

версия на atmega 328



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



Датчик был реализован на двух платах, за основу схемы для дисплея была взята схема от распространенных дисплеев Waveshare | Даташит. Правда позднее были внесены незначительные изменения. Мозгом датчика является чип nRF52832 в модульной реализации от HOLYIOT. Сами модули заслуживают отдельного внимания, это самая беспроблемная реализация в плане работы в Ардуино IDE. В устройстве использованы модули — YJ-16048.



За основу программной реализации работы с дисплеем был взят «экземпл» распространяемый на сайте Waveshare Electronics. Правда и тут не обошлось без доработки.

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

Питание в датчике реализовано на двух батарейках cr2450, понижает до рабочих 3.3V микросхема TPS62745DSSR1 c довольно неплохими характеристиками | даташит. На данный момент можно уверенно сказать что работать даное устройство (описываемая версия) способно 1 год.

Потребление в режиме deep sleep — ~ 25мкА (с тестовой программой). Среднее потребление в рабочем режиме ~ 9мА.

Проект является открытым, гербер фалы доступны на сайте ОпенХардВар, код программы и библиотека доступны по ссылке (гугл драйв) Почему не GitHub? Просто так получилось, в окончательной реазизации(v2) будет и там.

Отдельного разговора для решивших повторить этот девайс заслуживает тема конвертации символов нужных шрифтов в C массивы. Мой опыт это конвертация с помощью программы TheDotFactory.

Процесс постараюсь описать с картинками :)


























Абсолютно любой шрифт, вы ограничены только возможностями памяти nRf52.… И нет смысла хранить все символы, Если вам нужны только цифры, это очень хорошо экономит место.

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



Но и эту проблему удалось решить(см.код программы). В итоге получилось так:









В видео демонстрируется работа дисплея.


Тут демонстрируется обновление данных на экране, после доработки:


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

Пример запуска трехцветного дисплея:


Настоятельно рекомендуется (для желающих повторить) к прочтению моя тема на форуме .org по этому проекту (на английском). Если язык проблема то всегда с радостью помогу всем в чате (установка плат, работа с микроконтролерами nRF5 в среде arduino ide, советы по работе с протоколом mysensors — @mysensors_rus

Комментарии (19)


  1. mkc
    19.05.2019 22:37

    А без arduino IDE с ним напрямую можно работать?


    1. Berkseo Автор
      19.05.2019 22:46

      берите сдк нордика например и работайте, это diy модуль, там выведен swd и сериал


  1. Tomasina
    19.05.2019 23:28

    Какая дальность связи? (Есть потребность использовать что-то подобное на даче, мониторить в том числе температуру в подвале и теплице).
    Почему две батарейки?
    К продаже планируете?


    1. Berkseo Автор
      19.05.2019 23:41
      +1

      дальность метров 15-20, ну вообщем стандартная длч большенства устройств на 2.4. Незнаю использование в подвале или в теплице данного девайса неразумно, проще использовать обычные без дисплеев. Две потому что много потребителей, будет и одна но емкость останется такой же. В продаже оно есть, но берут в основном из US :). У нас это мало кому интересно.


      1. Alex_ME
        20.05.2019 00:50

        Если использовать в квартире — насколько хватает? Как связь между комнатами? (Ясное дело, что стены тоже разные). Сейчас думаю тоже над своими датчиками погоды (я понимаю, что их сотни, но тут интерес не в результате), пока смотрел в сторону STM32L и NRF24L01.


    1. TedBeer
      20.05.2019 16:12
      +1

      Тут подробное описание системы с кучей датчиков, шлюзами, сбором данных, и как всё собрать в кучу и запрограммировать. Для удаленных датчиков используется чипы LoRa, которые бьют на несколько км при этом имея микроскопическое энергопотребление. В общем рекомендую ознакомиться: https://www.hackster.io/erictsai/lora-tooth-small-ble-sensors-over-wifi-lora-gateways-0aa109


  1. datacompboy
    20.05.2019 03:07

    Хм. Я правильно понял по видео, что постэффекты не побеждены — просто перерисовывается весь экран?
    Обычно для обновления части делают так — сперва выводят негатив прошлого, потом белый, и потом только новое.


    1. Berkseo Автор
      20.05.2019 10:14

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


      1. iig
        20.05.2019 11:12

        минус потребительским свойствам девайса сразу


        Показания термометра, например, можно пару раз в час обновлять. А то и реже.


      1. unwrecker
        20.05.2019 12:44

        Минус же в том, что прибор перемигиванием зазря привлекает к себе внимание пользователя? Ну так и на видео он мигает целиком довольно заметно. У киндла, кажется, интересно реализован индикатор яркоти в настройках — обновляется только его хвостик, весь экран не перерисоывается. Нельзя таким же образом стирать только ту часть обновляемой цифры, которая на новой цифре отсутствует и потом пририсовывать к ней недостающее? Нда… По сложности, наверное, это будет как всё остальное. Но зато тру ейнк :)


        1. olartamonov
          20.05.2019 13:48

          Здесь также надо понимать, что пляски с eInk — это любительские развлечения, проистекающие из невозможности заказать себе ЖК с нужными символами и большого потребления матричных ЖК-экранов.

          Серийные же метеостанции живут на комплекте батареек те же год-два с символьными ЖК-экранами, e-Ink в них ставят разве что ради внешнего вида.


  1. sav13
    20.05.2019 05:39

    А ссылку на экран можно?
    А то пришел модуль E-ink — при перерисовке экран несколько раз мигает


    1. AlanDrakes
      20.05.2019 10:40

      Попробуйте поменять настройки в таблице LUT. В даташите должно быть указано какие ячейки за что отвечают.
      В частности у дисплея www.waveshare.com/wiki/2.9inch_e-Paper_Module есть возможность делать и частичное обновление и полное обновление. Всё настраивается в коде.
      Частичное занимает около 0.5-0.7с, полное — 1.5~2.5с и так же мигает несколько раз.


  1. Iv38
    20.05.2019 10:47

    У Xiaomi несколько месяцев назад вышел девайс с E-ink и BLE одновременно. До этого действительно был либо показометр, либо с блютусом, но с LCD-экраном. А новый девайс очень классный.


  1. sirocco
    20.05.2019 10:51

    Ну прям уж «забыли выпустить производители». У сяоми давным давно есть такое устройство, причем и с LCD дисплеем, и с E-Link, а не так давно, с год примерно, появился термометр/гигрометр с часами, синхонизирующимися через интернет, и тот же блютуз запросто бъёт теже 15 метров. Если не нравятся облака и шлюжы из китая, то всегда можно заставить работать от малины. Готовое устройство стоит ~1000р.
    p.s. нет, я не против самоделок, я уважаю это и сам люблю по возиться, но иногда лучше взять готовое устройство уже в красивом корпусе и с тем же функционалом, чем городить своё в три раза дороже.


  1. augorelov
    20.05.2019 11:40

    Статья больше рекламная, чем техническая.


    1. Delsian
      20.05.2019 14:23
      +1

      Пожалуй. Но я поставил статье плюс за TPS62745 — как-то проглядел этот чип, а он хорош.


  1. drWhy
    20.05.2019 14:27

    Спасибо, познавательно. И вот это хорошо:
    «хочется просто повернуть голову в направлении датчика и посмотреть на температуру в комнате :)»
    А то скоро только захочется повернуть голову, а железка уже сама всё озвучила.


  1. Strange
    20.05.2019 17:26

    Для waveshare (good display) дисплеев есть хорошая либа — GxEPD2.
    Планирую проект на nrf52 + e-ink дисплей (1.54") но с mbed os, пока не уверен удастся ли использовать её (наверное нет).