Электронный термометр своими руками: как сделать дисплей на е-инк с платой ESP32

Дорогие друзья, добро пожаловать на очередной проект! Сегодня мы собираемся использовать небольшой экран на электронных чернилах с платой ESP32 и собрать домашний простой электронный термометр своими руками! Это очень простой проект. Он не займёт у нас больше пяти минут, так что давайте приступим.

Как вы можете заметить, я соединил маленький дисплей на е-инк с платой ESP32. На экране мы отобразим температуру, которая будет измеряться температурным сенсором DS18B20. Температура на экране будет обновляться каждые 5 секунд. Самое крутое в том, что мы не будем обновлять весь экран, ведь это очень медленно, а только часть экрана, что быстрее и расходует мало энергии!

Проект работает как часы, но давайте посмотрим, как его собрать!

Шаг 1: Выбираем детали

Всё, что нам нужно, находится в этом списке:

Плата ESP32 ▶ ссылка
1.5-дюймовый дисплей е-инк ▶ ссылка
Сенсор DS18B20 ▶ ссылка
Макетная плата ▶ ссылка
Кое-какие провода ▶ ссылка

Необязательные детали:

Павербанк ▶ ссылка
Плата FireBeetle ▶ ссылка

Итоговая цена девайса составит около $30.


Шаг 2: Плата ESP32

Это второй проект с чипом ESP32, который я когда-либо собирал.

Если вы не знакомы с этим чипом, ESP32 — это следующее поколение популярного чипа ESP8266, который использовался очень часто в прошлом. ESP32 — это зверь! Он предоставляет два 32-процессных ядра, которые работают на частоте 160MHz, с большим объемом памяти, WiFi, Bluetooth и множеством других плюшек и стоимостью около $7, потрясающая штука!

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

Одна из наиболее впечатляющих вещей в ESP32 это то, что даже с учетом того, что он настолько мощный, он может находиться в режиме глубокого сна с потреблением тока всего 10μΑ. Это делает ESP32 идеальным чипом для маломощных приложений.

Шаг 3: 1,54-дюймовый экран на электронных чернилах

Давайте теперь взглянем на экран на электронных чернилах.

Экран маленький, всего 1,54 дюйма, и он относительно недорог. Его цена составляет около $15. Я уже слышу ваш вопрос: действительно ли это недорого? Он стоит $15 и он такой маленький! Вы правы, это очень дорого для маленьких дисплеев такого размера, но вам нужно принять во внимание то, что это экран на е-инк, а такие экраны дороги. Например, экран на 4,3 дюйма на электронных чернилах, который я присматривал пару лет назад, стоил в районе $50!

Впервые нам доступны настолько маленькие и дешевые дисплеи. Так что теперь мы можем собирать малобюджетные проекты, в которых будут экранчики с е-инк! Я очень воодушевлён этим. Но зачем использовать экран такого типа в нашем проекте?

Е-инк, или электронные чернила — это дисплеи, отличающиеся от традиционных экранов LCD или OLED тем, что не испускают свет, а отражают его. Также как и чернила на бумаге. Эта характеристика делает экраны е-инк очень удобными для чтения с них очень хорошо читать под прямым солнечным светом. Еще одной замечательной особенностью е-инк дисплеев является то, что они способны держать статичный текст и картинки без электричества в течение месяцев. Да, всё верно, экран может отображать текст и картинки даже когда он отключен! Это делает экраны на е-инк идеальными для малоточных проектов!

К несчастью, есть и обратная сторона медали. Цена на дисплеи с электронными чернилами очень высока. Еще одним минусом является то, что экран на е-инк очень долго обновляется, это может занимать до 2-3 секунд. Так что они очень хороши для статичного текста и картинок, но не для анимации. Эти экраны поддерживают функцию частичного обновления экрана, что очень круто!

Давайте теперь посмотрим, как использовать небольшой экран с Ардуино. Экран имеет разрешение 200х200 пикселей, что круто, и использует интерфейс SPI.

Шаг 4: Сенсор DS18B20

DS18B20 — это цифровой термометр, который точно замеряет температуру в диапазоне от -10°C до +85°C и также имеет функции тревоги и точки переключения.

Это очень простой сенсор, так как он использует однопроводной интерфейс. Так что нам просто нужно подключить один провод, чтобы он заработал! Я использовал данный сенсор очень активно в прошлом, и я собираюсь использовать его также активно и в будущем из-за его простоты и точности. Цена сенсора составляет около $2.

Шаг 5: Собираем вместе все части

Экран на электронных чернилах использует интерфейс SPI для коммуникации с платой ESP32, так что нам надо присоединить его к пинам SPI на плате ESP32. У меня заняло некоторое время, чтобы выяснить, какие пины соответствуют SPI на этой плате. После их обнаружения, я нарисовал схемку, чтобы сэкономить ваше ценное время. Вы можете найти диаграмму распиновки платы ESP32 в описании ниже.

Теперь, когда мы знаем пины, которые нам нужны, все что нам нужно сделать, это соединить дисплей и сенсор с ESP32, соответственно нарисованной схемы. К счастью, все пины SPI размещены на одной стороне платы ESP32, так что мы можем использовать макетную плату, чтобы протестировать наш проект. После соединения всех частей вместе, все, что нам нужно сделать — подать ток.

Сперва дисплей покажет заставку в течение 3 секунд и затем покажет иконку температуры. Через пару моментов начнётся считывание температуры. Оно обновляется каждые 5 секунд. Я также подготовил версию кода с температурой, отображаемой в Фаренгейтах, для наших друзей, живущих в США.

Шаг 6: Код для проекта

Код для проекта относительно прост.

Мы используем крутую библиотеку GxEPD, чтобы запустить дисплей и библиотеку для температурного сенсора.

Библиотека для дисплея е-инк ссылка

Библиотека для DS18B20 ссылка

Сперва мы отобразим заставку, которая является картинкой, созданной в Фотошоп.

display.drawExampleBitmap(gImage_splash, 0, 0, 200, 200, GxEPD_BLACK);
display.update(); delay(3000);

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

display.drawExampleBitmap(gImage_gui, 0, 0, 200, 200, GxEPD_BLACK);
display.update();

display.drawExampleBitmap(gImage_gui, sizeof(gImage_gui), GxEPD::bm_default | GxEPD::bm_partial_update);

Wiki-страничка дисплея имеет детальную информацию о том, как загрузить графику на экранчик.

ссылка

В зацикленной функции мы будем каждые 5 секунд считывать информацию о температуре и печатать её на экране. Мы не будем обновлять весь экран, потому что это займет много времени, а только часть с температурой, используя функцию частичного обновления экрана.

void loop() {
sensors.requestTemperatures(); tempC = sensors.getTempCByIndex(0); showPartialUpdate(tempC); printTemperatureToSerial(); delay(5000); }

Вы можете найти код для этого проекта по ссылке:

Файлы

Шаг 7: Финальные мысли и улучшения

Проект будет работать хорошо и будет выглядеть круто! Дисплей е-инк идеально подходит для проектов такого типа, потому что предлагает великолепную читабельность и чрезвычайно низкое энергопотребление. Когда экран не обновляется, ему нужно всего 0.02mA тока. Плате ESP32 нужно всего около 60mA для работы.

В следующем проекте я постараюсь сократить потребление электричества. Целью является заставить проект работать от батареек месяцами. Чтобы этого достичь, я собираюсь изучить, как положить плату ESP32 в сон, чтобы сохранить энергию и собираюсь использовать другую плату ESP32, называющуюся FireBeetle ESP32 от DFrobot. Создатели этого мода клянутся, что их плата потребляет всего лишь 12μΑ тока в спящем режиме. Так что, в теории, плате DFrobot FireBeetle с экраном е-инк потребуется всего 0.03mA в спящем режиме! Это означает, что мы можем заставить такую сборку работать от батареек более года! Я не могу дождаться момента, когда попробую все собрать и поделюсь результатами с вами.

Буду очень рад услышать ваше мнение об этом проекте. Если вы собираетесь создать свои проекты с использованием ESP32 и е-инк, пожалуйста, оставляйте свои идеи как сделать термометр своими руками в комментариях ниже, мне нравится читать ваши мысли!

Игорь Самоделов
Игорь Самоделов

Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *