世界を動かす技術を、日本語で。

使い捨て電子タバコでのウェブサイトホスティング

概要

  • 使い捨てVape のマイコンで Webサーバー を動かす試み
  • PUYA製PY32 マイコンの調査と特徴
  • SLIPプロトコルsemihosting を活用した通信手法
  • uIP による軽量IPスタック移植とパフォーマンス改善
  • 実装と最適化のポイント、プロジェクトリソースの紹介

使い捨てVapeでWebサーバーを動かす

  • 近年の 使い捨てVape は、USB-Cや再充電バッテリー搭載の高機能化
  • 中身を分解し、 PUYA ロゴの IC(PY32シリーズ) を発見
  • PUYAは主に フラッシュメモリ で有名だが、 ARM Cortex-M0+ 搭載マイコンも展開
  • 複数モデルのVapeから PY32ベース の基板を収集・調査
  • デバッグピンが明示されており、解析が容易

PUYA PY32F002Bのスペック

  • PUYA C642F15 チップを解析し、 PY32F002B と特定
  • 主な仕様
    • 24MHz Cortex-M0+ コア
    • 24KiBフラッシュ
    • 3KiB SRAM
    • 最低限の周辺機能のみ利用
  • 性能は控えめだが、 Webサーバー 用途には十分

SLIPとsemihostingによる通信

  • semihostingは、 ARMマイコン向けのシステムコール機構
  • デバッガ経由で 双方向通信 が可能
  • USBシリアル経由で SLIP(Serial Line Internet Protocol) を利用
  • LinuxやmacOSで slattach コマンドを使い、仮想ttyを生成しIPパケット通信を実現
  • pyOCDsocat でsemihostingをtelnetポート→仮想ttyへ変換し、SLIPでIP通信を確立

uIP移植と最適化

  • uIP はRTOS不要の超軽量IPスタック、 最小限のHTTPサーバー 例付き
  • SLIPコードをsemihosting対応に移植し、Webサーバーとして稼働
  • ARMでは メモリアラインメント 制約があり、uIPの一部コードを修正
  • Perlでファイルシステム生成スクリプトも調整し、移植性向上

パフォーマンス改善

  • 初期実装では 1.5秒Ping・50%パケットロス、ページ表示20秒超

  • SLIPの 1バイト単位通信 がボトルネック

  • 3KiBのRAM を活かし、 リングバッファ でバッチ転送を実装

  • 書き込みもバッチ化し、パフォーマンス大幅向上

  • Ping 20ms・パケットロス0%、ページ表示160ms を実現

  • RAM・フラッシュの使用率も最適化

    • FLASH: 5116B/24KB (20.82%)
    • RAM: 1380B/3KB (44.92%)

実装・応用例

  • 20KiB弱 のストレージでも、ブログ記事程度なら十分配信可能
  • 静的ページだけでなく、C言語で サーバーサイド処理 も実装可能
  • JSON API エンドポイントも追加し、リクエスト数やマイコンIDを返却

参考リソース・プロジェクト

  • 本プロジェクトの コードリポジトリ を公開
  • PY32C642に関する先行プロジェクトも存在
  • SLIPの後継として PPP(Point-to-Point Protocol) も補足

このプロジェクトは、極限までリソースが限られたマイコンでも、工夫次第で実用的なWebサーバーが構築できることを示す好例。

Hackerたちの意見

前に話題になったけど、最初の投稿はすぐにフロントページから消えちゃったと思う。直接vapeserverにリンクしてたから、すぐに負荷でダウンしちゃったんだよね。https://news.ycombinator.com/item?id=45243800

負荷に耐えられなくなった後、最後に一発の勇敢な煙を吐き出した。

こういうデバイスを再利用するのはめっちゃクールだよね。ポストアポカリプスのシナリオで、街がこんなランダムなコンピュータデバイスの寄せ集めで動いてるのを想像できる。でも、マイクロコントローラーが入った使い捨てのベイプ(最近の報告ではフルゲームやスクリーンもあるらしい)は、電子廃棄物のひどい元凶だよ。ここにはいろんな意味でのバカが詰まってるね。

バトラーの聖戦は全てのベイプを見つけるのかな?

これらの使い捨てベイプの中にある完全に再利用可能なリチウムバッテリーについては知ってたけど、それだけでもひどいよね。でも、FTAのはフルサイズのマイクロコントローラーとUSB-Cコネクタが付いてるんだ!これらのコネクタが外からアクセスできるのか、パッケージを壊さないとダメなのかはよくわからない。君が言ったように、「ここにはいろんな意味でのバカが詰まってる」そのハードウェアは、実際の製品の価値の半分以上はあるはずだよ!

その違法な使い捨てベイプを持って、ラディックパスのスペースに捕まらないといいね。

もう一つの例として、マイクロコントローラーと光センサーを使って結果を読み取って、Bluetoothでスマホに接続して結果を表示する一回限りのコロナ検査があるよ。前の議論はここで見られるよ: https://news.ycombinator.com/item?id=29698887

これを思い出すな: https://duskos.org https://collapseos.org

こういう負の外部性を前払いの価格に含めるのがほぼ不可能なのは残念だね。

こんなものが売れるってことは、どこかに規制が足りないってことだね。

「ベッドの横にあるムードオルガンから自動アラームで送られた小さな電流がリック・デッカードを目覚めさせた。」 > ディックは、IoTが集団計算で機能する巨大な人工生態系の源であると書いている。

昔のスペックとのミスマッチがちょっと面白い。コモドール64は64KBのRAMを持ってたけど、そのRAMは8ビット、1MHzのCPUに繋がってた。このデバイスはコモドール64の半分のRAMしかないけど、32ビット、24MHzのCPUに繋がってる。1980年代には夢のまた夢みたいなやつだよね。そして、2025年には使い捨て。変な意味でかなり印象的だよ。

Hacker Newsで議論の続きを見る