Беспроводной мини датчик температуры и влажности с E-PAPER дисплеем

Здравствуйте! Хочу поделиться с вами своим новым опенсорс проектом. Из названия статьи понятно что речь пойдет о датчике температуры и влажности с дисплеем на электронных чернилах. Уже достаточно давно я попробовал сделать проект датчика температуры с такими дисплеями в виде ардуино модуля. С тех пор тема e-ink дисплеев меня заинтересовала.
Целью данного проекта была разработка миниатюрного датчика, сравнимого по размерам с обычными беспроводными датчиками температуры, но при этом получить еще и вывод данных на самом устройстве. И при всех этих условиях что бы устройство работало от небольшой батарейки достаточно долго. Что из этого получилось, прошу оценить и не скупится на комментарии.

Датчик работает на чипах nRF52, для данного проекта был выбран модуль от компании MINEW. Модуль небольшого размера, имеет 18 выводов, 13 из которых gpio, два варианта антенн, печатная и керамическая, так же на модуль устанавливается несколько вариантов чипов, nRF52810 и nRF52832, а после непродолжительного общения с менеджментом компании мне без вопросов поставили на эти модули чипы nRF52811. Так я кстати получил свои первые 811-ые и к тому же по цене в полтора раза ниже чем мог бы купить у поставщиков в России просто чипы, но это уже другая история. На модуле разведен вариант схема DC-DC и часовым кварцем. Размеры модуля 12мм х 15мм. Присутствует металлический экран.

Из линейки e-ink дисплеев выбор естественно пал на достаточно новую модель м размером экрана 1.02 дюйма GDEW0102T4. Стоимость одного дюйма электронных чернил составила 500 рублей, что мне показалось приемлемо. Небольшие трудности с разработкой платы под этот дисплей вызвал его разъем, 30 пиновый FPC c шагом в 0.5мм. Ширина FPC разъема намного больше ширины самого дисплея, что вызвало неудобство при проектировании. Но зато было проще с обвязкой дисплея, она проще чем на других моделях.

Из разнообразных цифровых сенсоров температуры и влажности я решил остановиться на сенсоре sht20, их и в достаточном количестве было у меня, простой достаточно, хорошая цена, удобный размер. Так же одним из плюсов можно назвать то что вместо sht20 при желании легко установить sht21, si7020, si7021, htu20d, htu21d и hdc1080, но последний вариант не самый очень ;).
Под датчик проектировалось 2 платы, одна под экран и его обвязку, вторая под радио модуль, сенсор температуры и влажности и батарейку. Ключевыми параметрами размеров плат были размеры экрана и батарейки. На плате с экраном были заложены отверстия под винты (1.4 х 3) для крепления платы к корпусу, на второй плате были сделаны вырезы для удобной установки винтов. Так как это DIY устройство я мог себе позволить поставить «вкусную» батарейку CR2450. Ну а если мне покажется когда-то что устройство толстовато, то я всегда смогу напаять держатель под батарейку CR2430. В итоге получилось две платы размерами 36мм на 26мм.

Корпус проектировался в СолидВоркс, модели плат были экспортированы из DipTrace в формате DXF, которые уже в СолидВоркс были преобразованы в 3D модели. Корпус состоит из двух частей и кнопки, Крепления половинок корпуса друг к другу сделано так же винтами(1.4 х 4) с одной стороны и выступающим «зацепом» с другой стороны. Сделаны два отверстия для циркуляции воздуха для сенсора температуры и влажности.

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

Примерно так происходила разработка железа, постарался описать все этапы и некоторые нюансы, если она вам показалась трудоемкой, то это не так, трудоемким на самом деле было ПО. Как и прежде я свои проекты делаю под MySensors, хотя признаюсь что уже не с тем энтузиазмом что прежде. В какие-то моменты стал упираться, каких то вещей не хватает, какие-то просто невозможны. Альтернативой на данный момент для себя я вижу Open Thread, по крайней мере он кажется достаточно привлекательным.



В итоге все свои требования к функционалу реализовать получилось. Устройство может работать с контроллером УД, так же устройство может работать напрямую с каким либо устройством в сети МySensor. Привязка устройств для прямого обмена может происходить как посредством конфигурации устройств через контроллер УД, внешними командами, так и без участия контроллера УД с помощью простого нажатия кнопки для активации режима привязки(binding). Датчик температуры и другое устройство к которому привязан датчик могут нормально поддерживать обмен даже без работающего шлюза MySensors или работающего контроллера УД, что безусловно повышает отказоустойчивость. Отдельная проблема была с драйверами eink дисплея, вероятно потому что дисплей достаточно новый, на сайте производителя и сайте WaveShare(предлагающий eink экраны Good Display под своим брендом) реализации библиотек достаточно сырые. Пришлось что-то переделать, что-то дописать.
В датчике реализовано поддержка нескольких языков, инверсия цвета по внешней команде в режиме конфигурирования устройства, несколько вариантов шрифтов так же меняемые по внешней команде в режиме конфигурации устройства. Датчик выводит на экран показания температуры и влажности, заряд батареи и уровень сигнала. Интервал замеров температуры и влажности, интервал замера уровня батарейки можно задать так же внешней командой. Для температуры и влажности в минутах, для уровня заряда батарейки в часах. Передает датчик в УД следующие данные: температура, влажность, уровень заряда в %, напряжение, уровень сигнала, причину перезагрузки.

Таймстампы интересных моментов:
3.10 — Конфигурирование (смена шрифта, инверсия цвета)
5.10 — Замер потребления, работа WTD
Если кому-то интересны мои разработки, то после прочтения статьи рекомендую перейти на канал и подписаться, там информацию по новым разработкам я публикую в первую очередь.
:
В спящем режиме датчик потребляет 2мкА, сброс WTD каждые 5 секунд, потребление в момент сброса 4-5мкА. В режиме работы с экраном и сенсором температуры и влажности 2-3мА, в режиме передачи 5-8мА, такой диапазон в 3 мА связан с тем что датчик сам регулирует мощность передачи на основе данных по уровню сигнала.




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

Датчик работает на чипах nRF52, для данного проекта был выбран модуль от компании MINEW. Модуль небольшого размера, имеет 18 выводов, 13 из которых gpio, два варианта антенн, печатная и керамическая, так же на модуль устанавливается несколько вариантов чипов, nRF52810 и nRF52832, а после непродолжительного общения с менеджментом компании мне без вопросов поставили на эти модули чипы nRF52811. Так я кстати получил свои первые 811-ые и к тому же по цене в полтора раза ниже чем мог бы купить у поставщиков в России просто чипы, но это уже другая история. На модуле разведен вариант схема DC-DC и часовым кварцем. Размеры модуля 12мм х 15мм. Присутствует металлический экран.

Из линейки e-ink дисплеев выбор естественно пал на достаточно новую модель м размером экрана 1.02 дюйма GDEW0102T4. Стоимость одного дюйма электронных чернил составила 500 рублей, что мне показалось приемлемо. Небольшие трудности с разработкой платы под этот дисплей вызвал его разъем, 30 пиновый FPC c шагом в 0.5мм. Ширина FPC разъема намного больше ширины самого дисплея, что вызвало неудобство при проектировании. Но зато было проще с обвязкой дисплея, она проще чем на других моделях.

Из разнообразных цифровых сенсоров температуры и влажности я решил остановиться на сенсоре sht20, их и в достаточном количестве было у меня, простой достаточно, хорошая цена, удобный размер. Так же одним из плюсов можно назвать то что вместо sht20 при желании легко установить sht21, si7020, si7021, htu20d, htu21d и hdc1080, но последний вариант не самый очень ;).
Под датчик проектировалось 2 платы, одна под экран и его обвязку, вторая под радио модуль, сенсор температуры и влажности и батарейку. Ключевыми параметрами размеров плат были размеры экрана и батарейки. На плате с экраном были заложены отверстия под винты (1.4 х 3) для крепления платы к корпусу, на второй плате были сделаны вырезы для удобной установки винтов. Так как это DIY устройство я мог себе позволить поставить «вкусную» батарейку CR2450. Ну а если мне покажется когда-то что устройство толстовато, то я всегда смогу напаять держатель под батарейку CR2430. В итоге получилось две платы размерами 36мм на 26мм.

Корпус проектировался в СолидВоркс, модели плат были экспортированы из DipTrace в формате DXF, которые уже в СолидВоркс были преобразованы в 3D модели. Корпус состоит из двух частей и кнопки, Крепления половинок корпуса друг к другу сделано так же винтами(1.4 х 4) с одной стороны и выступающим «зацепом» с другой стороны. Сделаны два отверстия для циркуляции воздуха для сенсора температуры и влажности.

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

Примерно так происходила разработка железа, постарался описать все этапы и некоторые нюансы, если она вам показалась трудоемкой, то это не так, трудоемким на самом деле было ПО. Как и прежде я свои проекты делаю под MySensors, хотя признаюсь что уже не с тем энтузиазмом что прежде. В какие-то моменты стал упираться, каких то вещей не хватает, какие-то просто невозможны. Альтернативой на данный момент для себя я вижу Open Thread, по крайней мере он кажется достаточно привлекательным.
Cхема устройства



В итоге все свои требования к функционалу реализовать получилось. Устройство может работать с контроллером УД, так же устройство может работать напрямую с каким либо устройством в сети МySensor. Привязка устройств для прямого обмена может происходить как посредством конфигурации устройств через контроллер УД, внешними командами, так и без участия контроллера УД с помощью простого нажатия кнопки для активации режима привязки(binding). Датчик температуры и другое устройство к которому привязан датчик могут нормально поддерживать обмен даже без работающего шлюза MySensors или работающего контроллера УД, что безусловно повышает отказоустойчивость. Отдельная проблема была с драйверами eink дисплея, вероятно потому что дисплей достаточно новый, на сайте производителя и сайте WaveShare(предлагающий eink экраны Good Display под своим брендом) реализации библиотек достаточно сырые. Пришлось что-то переделать, что-то дописать.
В датчике реализовано поддержка нескольких языков, инверсия цвета по внешней команде в режиме конфигурирования устройства, несколько вариантов шрифтов так же меняемые по внешней команде в режиме конфигурации устройства. Датчик выводит на экран показания температуры и влажности, заряд батареи и уровень сигнала. Интервал замеров температуры и влажности, интервал замера уровня батарейки можно задать так же внешней командой. Для температуры и влажности в минутах, для уровня заряда батарейки в часах. Передает датчик в УД следующие данные: температура, влажность, уровень заряда в %, напряжение, уровень сигнала, причину перезагрузки.

Посмотреть как это выглядит можно в небольшом видеоролике
Таймстампы интересных моментов:
3.10 — Конфигурирование (смена шрифта, инверсия цвета)
5.10 — Замер потребления, работа WTD
Если кому-то интересны мои разработки, то после прочтения статьи рекомендую перейти на канал и подписаться, там информацию по новым разработкам я публикую в первую очередь.
В спящем режиме датчик потребляет 2мкА, сброс WTD каждые 5 секунд, потребление в момент сброса 4-5мкА. В режиме работы с экраном и сенсором температуры и влажности 2-3мА, в режиме передачи 5-8мА, такой диапазон в 3 мА связан с тем что датчик сам регулирует мощность передачи на основе данных по уровню сигнала.
Под спойлером фотографии датчика




На этом хочу откланяться, всем как всегда добра!
Самые обсуждаемые обзоры
+22 |
1838
52
|
+17 |
1039
31
|
Всех кто хочет делать устройства, начать строить автоматизацию своего дома предлагаю познакомиться с простым в освоении протоколом Mysensors — телеграм-чат MySensors
А тем кто ищет достаточно взрослые решения для домашней автоматизации приглашаю в телеграм-чат Open Thread.
Мой GitHub этого проекта, схема, гербер файлы, 3D модели корпуса, bom, ПО.
https://www.threadgroup.org/What-is-Thread/Thread-Benefits#certifiedproducts
Экономия на спичках при таких интересных проектах всегда убивает этот самый проект в итоге.
8-9 штук сяоми можно взять https://aliexpress.com/item/item/1005001355746608.html
По читаемости — тоже самое, единственное, шрифт можно красивый сделать.
А вот по среднему потребелению — мне кажется проигрыш будет значительный.
Ну и BLE все же — можно хоть на телефоне принимать, хоть с компа, хоть ESP32.
… а градусников спиртовых еще больше
… по читаемости совсем не тоже самое, разные типы экранов
… не будет
… бле, как и зигби, или тред вполне доступен на нрф52
Спорно. Контрастность e-ink экранов, особенно с алиэкспресса — та еще лотерея. Да и размер экрана не тот, чтоб можно было смотреть из любого угла комнаты.
Цифрами поделитесь пожалуйста. Я на неделе померяю xioami, которые у меня есть и свои с BLE.
Почему тогда вы используете legacy-протокол?
Если про интеграцию, BLE я могу хоть на телефоне смотреть, хоть на есп32. RPI Zero W тоже ок или любой другой SOC со свистком зайдет.
К счастью, сейчас начали производить железки с «правильными» BLE характеристиками. У меня, например есть тонометр и термометр, которые передают данные в соотвествии со стандартами Bluetooth SIG.
Ну и у того же ксяоми есть датчики на еинке.
Сравниваю по живым устройствам
Первая партия это сколько штук? А почему «первая»? Была или будет вторая, третья и т.д.? Или распродалась только первая, потому что был предзаказ и предоплата?
А по какой цене? А известны географические места, в какие страны и города ушёл товар?
Я ожидал ответ типа:
«Првая партия хх штук была продана за сутки по цене $ х.99, получен предзаказ на вторую партию на ххх шт, делаем их круглые сутки, не успеваем…
Заказы в основном из России, 15% из СНГ, 5% Европа, пару штук в Канаду ушло…
Как-то так себя рекламирует успешный бизнес. А у вас пока громкие слова без пруфов, такие никто в серьёз не воспринимает.
ссылка 300
https://aliexpress.ru/item/item/4001057325275.html 260 + 16 доставка
github.com/atc1441/ATC_MiThermometer
Я бы купил. Не могу согласиться с гражданином выше, показывающим MiHome. Сравните китайский мусор вместо внятного изображения значений и скриншот данного устройства. «графон решает»
После вашего маленького ликбеза, вот вобще не понимаю зачем ваша прокладка между сенсором и MQTT? Пока только одно объяснение — жрать ресурсы процессора.
Как вы свяжете одно с другим без условного «шлюза»?
В случае с zigbee или thread — шлюз нужен обязательно. Для BLE — иногда можно обойтись штатным блютусом того же RPI или PC,
Тут такой же шлюз, сеть датчиков и т.д. Единственное, что тут глупо — это использование проприетарного NRF24 протокола на современных контроллерах, которые поддерживают его чисто ради обратной совместимости. Т.е. по факту можно использовать только Nordic чипы и и китайские клон nrf24.
Плохо смотрите.
Хотя не все одновременно, но это и так поняно.
2) У вас есть HomeAssitance или что-то еще, что крутится на каком-то сервере.
Каким образом вы передадите даные от 1 к 2 или наоборот?
А так, вообще, шлюз треду не нужен и сетка спокойно поднимается на любых двух устройствах, которые в состоянии её поднять.
То есть треду шлюз не обязательно нужен. Простой (классический) пример — лампочка и кнопочка. Их можно связать напрямую без шлюза.
Можно хоть единичный рабочий пример?
То есть Вы там ничего не подключите, не заюзав какой-либо протокол поверх треда для общения лампы с кнопкой.
Если хотите в далеком и светлом будущем именно через тред и именно любого производителя — присмотритесь к chip, который как раз поверх треда работает.
Если хотите управлять лампочкой прямо сейчас — выбор не очень большой. Чистый UDP или какие-либо протоколы поверх него, например, CoAP или MQTT-SN.
Дайте пример лампочки и выключателя.
Если вы говорите про нрф52840 — тоже объясните как его связать с условным сервером умного дома.
Вы хоть не автор этой ветки, но тоже непонятно что пытаетесь доказать.
Всё, что я хотел сказать — ответить на Ваше безапелляционное заявление про необходимость шлюза и пояснить, что nrf52840 не обязательно связывать с сервером. Устройства могут работать в сети Thread без связи с сервером. Как уж это будет реализовано с точки зрения протокола и как конкретно кнопочка будет управлять лампочкой — дело другое.
А его уже уже из оборота выводили. И вернули. И ни одного известного опенсорс проекта на на нем.
Примеры — не в кассу.
Касательно cc254x — их почти нет не гитхабе, и свои я не выложу. Ибо это стрёмно со всех сторон.
Нордик и из примеры в реальном мире? Жду
У меня сетка на треде дома поднята — будет считаться примером?
Но про вашу сетку было бы интересно почитать. Про реализацию, про плюсы и особенно про минусы.
А так н-надцать лет назад я делал датчики на TR24A — был такой конкурент CC25xx (модуль стоил что-то около 3$, что было соизмеримо со стоимостью одного чипа СС без обвязки)
Работало? Да. Но через год уже не надо.
С zigbee, zwave или ble все также. Каждый китаец лепит свои протоколы поверх, свои шлюзы.
За BLE слежу — только последние года два вижу устройства, которые используют «стандартные» «характеристики», а не свои выдуманные BLOBы.
И во всех сложных сценариях я не раз упирался в форум поддержки. Или в статью из Errata. Чем сложнее контроллер, тем больше у него багов (еще не наденных, в том числе)
Так много кто умеет и тут хоть зигби, хоть какой угодно протокол.
А так чтоб любой выключтель фирмы М по зигби умел управлять лампой производителей А-Я?
В этом ведь смысл стандартов
Если да, то порекомендуйте модели, я не против попробовать. У меня пока мало опыта с зигби.
За 3 года уж можно было узнать, что такое и зачем нужен mysensors! Лень или не хватает серого? Тогда зачем лезть с комментариями в тему, в которой вы ноль?
а другой датчик еще месяц?
а MySensors это всё уже сделано
подключается за 5 минут в — две строчки
надо по WIFI, или Rf433, или блютус
все равно — две строчки
ZigBee — крутая штука, спасибо в частности сяоми за тонны готовых устройств по копеечным ценам, всё, что не на BLE, то у меня на ZigBee.
WiFi — старый добрый вайфай, спасибо espressif за espихи, всё, что можно питать от розетки, то работает по WiFi.
LoRa — ну как без дальнобоя? Там, где надо отказоустойчивую связь на большие расстояния, там Лора.
Это азы. И этого и так много. Куда ещё протоколы? Зачем ещё шлюзы? Всё есть уже.
Ну и вопрос: зачем его было делать? В статье нет НИЧЕГО, что хоть как-то оправдывало бы его создание — просто «я хочу». Ну да, если есть лишние деньги — можно их выкинуть на еИнк и коробочку, которая умеет рассылать циферки.
Сейчас не стоит вопрос «из чего и как», уже давно встал вопрос ЗАЧЕМ?
Вентиляция над плитой… ну такое себе применение для датчиков, которые обречены заплыть жиром, пылью и грязью. Опять же, что «умного» ты хочешь туда привнести? Изображать морской бриз? Вентиляция просто включается руками и начинается готовка.
Другими словами, на твоём примере я лишний раз убедился, что мальчики и DIY — как собака и плюшевый медведь — возни много, толку — мало.
И к слову, откуда такое г***но и обиды? Я же не имею лично против тебя что-то, я объяснил свою позицию: я считаю, что ПОЛЕЗНЫХ применений пока что кот наплакал и этот датчик тоже не вызывает у меня восхищений — тупо собрали лего из деталек и повесили на стену.
Единственное достижение этого поделия — ты научился собирать девайсы. Всё. Ну тоже вполне себе скилл — я такое уважаю. Но гордиться тут особо нечем, такое в свои годы могли делать во дворце пионеров.
:)))