Энтузиаст запустил веб-сервер на одноразовом вейпе. И он работает.

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

Энтузиаст запустил веб-сервер на одноразовом вейпе. И он работает.

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

Что за чип такой?

Все началось, когда Богдан, потроша очередной «электронный сосок для взрослых», вместо привычной черной кляксы непонятного происхождения увидел нормальный такой чип с маркировкой PUYA. Покопавшись, он выяснил, что это микроконтроллер PY32F002B. Характеристики у этой штуки, мягко говоря, скромные. Просто представьте:

  • Процессор: Cortex M0+ на частоте 24 МГц. Для сравнения, ваш 10-летний смартфон примерно в 100 раз быстрее.
  • Флеш-память: 24 килобайта. Сюда не влезет даже одна фотка с вашего телефона.
  • Оперативка: 3 килобайта. Три. Килобайта.

Казалось бы, на этом можно было бы закончить и выкинуть чип в мусорку. Но у Богдана родилась гениальная в своем безумии идея: «А ведь это вылитый веб-сервер!»

Как это вообще возможно? Магия из 90-х

Идея подключения этого чуда к интернету — это чистый олдскульный хакинг.Сначала нужно было как-то наладить общение между чипом и компом. Для этого Богдан использовал технологию semihosting. Если не вдаваться в детали, это такой специальный режим, когда через отладочный порт (те самые маленькие дырочки на плате) можно не только прошивать чип, но и гонять туда-сюда данные.

А дальше — чистая магия из времен, когда интернет пищал и трещал. Он заставил этот канал данных притвориться старым dial-up модемом и работать по протоколу SLIP. Это дедушка современного интернета, но Linux, к счастью, о нем еще помнит.

Пара консольных команд, немного шаманства с утилитами pyOCD и socat — и вот, у этого вейпа уже есть свой собственный IP-адрес. Он в сети.

Оставалось самое "простое" — запихнуть в 3 килобайта оперативки программу, которая будет обрабатывать TCP/IP запросы и отдавать странички. Богдан взял для этого крошечный IP-стек uIP и пример простейшего HTTP-сервера.

Первый запуск: «Невероятно быстрый» сервер (нет)

Первые тесты были, мягко говоря, удручающими.

  • Пинг до вейпа — 1.5 секунды.
  • Потери пакетов — 50%.
  • Время загрузки простейшей страницы — больше 20 секунд.

Как пишет сам Богдан, «это было так плохо, что даже смешно, и я почти хотел так все и оставить». Но потом он понял, в чем проблема. Его код, написанный для экономии памяти, отправлял данные по одному байту за раз. Это создавало чудовищные накладные расходы.

Оптимизация и триумф

У «сервера» было целых 3 КБ оперативки — по меркам таких систем, это целое состояние. Поэтому Богдан переписал код, добавив буферы для чтения и пакетную отправку данных. И вот после этого все полетело.

Новые результаты:

  • Пинг — 20 миллисекунд.
  • Потери пакетов — 0%.
  • Загрузка полной страницы блога — 160 миллисекунд.

Это уже реально быстро. Вся прошивка заняла всего 5 КБ флеш-памяти и 1.3 КБ оперативки. Осталось еще почти 20 КБ свободного места, чего с лихвой хватило, чтобы захостить на вейпе весь текст его статьи, включая картинки.

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

P.S. О таких вот необычных DIY-проектах и технологиях я иногда пишу у себя в тг канале «Кнопка*».

134
22
13
10
6
1
1
1
1
60 комментариев