概要
- 使い捨てVape から Webサーバー を構築した技術的な記録
- PUYA製マイコン (PY32シリーズ)を活用した詳細な分解と解析
- SLIPプロトコル と semihosting を利用したネットワーク接続方法の解説
- uIPスタック の移植と最適化による速度向上の工夫
- プロジェクトリソース や参考情報も紹介
使い捨てVapeでWebサーバー
- 数年間、 使い捨てVape を収集し、主に バッテリーの再利用 を目的とした活動
- 最近のVapeは USB-C充電 や 再充電可能バッテリー を搭載し、単なる使い捨てとは言い難い進化
- 分解中に発見した PUYA製IC(PY32シリーズ) の存在
- PUYAは フラッシュメモリ で有名だが、 安価なARM Cortex-M0+マイコン も製造
- 複数モデルのVapeから同一メーカーの PY32ベース基板 を入手
- デバッグピンの明示 に感謝
搭載マイコンの特徴
- IC型番は PUYA C642F15、実際は PY32F002B と推定
- 主な仕様
- 24MHz Cortex M0+
- 24KiBフラッシュ
- 3KiB RAM
- 最低限の周辺機能
- スペックは控えめだが、 Webサーバー運用は可能 と判断
ネットワーク接続の手法
- semihosting を活用し、 syscall的にデータ転送 を実現
- デバッグ接続経由で 双方向通信 を可能に
- USBシリアルデバイス は実質的に昔のモデムをエミュレート
- SLIP(Serial Line Internet Protocol) でIPパケット通信
- LinuxやmacOS でのSLIPサポート
- slattach コマンドで仮想ttyデバイス経由のIP通信
- pyOCD と socat を組み合わせ、semihosting出力を仮想ttyへ転送
- コマンド例:
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 sl0sudo ip link set mtu 1500 up dev sl0
uIPスタックの移植と最適化
- uIP は 小型IPスタック で、 RTOS不要 かつ移植が容易
- 最小限のHTTPサーバーサンプル も付属
- SLIPコードをsemihostingに合わせて修正
- ARMアーキテクチャ特有のアライメント制約 で例外発生
- ファイルシステム構造をPerlで修正 し、移植性向上
サーバーの速度改善
- 初期状態では Ping応答1.5秒、パケットロス50%、ページロード20秒超
- 1バイト単位の逐次通信 がボトルネック
- リングバッファを導入 し、まとめてデータ処理
- バッチ送信 でパフォーマンス向上
- 改善後は Ping応答20ms、パケットロス0%、ページロード160ms
- RAM使用量 と レイテンシ のバランス調整
- 例: FLASH 20.82%使用、RAM 44.92%使用
実用性と拡張性
- 約 20KiBの空き容量 でブログ記事程度の静的ページは十分配信可能
- サーバーサイド処理 もC言語で実装可能
- JSON APIエンドポイント を追加し、リクエスト数やMCU IDを取得可能
参考リソース
- プロジェクトのコード は公開リポジトリで参照可能
- 関連情報や同様のMCU識別プロジェクトも紹介
本記事は、 使い捨てVapeのマイコン を活用した 極小Webサーバー構築 の実践記録。 エンジニアリングの工夫 と 組み込み技術の応用例 として参考になる内容。