Еще одна попытка сделать по-настоящему умные часы
Обожаю готовые платы с экранчиками. По сути это уже готовые для программирования девайсы. Сразу можно что-либо реализовать. Мне попала в руки плата от Waveshare. Плата сразу с RLCD экраном 4.2 дюйма (ST7305 300 x 400), 18650, микрофоном, спикером и чипом ESP32-S3.
Для понимания, что вообще за плата и из чего состоит внизу будут фото. Полное описание и конфигурация платы на wiki разработчика. А купить можно на популярных маркетплейсах.
Почему не e-ink?
Честный ответ: потому что в таком форм-факторе и в такой же конфигурации не было e-ink. В добавок e-ink медленно обновляется. Особо медленно если экран на электронных чернилах трехцветный. Скорость обновления RLCD такая же как на обычном LCD, вполне можно разогнать до 60 кадров в секунду. Поэтому можно юзать не только для часов, но об этом позже.
Как программировать?
Программировать мы будем через VSCode + Platform IO (PIO). Можно через Arduino IDE, однако это не самая удобная и гибкая платформа для работы с кодом, а вот PIO сильно удобнее. Кодом я тут не буду душить аудиторию, единственное что скажу буду юзать либу U8g2 - библиотека графики для монохромных дисплеев на микроконтроллерах, автор Оливер Краус. Самая популярная в этой нише.
Часы (и погода)
Что мне действительно хотелось видеть каждый день на столе это часы и погоду. Но ведь у меня в телефоне есть часы и погода! Крайне удобно перед выходом куда либо посмотреть будут ли осадки, какая температура, УФ-индекс. И да, погоду хочется видеть на 12 часов вперед на каждый час. Больше нет смысла смотреть, имхо, прогноз дальше суток крайне не точен. Убеждался в этом неоднократно. А вот на 12 часов можно посмотреть с вероятностью осадков - то что нужно знать сегодня. Итог ниже.
Давайте разберем по частям тут выведенное. К погоде я еще добавил давление, влажность и загрязнение воздуха в моем районе. Встроенные датчики не использовал. В качестве источника погоды использую Open-Meteo. Строчка чуть выше ЗАКАТа пустая, это не баг, там отображается вероятность осадков. Если пустая значит 0%. Цифр и так иного, поэтому так. Погода обновляется днем раз в полчаса, ночью раз в час. Помимо того что я обновляю погоду через интернет еще обновляется точное время через NTP. Такая точность более чем достаточна для настольных часов.
Энергосбережение
И тут самое время поговорить про энергосбережение, так как вы могли заметить что девайс питается от аккума. Сначала я отображал секунды, но обновление раз в секунду значит что микроконтроллер (МК) не засыпает, он постоянно работает. ESP32-S3 это вообще не про экономию, это невероятно прожорливый мощный чип.
Секунды было решено убрать. Теперь чип засыпает примерно на ~59 сек, просыпается, обновляет время и засыпает снова на ~59 секунд. В момент сна плата потребляет 8мА, во время обновления через интернеты (несколько секунд каждые полчаса/час) около 50мА.
Получаем, что при таких условиях таких часов хватит на пару недель автономной работы. Что более чем приемлимо на мой взгляд для данного типа МК и типа экрана.
Новости
Самая скучная и неудачная часть, но не могу не отметить, что была попытка это сделать. Новости это невероятно комплексная тема, так как нужно сортировать по категориям, внимательно подбирать источники новостей и релевантность.
В бесплатном NewsAPI, который я юзал, три источника на русском языке: DW, BBC и RT. Остановился на первых двух, но думаю надо придумать что-то получше для новостей.
Телеграм-пейджер
Тут как говорится proof of concept. Если можно выводить текст, то наверно можно выводить тот текст который я написал в бота? Конечно! Только вот для телеги надо подключить SOCKS5, ибо из моей сети оно не работает. Пишешь в бот и сообщение со звуковым сигналом отображается на экране:
В целом эту фичу можно использовать для заметок которые будут перед глазами.
Мониторинг ПК
Наверное самое сложное по коду и реализации. Как взять показания который отображает MSI Afterburner и RivaTuner Statistics Server (RTSS)?
В начале статьи упоминал, что E-ink в некоторых сценариях не подходит, вот это как раз этот случай. Отображать надо 2 раза в секунду, можно и чаще конечно, но и так достаточно. Серверная часть на ПК написана на Go и скомпилирована в exe-файл, который поднимает API на определенном порту по одной кнопке. А плата подключается к этому порту и читает в бинарном виде показания. И это прям киллер-фича, те самые циферки где-то вне экрана.
Все эти 4 режима переключаются одной кнопкой по кругу. То есть всё это в одной прошивке!
А что еще делают на этой плате?
В интернете еще нашел вот такой забавный проект радара на той же плате
Нужен еще радар LD2450 который подсоединяется к плате. В целом интересная штука, без понятия где это можно на практике примерить.
А что вы бы реализовали на такой плате?








































