Найти в Дзене
Project A.L.T.

Новости проекта мультинформер

Новые статьи писать пока вдохновения нет, да и настрой пока есть в коде покопаться. Так что уже пару недель занимаюсь исключительно своим проектом мультинформера. Тизер с демонстрацией его основных возможностей выкладывал у себя на канале пару недель назад. А сегодня просто хочу немного рассказать о ходе разработки и последних новостях проекта. Основной экран После долгих мучений прикрутил, наконец, поддержку датчика BME680. Вроде тривиальная задача, но сколько же нервных клеток было сожжено в процессе ее реализации! Скажем спасибо нашим китайским друзьям - разработчикам макетной платы Sunton, на которой я и делаю данный проект. Суть в том, что драйвер тач GT911 работает через интерфейс i2c. Стандартные пины у ESP32 для него это 21 и 22. Китайцы же, по никому не известным причинам, припаяли контакты разъема тача SСL и SDA к ногам 32 и 33. А контакт INT зачем-то вывели на 21 пин ESP32. Что мешало развести по стандарту - для меня загадка. И самое интересное, что разъем i2c с нужными пи
Оглавление
Лого
Лого

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

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

Основной экран

После долгих мучений прикрутил, наконец, поддержку датчика BME680. Вроде тривиальная задача, но сколько же нервных клеток было сожжено в процессе ее реализации! Скажем спасибо нашим китайским друзьям - разработчикам макетной платы Sunton, на которой я и делаю данный проект. Суть в том, что драйвер тач GT911 работает через интерфейс i2c. Стандартные пины у ESP32 для него это 21 и 22. Китайцы же, по никому не известным причинам, припаяли контакты разъема тача SСL и SDA к ногам 32 и 33. А контакт INT зачем-то вывели на 21 пин ESP32. Что мешало развести по стандарту - для меня загадка.

И самое интересное, что разъем i2c с нужными пинами на плате как раз разведен. И если не использовать тач, то все работает как надо. Стоит только инициализировать тач, как i2c пинах перестает работать. Покопавшись в библиотеках Wire и GT911 понял, что они обе используют один и тот же канал i2c из 2 возможных. При том, в зависимости от того какая библиотека инициализируется первой, те назначенные i2c пины и используются, игнорируя назначенные второй.

В общем решение кажется очевидным. Разнести тач и BME модуль по разным каналам. Но тут всплыла проблема, что i2c с пинами 21 и 22 нормально работает только на первом канале. При попытке, с помощью функций библиотеки BME680, вынести их на второй канал датчик все так же не работал. А библиотека тача GT911 просто такой возможности не предусматривала.

В итоге пришлось писать свою версию драйвера тача с назначением нестандартных пинов 32 и 33 сразу на второй канал. И одной проблемой стало меньше. Сейчас вывод показаний BME680 на экран выглядит следующим образом:

Вывод показаний BME680 на экран
Вывод показаний BME680 на экран

Сразу извиняюсь за качество фото. Нормальной камеры под рукой сейчас нет.

Если датчик BME выключен в настройках, то на главном экране отображаются сведения о погоде от OpenWeatherMaps:

Главный экран с погодой Open Weather Maps
Главный экран с погодой Open Weather Maps

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

Экран мониторинга параметров ПК

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

Экран параметров ПК
Экран параметров ПК

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

Экран погоды

Этот экран был сделан одним из первых и практически не менялся с самого начала проекта. Данные берутся с сайта Open Weather Maps и отображаются различные параметры погоды на текущий день. Также строятся графики температуры, влажности и атмосферного давления. На данный момент экран выглядит так:

Экран погоды
Экран погоды

Экран курсов валют

Этот экран добавил относительно недавно, но уже 2 раза полностью заново переписывался его код. Поддерживается вывод курсов 9 валют по отношению к рублю на текущий день. Данные берутся с сайта ММВБ. На данном этапе экран выглядит так:

Экран курса валют
Экран курса валют

Интерфейс выглядит простенько, но пока ничего лучше не придумал.

Экран онлайн радио плеера

Долго думал стоит ли вообще добавлять что-то подобное в проект, но наличие на плате встроенного аудиоусилителя 8002D все же сподвигло меня к написанию собственного плеера.

Для вывода звука использую встроенный DAC ESP32 и интерфейс I2S на 26 пине ESP32, который подключен на вход 8002D. Качество звука я бы оценил как среднее. Возможно в будущем попробую заморочиться с MAX98357A и более качественным динамиком, но на данный момент меня вполне все устраивает. Экран радио плеера на фото ниже:

Радиоплеер
Радиоплеер

Звук можно оценить в коротком видео ниже:

На данный момент активно занимаюсь именно этой частью программы. Изначально использовал библиотеку ESP8266Audio, но постоянные вылеты и жор оперативной памяти довели меня до белого каления. В итоге сейчас все работает на модифицированной версии библиотеки ESP32Audio-I2S. Качество звука улучшилось, жор оперативной памяти практически удалось победить. Да и в целом стабильность работы гораздо выше. Плюсом адекватное воспроизведение MP3, AAC и FLAC. На предыдущей библиотеке нормально работал только MP3. Остальные форматы требовали какое-то невменяемое количество оперативной памяти. На данный, пока пишу данную статью, радио уже 4 часа работает без перерыва и никаких проблем не наблюдаю.

В памяти устройства можно хранить до 100 радиостанций. Треки можно переключать либо кнопками, либо через плейлист:

Плейлист радиостанций
Плейлист радиостанций

Плейлист можно редактировать прямо на экране устройства с помощью экранной клавиатуры, но раскладка пока только английская.

Редактор плейлиста
Редактор плейлиста

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

Прочие возможности

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

Часть настроек доступна прямо на экране устройства:

Настройки погоды
Настройки погоды
Настройки дисплея
Настройки дисплея
Настройки параметров ПК
Настройки параметров ПК
Настройки датчика температуры
Настройки датчика температуры

Пока в раздумьях, что туда еще добавить, но несколько идей имеется.

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

Для настройки подключения к WiFi используется библиотека WiFi Manager. Раздумываю над тем, стоит ли добавить на экран настроек возможность самостоятельного выбора точки доступа для подключения?

Итоги

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