Hosting a website on a disposable vape
Размещение сайта на одноразовой вейп-системе
Примечание: эта статья НЕ размещена на сервере, работающем на одноразовой вейп-системе. Настоящий пример можно посмотреть здесь.
Предыстория
Я несколько лет собирал одноразовые вейпы у друзей и семьи, изначально извлекая из них батареи для «будущих» проектов. Современные устройства стали сложнее: с USB-C и перезаряжаемыми аккумуляторами. Во время разборки я обнаружил микроконтроллер с маркировкой «PUYA» — это оказался ARM Cortex-M0+.
Технические характеристики
Микроконтроллер PY32F002B имеет:
- 24 МГц Cortex-M0+
- 24 КБ флеш-памяти
- 3 КБ ОЗУ
- Минимальный набор периферии
Подключение к сети
Идея использовать вейп в качестве веб-сервера пришла после экспериментов с semihosting — системными вызовами для ARM через отладчик. Для передачи данных использовался протокол SLIP (Serial Line Internet Protocol), эмулирующий модемное соединение через последовательный порт.
Настройка в Linux:
pyocd gdb -S -O semihost_console_type=telnet -T $(PORT) $(PYOCDFLAGS) &
socat PTY,link=$(TTY),raw,echo=0 TCP:localhost:$(PORT),nodelay &
sudo slattach -L -p slip -s 115200 $(TTY) &
sudo ip addr add 192.168.190.1 peer 192.168.190.2/24 dev sl0
sudo ip link set mtu 1500 up dev sl0
Для реализации TCP/IP стека выбрана легковесная библиотека uIP, не требующая RTOS и поддерживающая базовый HTTP-сервер.