禁书图书馆:将智能灯泡变成数字暗投点

概述

禁书图书馆项目将普通的 WiFi 智能灯泡改造成一个“赛博朋克数字暗投点”——一个开放的 WiFi 接入点和 Web 服务器,托管被禁或受挑战的书籍的数字副本。通过重新利用廉价的物联网设备,项目创建了一个隐蔽的本地信息档案,只要灯泡保持通电,就能保持可访问,无论外部互联网是否可用。

硬件选择与拆解

设备架构

该项目使用一款搭载 ESP32-C3 芯片、拥有 4 MB 闪存的 WiFi 灯泡。硬件的选择基于其对 Tasmota(一个用于本地物联网控制的开源固件)的兼容性,这为了解设备的 LED 控制 GPIO 引脚提供了起点:

  • 红色: GPIO6
  • 绿色: GPIO7
  • 蓝色: GPIO5
  • 冷白光: GPIO3
  • 暖白光: GPIO4

物理改造

为了探索添加外部存储(如 microSD 卡)的可能性,设备进行了完整拆解。过程包括拆除塑料灯泡外壳并撬出包含 LED 的子板。主板被包裹在橡胶状的灌封材料中,需要手动去除才能露出 ESP32‑C3 引脚。

作者成功焊接了用于串行编程的线(VCC、GND、TX、RX 和用于下载模式的 IO9),但添加 microSD 卡读卡器被证明不切实际。灯泡外壳的物理限制导致焊接不可靠,且 LED 控制器引脚仅设计为输出,无法重新用作 SD 卡读卡器的输入。

固件工程与存储优化

从 Arduino 迁移到 ESP-IDF

最初的开发使用 Arduino IDE 进行快速原型搭建 Web 服务器和 “Hello World” 测试。然而,项目需要修改 ESP32 分区表以增加书籍存储空间,而 Arduino 框架出于安全考虑限制了此操作。

为绕过这些限制,项目迁移至 ESP-IDF(Espressif IoT Development Framework)。通过在 menuconfig 中启用 SPI_FLASH_DANGEROUS_WRITE_ALLOWED,作者获得了在闪存偏移 0x8000 处覆盖分区表的能力。

分区表修改

为了最大化图书馆可用空间,作者缩小了主应用分区(app0),并扩展了 SPIFFS(LittleFS)分区。最终配置为 Web 服务器文件和电子书分配了 2 MB 数据,相比原始的 320 KB 大幅提升容量。

自定义安全启动实现

为确保设备能够通过 OTA(空中升级)更新而不泄露安全信息,作者开发了自定义的安全启动固件。标准 Tasmota 安全启动会将 WiFi 凭据以明文存储在 NVS(非易失性存储)分区,这对公共暗投点而言是安全风险。自定义方案在部署时擦除 NVS 分区,并使用极简的非 Arduino 固件托管一个基本的 Web 服务器用于 OTA 更新,从而在不暴露创建者凭据的前提下替换主固件。

Web 应用与用户体验

捕获门户集成

为了让连接到开放 WiFi 网络的用户能够发现图书馆,项目实现了 捕获门户。由于现代 HTTPS 流量阻止了简单的 HTTP 拦截,系统采用两种主要方式触发门户:

  1. DNS 重定向: DNS 服务器对所有请求返回设备自身的 IP 地址。
  2. 特定请求处理: 服务器拦截各操作系统已知的 “呼叫回家” 请求(例如 Android 的 /generate_204、Apple 的 /hotspot-detect.html),并将其重定向到本地图书馆 URL。

管理控制

位于 /admin 的受密码保护的管理面板允许操作员使用 AnalogWrite() 调整 LED 色温。这确保灯泡能够与公共场所现有照明融合,避免被发现。

技术约束与未来方向

存储限制

由于闪存总容量为 4 MB,设备只能容纳少量电子书(通常每本 EPUB 约 350 KB)。作者指出,这一限制使项目从通用图书馆转变为精选合集,每个暗投点都体现了创建者的特定价值观和选择。

计划增强

  • 网状网络: 实现网状网络(可能使用分布式哈希表)可让多盏灯泡共享合并存储,使网状中的所有书籍对任意单节点的用户均可访问。
  • 细粒度颜色控制: 在管理面板中添加 RGB 滑块,以实现更好的环境融合。

社区见解与反驳

围绕项目的讨论突出了若干技术和哲学层面的考量:

  • 检测风险: 有用户指出,虽然灯泡在视觉上隐蔽,但通过 WiFi 扫描或简单的断电循环即可轻易发现。
  • 操作系统行为: 用户提到 Android 设备常会自动断开没有互联网接入的 WiFi 网络,这可能阻碍自然发现。
  • “禁书”定义: 讨论中出现对 “禁书” 一词的争议,有人认为从学校图书馆移除的书籍并非法律意义上的 “禁”,因为它们仍可购买或供成年人阅读。
  • 相似项目: 项目被拿来与 PirateBox 对比,后者是一个使用类似离线 WiFi 接入点技术进行文件共享和论坛的早期项目。

Sources