Ардуино термометр & гигрометр с E-PAPER на nRF52832 — или о том, что забыли выпустить производители

    Приветствую всех читателей 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
    Share post

    Comments 19

      0
      А без arduino IDE с ним напрямую можно работать?
        0
        берите сдк нордика например и работайте, это diy модуль, там выведен swd и сериал
        0
        Какая дальность связи? (Есть потребность использовать что-то подобное на даче, мониторить в том числе температуру в подвале и теплице).
        Почему две батарейки?
        К продаже планируете?
          +1

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

            0

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

            +1

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

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

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

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


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

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

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

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

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

                        +1
                        Пожалуй. Но я поставил статье плюс за TPS62745 — как-то проглядел этот чип, а он хорош.
                        0
                        Спасибо, познавательно. И вот это хорошо:
                        «хочется просто повернуть голову в направлении датчика и посмотреть на температуру в комнате :)»
                        А то скоро только захочется повернуть голову, а железка уже сама всё озвучила.
                          0
                          Для waveshare (good display) дисплеев есть хорошая либа — GxEPD2.
                          Планирую проект на nrf52 + e-ink дисплей (1.54") но с mbed os, пока не уверен удастся ли использовать её (наверное нет).

                          Only users with full accounts can post comments. Log in, please.