禁書ライブラリ:スマート電球をデジタル・デッドドロップに変える
概要
禁書ライブラリプロジェクトは、標準的なWi‑Fiスマート電球を「サイバーパンク的デジタル・デッドドロップ」へと変換します。つまり、オープンWi‑Fiアクセスポイントとウェブサーバーを備え、禁止・検閲された書籍のデジタルコピーをホストします。安価なIoTデバイスを再利用することで、電球が電源に接続されている限り、インターネット全体の可用性に左右されずに情報を局所的に隠蔽・保存できるアーカイブを実現します。
ハードウェアの選定と分解
デバイス構成
本プロジェクトは、ESP32‑C3チップ搭載、フラッシュメモリ4 MBのWi‑Fi電球を使用します。Tasmota(ローカルIoT制御向けのオープンソースファームウェア)との互換性を基準にハードウェアを選定し、LED制御用GPIOピンの割り当てを把握しました:
- 赤: GPIO6
- 緑: GPIO7
- 青: GPIO5
- クールホワイト: GPIO3
- ウォームホワイト: GPIO4
物理的改造
外部ストレージ(例:microSDカード)を追加できるか検証するため、デバイスを完全に分解しました。プラスチック製の電球ハウジングを取り外し、LEDを搭載したサブボードをはがします。基板はゴム状の封止樹脂で覆われていたため、手作業で除去しESP32‑C3のピンを露出させました。
著者はシリアルプログラミング用の配線(VCC、GND、TX、RX、IO9(ダウンロードモード))には成功しましたが、microSDカードリーダーの実装は実用的ではありませんでした。電球ハウジングの物理的制約によりはんだ付けが不安定であり、LEDコントローラのピンは出力専用に設計されているため、SDカードリーダーの入力としては利用できませんでした。
ファームウェア開発とストレージ最適化
Arduino から ESP‑IDF への移行
当初はArduino IDEでウェブサーバーや「Hello World」テストを素早くプロトタイプしました。しかし、書籍用ストレージを増やすためにESP32のパーティションテーブルを変更する必要があり、Arduinoフレームワークは安全性の観点からこの操作を制限しています。
この制限を回避するため、**ESP‑IDF(Espressif IoT Development Framework)**へ移行しました。menuconfigで SPI_FLASH_DANGEROUS_WRITE_ALLOWED を有効にすることで、フラッシュメモリのオフセット 0x8000 にあるパーティションテーブルを書き換える権限を取得しました。
パーティションテーブルの変更
ライブラリ用に利用可能な領域を最大化するため、メインアプリケーションパーティション(app0)を縮小し、SPIFFS(LittleFS)パーティションを拡張しました。その結果、ウェブサーバーのファイルと電子書籍用に 2 MB のデータ領域を確保でき、元の320 KBに比べて大幅に容量が増加しました。
カスタム Safeboot の実装
OTA(Over‑The‑Air)更新を安全に行えるよう、カスタム Safeboot ファームウェアを作成しました。標準のTasmota Safeboot はWi‑Fi認証情報をNVS(非揮発性ストレージ)パーティションに平文で保存するため、公開デッドドロップとしてはセキュリティリスクがあります。カスタム実装ではデプロイ時にNVSパーティションを消去し、最小限の非Arduinoファームウェアで基本的なウェブサーバーを提供してOTA更新を受け付けます。これにより、主要ファームウェアを置き換えても作成者の認証情報が漏洩しません。
ウェブアプリケーションとユーザー体験
キャプティブポータルの統合
オープンWi‑Fiネットワークに接続したユーザーがライブラリを発見できるよう、キャプティブポータルを実装しました。現代のHTTPSトラフィックは単純なHTTPインターセプトを防ぐため、システムは以下の2つの主要手法でポータルを起動します:
- DNSリダイレクト: DNSサーバーが全リクエストに対してデバイス自身のIPアドレスを返す。
- 特定リクエストのハンドリング: Android の
/generate_204や Apple の/hotspot-detect.htmlなど、OS が自動的にアクセスする「コールホーム」リクエストを捕捉し、ローカルライブラリURLへリダイレクトする。
管理者コントロール
/admin に設置したパスワード保護された管理パネルから、AnalogWrite() を用いてLEDの色温度を調整できます。これにより、公共スペースの既存照明に溶け込ませ、目立たないようにすることが可能です。
技術的制約と今後の方向性
ストレージの限界
フラッシュ容量は合計4 MBであるため、収容できる電子書籍は限られます(一般的なEPUBは約350 KB)。著者はこの制約がプロジェクトを「一般的な図書館」から「キュレーションされたコレクション」へと変えると指摘しています。各デッドドロップは作成者の価値観と選択を反映した限定的な蔵書となります。
提案される拡張機能
- メッシュネットワーク: 分散ハッシュテーブル等を利用したメッシュネットワークを実装すれば、複数の電球がストレージを共有でき、任意のノードに接続したユーザーが全蔵書にアクセス可能になります。
- 細かな色制御: 管理パネルにRGBスライダーを追加し、環境への溶け込み度を向上させる。
コミュニティの洞察と反論
プロジェクトに関する議論では、以下の技術的・哲学的側面が取り上げられました:
- 検出リスク: 電球は外観上は目立ちませんが、Wi‑Fiスキャンや電源のオンオフで容易に検出できる点が指摘されました。
- OS の挙動: Android デバイスはインターネット接続がないWi‑Fiネットワークから自動的に切断することが多く、自然な発見が阻害される可能性があります。
- 「禁書」の定義: 学校の図書館から除外された本は「法的に禁書」ではなく、購入や成人向け利用は可能であるという見解が出ました。
- 類似プロジェクト: 本プロジェクトは、オフラインWi‑Fiアクセスポイントとファイル共有・掲示板機能を提供した古典的な PirateBox と比較されました。
要約
ESP32ベースのスマート電球を再利用し、オフラインWi‑Fiアクセスポイントとして禁書のライブラリをホストする技術プロジェクトです。カスタムESP‑IDFファームウェアとキャプティブポータルを用いて、ユーザーがシームレスにアクセスできるようにしています。
タイトル
禁書ライブラリ:スマート電球をデジタル・デッドドロップに変える