PixelDoodle(像素豆绘)是一个“图片转拼豆图 + ESP32 点阵显示”的完整项目,包含:
Version: 5.26.316
- Web 前端(上传、裁剪、生成、导出、扫码)
- Python/FastAPI 后端(调色、量化、导出、串口接口)
- ESP32 固件(BLE 接收图像、设备 UUID、二维码配对页)
- 图片生成拼豆图(颜色统计、坐标、导出 PNG/PDF/JSON)
- ESP32 64x64 点阵 BLE 显示
- 每台 ESP32 有唯一设备码(UUID,12 位 HEX)
- 启动页后显示二维码,二维码参数为
?u=<UUID> - 前端支持:
- 扫码识别二维码
- 手动输入 UUID
- 自动锁定目标设备并尝试 BLE 连接
- 浏览器拦截自动连接时弹出“点一下连接这台设备”
PixelDoodle/
├─ main.py # FastAPI 入口
├─ requirements.txt
├─ core/ # 图像处理、串口/BLE 后端能力
├─ static/ # 前端 JS/CSS
├─ templates/ # HTML 模板
├─ data/ # 颜色数据
├─ certs/ # 本地 HTTPS 证书(可选)
├─ docs/
└─ firmware/ # ESP32 固件(PlatformIO)
├─ src/main.cpp
├─ lib/beadcraft-receiver/
├─ lib/ble-receiver/
└─ platformio.ini
- Python 3.8+
- Windows/macOS/Linux
- PlatformIO(CLI)
- ESP32 开发板(当前配置:
esp32doit-devkit-v1) - HUB75 64x64 LED 点阵
- 推荐:Chrome / Edge(桌面)
- 需
HTTPS或localhost - Safari/iOS 对 Web Bluetooth 支持受限
在项目根目录执行:
pip install -r requirements.txt
python main.py默认监听:
https://0.0.0.0:8765(如果检测到certs/localhost-cert.pem和certs/localhost-key.pem)- 否则回退为 HTTP
可选环境变量:
PORT(默认8765)HOST(默认0.0.0.0)SSL_CERTFILESSL_KEYFILE
进入固件目录:
cd firmware
pio run -t upload --upload-port COM4串口查看日志:
pio device monitor -b 115200 -p COM4当前固件内关键配置在 platformio.ini:
PAIRING_BASE_URL已配置为:https://10.39.251.173:8765/
设备二维码最终形如:
https://10.39.251.173:8765/?u=F42DC97179B4
- ESP32 上电,显示二维码和设备 UUID。
- 前端点击扫码,或手动输入 UUID。
- 页面锁定目标设备(
?u=...)。 - 前端立即尝试 BLE 连接该设备。
- 连接成功后,生成图案并发送到 ESP32。
说明:
- 浏览器安全策略下,
requestDevice()可能需要用户手势。 - 若自动连接被拦截,前端会弹出简化确认层,让用户“一键连接当前设备”。
核心接口在 main.py:
GET /:主页GET /api/palette:调色板与预设POST /api/generate:图像转拼豆图POST /api/export/pngPOST /api/export/pdfPOST /api/export/jsonGET /api/serial/portsPOST /api/serial/sendPOST /api/serial/highlightGET /api/ble/devices(旧后端 BLE 扫描)POST /api/ble/send(旧后端 BLE 发送)
备注:当前主流程已改为浏览器 Web Bluetooth 直连,/api/ble/* 主要用于兼容旧方案。
排查顺序:
- ESP32 是否已上电并停留在 BLE 等待页
- 设备名是否为
BeadCraft-<UUID> - 浏览器蓝牙是否开启、系统权限是否允许
- 页面是否使用
HTTPS
前端已做回退策略:精确设备名匹配失败时,会回退到 BeadCraft- 前缀匹配。
- 手机浏览器对摄像头权限要求更严格,优先使用 HTTPS。
- 已支持“拍照/选图识别”兜底。
- 受 Web Bluetooth 规范限制,部分浏览器必须用户手势触发配对。
- 项目已将这一步最小化为单次确认按钮。
- 前端调试:优先桌面 Chrome/Edge
- BLE 联调:先确认设备名、再确认 GATT UUID
- 固件改动后:务必重新烧录并观察串口日志
MIT