使い捨て電子タバコでWebサイトをホスティングする
(bogdanthegeek.github.io)- 使い捨て電子タバコに内蔵された低性能な ARM Cortex-M0+ マイクロコントローラを使ってWebサーバーを動かした実験的プロジェクト
- 24KiBフラッシュと3KiB RAM を備える PUYA 製 PY32F002B チップを解析し、SLIP方式でネットワーク接続を実装
- Semihosting、SLIPプロトコル、uIP TCP/IPスタックを活用し、仮想tty経由でTCP/IP通信と HTTPサーバー機能 を移植
- 当初は非常に遅かったが、バッファ最適化 とデータ処理改善により応答速度とページ読み込み速度を大幅に向上
- 小容量メモリ 環境でも動的なサーバーコードの実行とAPIエンドポイントの提供まで実現
- コードは公開中 で、実際のホスティングは可能だが、メモリなどのリソース制約は大きい
はじめに
- この記事は、使い捨て電子タバコ上で直接動作するWebサーバーから配信されているのではなく、同じ内容を別サーバーで提供していることを先に明記しておく
- 実際の動作例は http://ewaste.fka.wtf/ で確認できる
背景
- 数年間、バッテリー を再利用しようという目的で、知人たちから 使い捨て電子タバコ を集めていた
- 最近、使い捨て電子タバコ機器がますます高度化し、USB-C と 充電式バッテリー を搭載し始めたことに関心を持った
- 分解中に PUYA という名前の フラッシュ内蔵 ARM Cortex-M0+ マイクロコントローラを発見し、低価格マイクロコントローラとしてよく知られたチップだった
- このマイクロコントローラを複数モデルから集め、デバッグピンのラベル表示 がされていたため解析しやすかった
使用したハードウェア
- チップ表記は
PUYA C642F15だったが、実際には PY32F002B 系列と推定される - 主な仕様:
- 24MHz Cortex-M0+ コア
- 24KiBフラッシュ
- 3KiB RAM
- いくつか周辺機器はあるが、本プロジェクトでは未使用
- 一般的なスマートフォンと比べれば性能は低いが、組み込み環境では 簡易Webサーバーの構築 は十分可能
ネットワーク接続
- 最初の発想そのものではなかったが、semihosting の概念を試しているうちにWebサーバーを動かすアイデアに至った
- Semihosting は 組み込みARM で syscall を模倣する方法
- レジスタに値やポインタを入れて breakpoint を呼び出すと、デバッガがそれを解釈して動作を処理する
- 一般的にはログ送信用途だが、双方向データ通信 も可能
- USBシリアルデバイスが SLIP(Serial Line Internet Protocol) プロトコルをサポートしており、これをネットワークインターフェースとして利用
- Linux(および一部の macOS)で
slattachやsocatなどを用い、仮想tty経由のSLIPネットワーク 環境を構築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が不要で、移植しやすい
- uIP のサンプル中の HTTPサーバー を活用し、SLIPコードを semihosting 方式に合わせて移植して Webサーバー起動に成功
- ARMアーキテクチャでは16ビットアラインメントの問題があったため、filesystem生成スクリプトを修正 し、Perlで変換処理を行った
速度最適化
- 初期状態では ping 1.5秒、50%のパケットロス、ページ読み込み20秒以上という非常に遅い応答速度だった
- 原因は バイト単位I/O の大きなオーバーヘッドだった
- 3KiB RAM を積極的に活用して リングバッファ を追加し、SLIP関数へまとめてデータを供給する構造に改善
- 書き込みもバッチ分割 して送信処理し、高速なクリーンアップを実現
- 最適化の結果、ping 20ms、ロスなし、ページ読み込み160ms を達成
- 全体のRAMとフラッシュ使用量:
- フラッシュ: 24KB中 5,116B(20.82%)
- RAM: 3KB中 1,380B(44.92%)
- ブログ全体のコンテンツも無理なく配信できる容量で、サーバーサイドのCコード実行も可能
その他の機能とまとめ
- APIエンドポイント を直接実装し、メインページへのリクエスト回数とマイクロコントローラのユニークIDを返す
- 極限の低性能ハードウェアと最小限のメモリで、動的WebサーバーとAPI まで実装した実験
6件のコメント
プロジェクトも記事もとても楽しく拝見しました。ただ、使い捨て電子タバコというものがあると知ってとても驚きましたし、これは違うのでは……と思いました。
私も非喫煙者なので知らなかったのですが、少し前に近所にできた無人カフェに使い捨て電子タバコの自販機があるのを見て知りました。下の Hacker News のコメントも、半分はあきれるような資源の無駄遣いについての内容ですね。はは。
コメントしていて思ったのですが、無人カフェで自動販売機形式の場合、成人認証はどうするのか気になりますね。自販機に身分証の認識機能もあるのでしょうか……
私はたばこを吸わないので何の話かと思ったのですが、使い捨てであるにもかかわらず、あまりにも多くの資源が使われているということなのですね
電子タバコを吸うとき、どこかに置き忘れたとか旅行先だとかで……
デバイスをもう1つ買うのも紙巻きタバコを吸うのもなんだかな、でもニコチンは補給したい、と思うときにコンビニで探すようになるんですよね
Hacker Newsのコメント
安価でありながら強力なハードウェアを探しているなら、中国の UZ801 4G LTE(Qualcomm MSM8916)ドングルも見てみる価値がある。このデバイスは約 $4〜5 しかしないのに、4GB eMMC、512MB RAM、本物の 4G モデム(ときどき 2 SIM 切り替え対応)など、印象的なハードウェアを備えている。実質的には古い Android SoC なので、GPU や GPS も含まれている。ドングル対応の作業もすでにかなり進んでいる
Zhihe シリーズ LTE ドングル情報
OpenStick プロジェクト
こうした風変わりなホームラボ用途のハードウェアプラットフォームを探しているなら向いている
入門者にはこのガイドがいちばん良さそう。Linux を入れるにはファームウェアパーティションをバックアップしてから再フラッシュする必要があり、そうしないと 4G モデムが動作しない。たった 5 ドルでこれだけのハードウェアが手に入るのは本当に信じがたい。ここにモバイルバッテリー(あるいは捨てられた電子タバコのバッテリーで自作したもの)を足せば、どこでも使える WiFi と 4G 対応の Linux マシンが完成する
この種の SoC や類似製品へのリンクが欲しいなら、Hackaday に専用記事と各種リンクがある
Hackaday の記事
AliExpress MSM8916 の例
実際、内蔵スクリーン付きだという MSM8916 ドングルも見つけた(ただし RAM 情報は不明)
Qualcomm MSM8916 の話を聞くと懐かしい。これは昔の友人だった Snapdragon 410 だ。2015 年の Moto G3 にもこのプロセッサが入っていた(今でもたまに WhatsApp 用に使っている)。Android ベース(バージョン 7)では、重い作業でなければ(予想に反して)かなり効率よく動く。こうした古いモバイルチップセットが今も生命力を保ったままサポートされているのは印象的だ。
ちなみに、このチップは Android 初の 64 ビット対応プロセッサのひとつだったが、Motorola が発売前に移植を間に合わせられず、32 ビット Android しかサポートしなかったというのも面白い話だ
Freedom Pop が配っていた Linux で動く LTE ドングルを思い出した。分解すると UART にもアクセスできた
自分にとって最大の問題は
a.) エレクトロニクスの世界の進化が速すぎること
b.) 自分のスキルと時間が足りず、こういうものでクールなものを作る力がないこと
前に licheerv nano(たとえば luckfox pico や Milk-v duo に近いもの)を買って、usb-c オーディオジャック付きのオープンソース iPod nano を作ろうとした。
2.4 インチ、あるいは 3 インチ未満で licheerv nano の MPI ポートに対応するタッチスクリーンが見つからなかった。
LVGL で小さくて携帯できるオーディオプレーヤーを作ることもできたかもしれないが、自分には難しかった
こういう種類の機器を再利用するのは本当に素晴らしい。いつか都市全体がこうした機器の寄せ集めで動くようになったら、ポストアポカリプス映画に出てきそうな設定を想像してしまう。
一方で、最近の使い捨て電子タバコにはマイクロコントローラだけでなく、最新の報道によればゲームや画面まで搭載されている。とんでもない電子廃棄物だ。愚かさが何重にも重なっている
別の例としては使い捨ての新型コロナ検査キットがある。マイクロコントローラと光学センサーを搭載し、Bluetooth でスマホに結果を表示する。以前の議論はこちら
使い捨て電子タバコの中にある、完全に再利用可能なリチウムバッテリーについてはよく知っていた。これだけでも深刻な無駄だ。
ところが今回は、マイクロコントローラと USB-C コネクタまで入っている! そのコネクタが外部からアクセス可能なのか、それとも筐体を分解しないと触れないのか気になる。
本当に愚かさが何層にも重なっている。中のハードウェア代だけで実際の製品価格の半分以上ありそうだ
使い捨て電子タバコが本当にそんなに深刻な電子廃棄物なのかは気になる。スマホ、車、ノートPC など、私たちが捨てる多くの物にも再利用可能なハードウェアはたくさんあるが、たいてい適切に管理されていないのは同じだ。むしろ電子タバコのハードウェアがある程度標準化されれば、Arduino のように学校のプロジェクトに使えるかもしれない、と想像したりもする
こういう話を聞くと duskOS と collapseOS を思い出す
こういう製品の販売が可能だという事実そのものが、規制不足の証拠だ
昔のコンピュータとのスペックのずれが興味深い。たとえば Commodore 64 は 64KB の RAM を 8 ビット、1MHz CPU につないで使っていた。だが今では、その RAM の半分しかない使い捨て機器ですら 32 ビット 24MHz CPU につながっている。1980 年代には想像もできなかったものが、2025 年にはこういう形で使い捨てとして現れる。不思議と印象的だ
実際には RAM は 3KB、フラッシュは 24KB だ。もちろんフラッシュの速度は古いメモリと似たような場合もあるが、レイテンシは比べものにならない
RAM は 3KB しかないので、古い VIC-20 よりも少ない
CPU は 1980 年代基準でもそこまで驚異的ではない。87 年には Acorn Archimedes が 8MHz ARM プロセッサを搭載していて、高価ではあったが最低でも 512KB RAM と組み合わせて使われていた
(ちなみに 1987 年がもう 38 年前だという事実に驚いている)
こういう機器がどれだけ有用かを示してくれてうれしい。こういう製品を「使い捨て」として扱うのは一種の狂気だ。道端に捨てられていた電子タバコから LiPo バッテリーを回収して使ったことがあるが、これらは充電回路まで内蔵した充電可能バッテリーだ(単純なものではない)。こんなものを一度使っただけで捨てるようにするという判断は、本当に間違っている。
これは事実上、「修理不能性」の極致だ。再利用・再充電を妨げるように設計されている点で、エコフレンドリーにもメーカー精神にも反している
再利用可能な電子タバコもあり、信頼できる店はそうした製品しか扱わない。ただ、これらは使い捨て電子タバコよりかなり高い。だから使い捨て製品は、密売人や未成年者(安価で没収されるリスクがあるため)に人気がある。
その結果、若者が犯罪組織と接触することになり、金がなくても彼らに借りを作ることになる。結局は薬物の借金と同じような波及を生む。それを埋め合わせるために別の犯罪に悪用される危険もある
音楽フェスで回収した使い捨て電子タバコから電動自転車用バッテリーを作る、すごい動画を見たことがある
関連動画
使い捨て電子タバコが合法である理由が理解できない。386 世代以降の世代は本当に資源の浪費を気にするものだと思っていたのに、がっかりだ
USB C と充電式バッテリーが入っているのに、どうして「使い捨て」に分類されるのかを説明しなければならない弁護士が、いずれ現れるのは間違いない
実際この形で作られている理由は、技術的には再利用可能なので、使い捨て電子タバコが禁止されている地域でも販売できるからだ。
わざと継続的な再購入と廃棄を促す、一部ユーザーの行動特性を狙った販売方法だ
完全に再利用可能な電子タバコがあるのに、なぜわざわざ使い捨てを買うのか理解できない。正直、喫煙習慣を断つ目的でしか意義があると思えない
レジ袋規制のせいで、より厚いビニール袋を 10 セントで売るのとまったく同じだ。どうせ「再利用可能」という名目なのだから
一部製品は交換可能なポッド/タンクを提供しているが、ほとんどはユーザーが手を入れられる部品がまったくない。リキッドがある程度減るとコイルが焼け始め、全体を捨てる構造になっている。ある店舗では使用済み品を回収して適切に分解処理しているらしいが、利用者の大半は普通のゴミとして捨てているようだ
USB C が入っている理由は、バッテリーが製品に入っているリキッド量に対して十分な容量を持っていないからだ。結局 2〜3 回フル充電できる程度で、リキッドがなくなる
使い捨て電子タバコは、社会がどうやってこれを普通のものとして受け入れたのか理解できない現象だ
社会はしばしば、広告予算のあるものを普通のものとして受け入れる傾向がある
人の肺に極めて深刻な損傷を、非常に短時間で与えうるという事実も見落とせない
終末サバイバル用品:弾丸、缶詰、飲み水? いや。
ファラデーケージに入れた geek bar 1,200 本だ
ハッキング万歳! まさにこういう内容のために Hacker News があるのだと思う。素晴らしい記事と面白いプロジェクトだった
最近の技術の状況は本当に奇妙だ。AI が私たちの仕事を奪うのではなく絵を描いてくれて、今度は eCigarette で Web サイトをホスティングしている。この状況を表す言葉としては「奇妙」しか思い浮かばない
筆者は、真の意味での「vaporware」を動かすための究極のコンピューティングプラットフォームを見つけたと言えるかもしれない