← На главную

Энтузиаст превратил WiFi-лампу ESP32C3 в сервер запрещённых книг

15.06.2026 22:37 · hackernews

Энтузиаст решил превратить WiFi-лампочку в точку доступа с веб-сервером, раздающим запрещённые книги. Идея — установить такую лампу где-нибудь в сообществе, и любой, у кого есть устройство с WiFi, сможет получить доступ к материалам, пока лампа включена. Выглядит как обычная лампочка, найти её почти невозможно. Вдохновением послужил рассказ Бена Брауна «Library» про цифровой архив всего, что жалко потерять.

Для проекта выбрали лампочку с предустановленной прошивкой Tasmota. Tasmota — открытая прошивка для умных устройств, которая даёт локальный контроль, избавляя от облачных сервисов. Лампочка оказалась на чипе ESP32C3 с 4MB флеш-памяти. Вскрытие показало, что плата залита компаундом — вытащить её без разрушения корпуса почти невозможно. Пришлось выковыривать, чтобы добраться до контактов для пайки. Заодно выяснили распиновку: R на GPIO6, G на GPIO7, B на GPIO5, CW на GPIO3, WW на GPIO4.

Сначала хотели модифицировать Tasmota, но код оказался слишком сложным и раздутым. Перешли на Arduino IDE и написали простой Hello World — мигание светодиодом через последовательный порт. Прошивка взлетела. Дальше подняли открытую точку доступа и веб-сервер на Async Web Server. Попытались добавить microSD-карту, но вкорячить её в лампочку без разрушения нереально. Даже напечатали 3D-зажим для контактов — он оказался ненадёжным. От SD-карты отказались.

Изучили разделы памяти через esptool. В таблице разделов пять частей: nvs, otadata, safeboot, app0 (около 3MB) и spiffs (всего 320KB). Этого хватит на одну небольшую книгу. Решение — перекроить таблицу. Написали новый конфиг: уменьшили app0 до 1,125MB, а spiffs расширили до 2MB. Сгенерировали бинарник с кастомными разделами и записали его вручную в offset 0x8000, предварительно пересчитав MD5-хеш. Функция edit_partition_table в прошивке сверяет хеши и при несовпадении перезаписывает разделы и стирает nvs. Правда, первый раз API не давал доступа к флешу — пришлось разбираться, почему ESP32 SDK блокирует запись.

Читать оригинал →