Наткнулся на интересный проект: микроконтроллер, который блокирует рекламу (локальный DNS-сервер) с веб-интерфейсом.
Стало любопытно самому потрогать и проверить работу данного устройства, поэтому за 300-400 рублей заказал плату ESP32 CP2102. Её доставили в пределах недели.
Однако при подробном изучении проекта было обнаружено, что код предназначен для контроллеров на базе ESP8266.
Я решил пойти по самому простому пути и с помощью Grok'a переписал код, который заработал. Также он изменил документацию согласно моему ТЗ.
Устройство действительно блокирует рекламу, если указать его IP-адрес в качестве DNS. Веб-интерфейс позволяет добавлять новые домены.
Бюджет составил 300-400 рублей, при желании устройство можно использовать в других проектах.
С полученными результатами можно ознакомиться по ссылке — блокировщик рекламы, переписанный под esp32.
Я не ожидал, что будет так увлекательно. Микроконтроллеры — это просто космос! Самый крутой вывод для меня — это то, что теперь не нужно быть супер-программистом, чтобы адаптировать чужой проект под свою плату. Нейросети справляются с такой рутиной на ура и буквально стирают барьеры между разными платформами вроде ESP8266 и ESP32.
Я теперь подсел и хочу ещё что-нибудь сделать. Если у вас есть идеи для крутых для проектов — добро пожаловать в комментарии! Что бы вы сделали на этой плате?
Коротко - как я месяц делал игровую платформу в виде куба с нуля (и еще не доделал), побил некоторые рекорды по производительности дисплеев и был не рад исправлять ошибки проводками.
В июле мне предложили сделать светящийся кубик для игр — типа D16, чтобы светилась выпавшая грань. Заказчик испарился, но мысль засела в голове. Подумал — а что если не просто свет, а поставить дисплеи на каждую грань и упростить до D6? И вообще сделать из этого маленькую тактильную игрововую консоль. Такого точно никто не делал. И понеслось…
Первый концепт кубика
За месяц из простой идеи пока что получился полуготовый куб с проводками, но с рабочими основыми системами. Расскажу как это было — со всеми техническими проблемами и небольшими победами.
Проектирование и осознание масштаба
30 июля — день когда всё началось. Начал прикидывать техническую сторону: ESP32, акселерометр, 6 дисплеев по 240x240 пикселей. В теории выглядит просто — процессор, акселерометр, питание, экраны. На практике оказалось иначе.
31 июля — 1 августа — начало 3D проектирования. Проект зацепил серьёзно. 15 лет назад поступал в универ на программиста, чтобы делать компьютерные игры. И как то не заладилось. И вот через 10 лет выпадает шанс воплотить давнюю мечту.
Одна из первых итераций 3D модели
Обожаю этот ИИ рендер
Первые версии материнской платы для куба
Борьба с ограничениями железа
2 августа — первое столкновение с реальностью. Для нормальной картинки нужно хотя бы 25-30 FPS, но по предварительным расчетам упирался то в память, то в скорость передачи данных. Изначально планировал готовый модуль ESP32, но для буфера кадров памяти у него вообще нет.
Вместо линейника на плате появился DC-DC преобразователь и проц переехал на заднюю сторону платы
В итоге полдня переделывал плату, чтобы поставить ESP32-S3 с 8МБ PSRAM - оперативки (наш «огромный» буфер для кадров). Опять по старинке придется припаивать голый проц на плату.. Но зато какая мощь, во всех прошлых проектах такой памяти вообще не было.
3 августа - день, когда спроектировал все платы для заказа на заводе. Небольшой спойлер - наделал всяких ошибок подключения.. Ну хотя бы не критичных, не пришлось выкидывать платы в ведро.
Как выглядит кубик внутри. Только тут не показаны батареи.
В тот день открыл для себя возможности ИИ для кодинга и продумывания архитектуры проекта. Конечно, нейросети могут выдавать тысячи строк кода (как мне тогда и выдало).
Но лучше код делать по модулям и разбираться в том, что ИИ наваял. Половина кода может работать вообще не так, как хотелось.
Главное при должном понимании и подходе, ИИ очень помогает и ускоряет разработку ПО.
4 августа — а что если использовать ИИ не только для генерации кода, но и для картинок персонажей? Да запросто))) Для игр уровня железа этого куба, 2D картинки вполне будут работать.
Не самая лучшая идея просить ИИ сгенерить сразу несколько персонажей
А вот одного персонажа в определенном стиле и в 2х ракурсах - вообще отлично.
Первые тесты и корпус
5 августа — напечатал первый корпус для куба. Рамки вокруг экранов получились большие, но таков путь — железо диктует размеры.
Зато скругленные грани дают приятную тактильность и куб удобно крутить.
Реально очень удобно лежит в руке. Несколько дней с ним ходил, крутил в руках.
7 августа — начал программировать игровую архитектуру. Создание игр оказалось не таким как представлял. На кубик приходится писать вообще всё с нуля — ядро системы, драйверы, игровую логику. Хорошо что в универе учили основам системного программирования.
Еще один ИИ рендер =)
Сразу замахнулся на "локомотивные" игры — Diablo, стратегии. Но быстро понял реальность: маленькие экраны требуют переосмысления классических жанров. Disciples может с натяжкой и упрощением получится, а вот Героев 3 портировать скорее всего не получится — слишком много мелких юнитов на экране.
8-9 августа — чисто дни вайб-кодинга. Создать игровые движки с нуля это конечно идея.. Хотя бы нейросети помогают в понимании всех систем. Но по крайней мере основную архитектуру составил. В одиночку бы такое делал не день, а с месяц минимум.
Основная буйная идея - собирать игры как LEGO. Сделать несколько модульных систем, которые будут брать свои данные из специальных json-файлов.
А чтобы не писать вручную технические json-файлы, можно закидывать описание в ИИ, чтобы он подогнал всё под определенный формат.
И кажется, что если такая система будет работать - можно будет собирать игры разных жанров из базовых модулей достаточно быстро и просто.
Небольшое отступление. По образованию я ж айтишник (окончил факультет ПМиК). Нас учили именно программировать ядро систем. То есть все эти внутренние алгоритмы, ассемблер, математика (в один год было 5 разных направлений математики).
Но самое неприятное в программировании ядра - это скука при работе. Не видишь какого-то визуального явного подтверждения (обратной связи) по тому, что прогишь и кажется что занимаешься какими то бесполезными буковками на экране.
С этим я столкнулся в начале разработки прошивки куба. И сразу решил откопать какой нибудь экранчик, чтобы уже видеть хоть какие то картинки при работе.
Тестовый стенд и первые визуальные результаты
12-14 августа — вообще при любой работе стараюсь не изобретать велосипед.
Откопав старенькую плату от фризлайт лампы, подцепил к ней экран. Найдя в инете библиотеку графики EmberGL для ESP32, решил попробовать поработать с готовым решением.
Библиотека как старый жигуль из гаража - запустилась не с первого раза (особенно учитывая что её не обновляли уже 3 года). Пару часов пинания кода с помощью ИИ, и получился первый прямоугольник с градиентом и потом 3D. Там был пример с головой обезьяны на 4000 полигонов. И оно даже работало.. Но это прям максимум для ESP32. И причем без текстурирования.
Красивое 3D, но бесполезное..
Интересное открытие: операции с float выполняются процессором с той же или даже большей скоростью, чем с обычными целыми числами.
15-16 августа — работал над системой загрузки картинок и анимаций.
Идея: генерим картинку с персонажем. Делаем из него видео. Видео разбиваем на кадры, складываем на флешку, потом показываем по очереди.
Разбивка и удаление лишних кадров
Первый тест анимации на OpenGL как то оказался медленным..
Настоящее железо и первые результаты
17-19 августа — приехали экраны и тот самый проц с памятью.
Решил отойти от EmberGL в сторону простого самописного драйвера. То инициализация не та, то цвета неправильные, то порядок бит в той библиотеке.
Экран завелся не с первого раза. Зато какой прирост производительности новый проц дал с оптимизированным кодом чтения с памяти (+SPI 4line) и работе с PSRAM. Давайте посмотрим на эволюцию производительности нашего козлика из Diablo.
Обычный проц и медленное чтение с карты
Новый проц и быстрое чтение кадров с карты памяти
Реактивый козел))))) Новый проц и показ кадров из PSRAM
По замерам проца, последние видео это 20 и 90FPS соответственно. Убойная производительность конечно. Видел в инете тесты, там такие скорости обновления не выжимали в принципе)))
20-21 августа — раз у нас такой быстрый показ кадров, почему бы не показать что-то более интересное. Как насчет упрощенной физики жидкости и показа кино (только без звука)?
С последним пришлось немного помучаться. Обычный MP4 проц открыть не может, но с последовательностью BMP565 вполне справляется.
В статье пропускаю все технические сложности и работу с программированием. Главное же результат и какие то забавные моменты.
Например, на этапе с кино впустую потратил 4 часа, пытаясь разобраться в ошибке чтения файлов. А оказывается надо было поправить всего одну циферку при инициализации.
Cамое печальное, raw bmp весит прям очень много. На минутный ролик надо около 110мб.
Конечно можно заметить, что кино выглядит немного пиксельным и с провалами в тенях. Но это особенности сжатия исходного RGB888 в RGB565 для экрана. У последнего формата данных меньше градаций цветов + сжатие jpg сразу видно.
Платы, сборка и фиаско
26-29 августа — мне ранее говорили что видимые винты крепления корпуса не очень красиво и занялся этой задачей.
Решено сделать внутрянку куба на несущей раме, чтобы потом всё вставить в корпус и закрыть крышкой.
С первого раза конечно не получилось. Защелки надо печатать боком, чтобы нагрузка была поперек линий печати. Если гнуть по линии спекания слоев, оно просто отламывается.
Мой первый корпус на защелках
И корпус то это достаточно просто.. Напечатал и пробуй.
А что если читать кино не как bmp, а mjpg. Около дня ковыряния кода, и оно получилось. И главное весит копейки, около 6МБ на минуту, а не 110МБ+. И хитрый трюк - накидывать шум и легкое размытие на кадры, и так получается меньше пиксельности.
30 августа — наконец-то пришли подарки от китайского деда мороза))) Ну то есть новые платы.
Вот такое почти готовое приезжает с Китая. Заводская пайка, все дела =)
На память старый тестовый модуль и новая плата
Конечно сразу взялся за пайку проца и разъемов. Замучился конечно из-за двухсторонней пайки..
Главное, что процессор легко прошивается на новой плате, SD-карта работает. Выжал с карты 10 МБ/с вместо 8.3. Это ещё плюс 5-7 FPS для видео.
31 августа — ИНЖЕНЕРНОЕ ФИАСКО. Когда сказал вслух, что "новая разработка — это исправление недочётов" - накаркал проблему.
Колхозный проводной ад
Из-за большого количества подключённых пинов к процессору упустил, что надо ещё подключать линии включения экранов. Результат: ПРОВОДКИ, которые я ненавижу. Плата для меня — инженерная картина, где всё должно быть аккуратно. А тут проводки.. Но главное что работает. И всё исправляется хотя бы так, а не заказом новой платы и ожидания в месяц.
И под конец месяца поставил акселерометр, обновил прошивку и оно работает.
ЧТО ПОЛУЧИЛОСЬ ЗА АВГУСТ
Основная плата работает (проц, аксель, чтение с карты, дисплей)
Проводки вместо красивой разводки
Куб в полуразобранном состоянии
Игр пока нет, только тесты
Заложена основа для будущей программной системы
Корпус собирается на защелках
Открытия:
ИИ кардинально ускоряет разработку ПО
Железо и чужие библиотеки всегда преподносят сюрпризы
Проверять разводку плат три раза, а не один
Впереди ещё месяцы работы над прошивкой, играми и отладкой. Но основа заложена: железо работает, производительность неплохая, архитектура более менее продумана.
Предлагайте свои идеи, что хотели бы видеть из игр/приложений в кубике. У меня уже в планах змейка 6D, визуальная алхимия частиц, какие нибудь квесты. Очень хочется сделать мини Diablo / GTA2. И конечно что то простое точно будет - выдать число, или предсказание как magic 8-ball.
Также в далеком будущем есть планы перейти на ESP32-P4. Вот там прям вычислительная машина (для своего размера и потребления энергии). И возможно поставить звук, вибрацию, часы реального времени, экраны побольше..
А этом кубике еще на один проводок планируется пищалка - пассивный зуммер =)
И кстати, в моем TG-канале новые новости о проекте почти каждый день =)
Наконец-то нашёл хоть какую то инфу по этому бризеру. У меня проблема, перестал греть воздух. Зимой работал исправно, сейчас при попытки включения подогрева, индикатор загорается, но сам тен не греет. Датчик температуры работает т.к не даёт включить подогрев при тёплой погоде. Я специально охлаждал его и при постепенном нагревании воздуха подогрев отключается как положено. Решил самостоятельно разобрать, думал увижу причину. Но визуально с платой все хорошо. Тен целый, провода на месте, и в общем все хорошо и без повреждений. Хотел найти предохранитель и проверить его, но не нашёл. Подскажите пожалуйста, какие причины такой неполомки могут быть?
Весь день сидел разбирался, и вроде все получилось. Программа загрузилась на плату и все работает....) Вот теперь сижу, пытаюсь разобраться, как удалить пост...
Привет, всемогущий Пикабу! Очень нужна помощь! Ищу специалиста, который разбирается в ESP32-S3 и Python! Я в этом полный ноль...
Если коротко о вводных: Имеется мануал с Github, но проблема в том, сколько бы я не бился с этим - не получается, не понимаю КАК. Необходимо на плату загрузить программу и помочь настроить. Программа управляет соленоидами, которые будут установлены в новой шарманке.
Буду очень благодарен, если найдётся человек который сможет уделить время и проконсультировать.
А если вы из СПб - готов на личную встречу, покажу мастерскую и даже дам покрутить шарманку! 🔥
Привет читатели и подписчики! Продолжаю рубрику "Не нравится - сделай сам". На этот раз разговор пойдет о бризере Ballu.
Картинка из интернетов
Началось с того, что купив себе жил.площадь, в ней моему взору открылись сквозные отверстия в стенах комнат рядом с окнами, на которых был установлен простой приточный вентиляционный клапан. Забавная штука, подумал я, и решил их заменить на бризеры. Пошёл гулить в яндекс с вопросом, а какие они вообще бывают и с чем их кушать. Одним из критерием была возможность интеграции в умный дом, в идеале в HomeAssistant, т.к. я строю свой умный дом именно на нём. Выбора не то чтобы много, но среди всех, как мне показалось выделяется Tion, Ballu и Royal. И тут я прифигел от стоимости. Просто сама возможность WiFi подключения прибавляла в стоимости почти х2. Сложив стоимость установки бризеров в каждую комнату выходит очень даже жирно (4 комнаты). Простой попсовый бризер с wifi выходит под 30к денег. Пойдем поищем подешевле. Есть Ballu OneAir 100, который можно найти где-то за 20к денег. А если без WiFi, то имеется Ballu OneAir 80, который можно найти за 12к денег и обслуживаемая им площадь вполне достаточна для задачи.
Внешний вид.
Вот за такую стоимость уже жаба не сильно бухтит. Стал искать информацию про него. Оказалось что это вообще клон бризер Xiaomi BioFamily N80, который само собой с WiFi и MiHome. Но эти Xiomi уже не продают, а там где их еще можно найти - цена кусается. Ладно, в голове стала складываться картинка, что в нашЪ OneAir 80 можно вполне засунуть "мозгов", потратив не фиг много времени и финансов, и выйдет дешевле чем брать "готовое", да и ещё на своей прошивке без левых "облаков". Звучит как план! Надо попробовать.
Заказал для пробы данный девайс. Посмотрел как разбирать и собственно разобрал. Внутри нас ожидает довольно примитивная плата управления.
За качество фото не пинать.
Примитивно до боли в глазах. DC-DC преобразователь 24В- 5В; PIC микроконтроллер, к которому подключен: Пин для ШИМ управления турбиной; Мосфет подающий питание на турбину; Пин включающий нагрев ТЕНа, тоже умеющий в ШИМ; Сенсоры открытия дверцы и шторки, самый простой замкнут-разомкнут; Активный Биззер; светодиоды индикации и тач-сенсоры.
Ну это всё элементарно. Буквально за пару вечеров за парой бутылочек.... эм ..кофе накидал свою схемку с управлением через ESP32, развел плату в требуемые габариты максимально сохранив номиналы, обозначения и даже положения элементов на плате (по приколу), и заказал.
Ваще изи
Платы пришлось делать 2.5 мм в толщину, что бы модуль ESP-wroom-32e можно было монтировать крышкой "вниз", и крышка скрывалась в толще платы, иначе для ESP места просто на плате нет, казалось бы плата большая, а места нет - везде что-то да мешает.
Дождался платы, собрал-спаял. воткнул.
Штат не штат
Единственное пришлось "подушечки" сенсоров переклеить. Но это мелочи.
Встает как к себе домой, ну в принципе ничего удивительного.
Как к себе домой
Все подходит хорошо. Все штатные проводки на местах, Крышечка закрывается. И получается полностью подменная плата.
Прошивку я решил писать на ESPHome, т.к. с другими лень возиться, да и незачем. Если вдруг кому нужен её исходник - посмотреть на нее можно на ГитХабе. Заодно там же найдете полезные ссылочки, если заинтересует.
Итого имеем: 12к бризер, примерно 3к плата, тоесть за 15к денег имеем "умный" бризер, который без каклих-либо костылей интегрируется в умный дом HomeAssistant. Вот и выбираем, 15к или 25к за готовый? Конечно, есть один минус - нет автоматической заслонки, только ручная. Колхозить серву на нее я не стал.
Написав о всём этом в чатике, оказалось, что желающих провернуть со своим OneAir 80 не то чтобы мало, их есть. Есть спрос, сделаю и предложение. первая партия таких плат ушла буквально за час О_о, пришлось заказывать еще партию плат. Вот такое вот кино.
… и по дороге прокачать кучу навыков. Ну а почему бы и нет? Если принимать верные решения, все возможно. Попробуйте! Если справитесь, получите награду в профиль. Кстати, никаких особых знаний не надо, достаточно логики и интуиции.