Buck Blog · 博客正文

返回技术分享首页
「驭光 NeuroLux」暑期一周树莓派高阶项目 — 脑波驱灯 · 意念驭光

驭 光

N E U R O L U X
脑波驱灯 · 意念驭光
暑期一周树莓派高阶项目  |  TGAM EEG → Raspberry Pi 4 → Philips WiZ Smart Light
🧠 蓝牙脑波采集 💡 智能灯光控制 📡 局域网脑波广播 📊 实时可视化仪表盘 🤖 Claude Code + DeepSeek
01 项目概述

🎯 一句话描述

佩戴 TGAM 脑波模块,睁眼看屏幕 → 灯自动亮冷白光闭眼放松 → 灯自动切换暖橙暗光;长时间闭眼 → 灯光渐灭。全程无需手动、无需语音、无需手机——纯脑波驱动。

🔬 科学原理:α 波阻断(Alpha Blocking)

1929 年 Hans Berger 发现——人一闭眼,α 波功率立即飙升 2–5 倍;一睁眼,α 波瞬间被抑制。这是人体自动生理反射,不需训练、不受主观意志干扰,远比"主动意念控制"可靠。TGAM 前额电极(Fp1 位置)足以捕捉这一变化。这也是项目最核心的可靠性保障——我们控制的是反射,不是意念。

🧠
生理反射驱动
α 波阻断是硬编码在神经系统里的自动反射,睁眼即抑制、闭眼即爆发——稳定性远超主动意念控制
📡
蓝牙无线采集
TGAM 通过蓝牙 SPP 发送数据,USB Dongle 插入树莓派即可接收,佩戴者零物理连线
🔗
局域网脑波广播
TCP Server :9527 实时推送 JSON 脑波流,局域网任何设备可订阅——为多端扩展预留标准接口
📊
实时可视化仪表盘
Flask + Chart.js Web 面板:脑波雷达图、注意力/冥想双曲线、α 功率脉冲柱、虚拟灯泡
🛡️
全异常容错
蓝牙断连自动重绑 · WiZ 掉线恢复 · 信号质量门控 · 状态切换防抖冷却 · 系统开机自启
🤖
AI 辅助开发
Windows 端 Claude Code + DeepSeek v4-pro 生成代码 → SSH/SCP 部署 Pi → VNC 远程验证

📋 关键性能指标

< 1.5s
睁眼→灯响应延迟
> 85%
睁/闭眼检测准确率
57600
蓝牙 SPP 波特率
2GB
Pi 内存全链路占用
02 系统架构

📐 全链路拓扑

┌──────────────────────────────────────────────────────────────────────────┐ 驭光 NeuroLux 系统架构 局域网 192.168.1.0/24 │ │ ┌──────────┐ 蓝牙 SPP ┌─────────────────────────────────────────┐ TGAM · · · · · · · · → 树莓派 4 (Debian 10, 2GB aarch64) 脑波模块 USB BT Dongle (前额佩戴) 57600bps /dev/rfcomm0 pyserial parser └──────────┘ 信号处理管线 滑动滤波 → α功率提取 → 眨眼检测 → 质量门控 ┌──────────┐ ┌──────────┐ ┌──────────┐ GPIO LED WiZ 灯泡 TCP :9527 PWM调亮度 UDP 38899 脑波广播 └──────────┘ └──────────┘ └──────────┘ Flask :5000 (Web 仪表盘 + SSE 实时推送) └─────────────────────────────────────────┘ │ ↑ │ │ 局域网任意浏览器访问 :5000 │ │ │ │ ┌──────────────────────┐ │ │ │ Windows 开发机 │── SSH/SCP 部署代码 ──→ Pi │ │ │ Claude Code │── VNC 远程桌面 ────→ Pi │ │ │ + DeepSeek v4-pro │ │ │ └──────────────────────┘ │ └──────────────────────────────────────────────────────────────────────────┘

📂 项目代码结构(共 26 个文件)

~/brain-light/ ├── main.py # 统一入口,argparse 参数化 ├── config.yaml # 所有配置项集中管理 ├── requirements.txt # Python 依赖 │ ├── tgam/ │ ├── __init__.py │ ├── parser.py # ThinkGear 协议解析 (字节状态机) │ └── replayer.py # CSV 离线回放 (零佩戴开发) │ ├── signal/ │ ├── __init__.py │ ├── processor.py # 滑动滤波 + FFT α 提取 │ ├── blink_detector.py # 眨眼尖峰检测 (>3σ) │ └── classifier.py # 睁眼/闭眼/过渡三态分类 │ ├── light/ │ ├── __init__.py │ ├── gpio_led.py # GPIO17 PWM LED │ ├── wiz_controller.py # WiZ UDP 38899 JSON │ └── mapper.py # 脑波→(色温,亮度) 映射 │ ├── network/ │ └── tcp_server.py # asyncio 脑波广播 │ ├── web/ │ ├── __init__.py │ ├── dashboard.py # Flask + SSE │ ├── templates/index.html # 仪表盘页面 │ └── static/ │ ├── style.css │ └── dashboard.js # Chart.js 图表 │ ├── scripts/ │ ├── calibrate.py # 个人 α 基线校准 │ ├── brain_client.py # TCP 测试客户端 │ └── brain-light.service # systemd 自启 │ ├── data/ # CSV 脑波录制 ├── logs/ # 运行日志 └── README.md
03 硬件清单与接线
#组件型号/参数用途状态
1树莓派 42GB · Debian 10 Buster · aarch64主控制器:采集+处理+控灯+Web已有
2TGAM 脑波模块NeuroSky ThinkGear · 蓝牙 SPP · 57600bps · 512Hz前额 EEG 采集已有
3USB 蓝牙 DongleCSR 芯片 · Bluetooth 4.0+ · 免驱Pi 端接收 TGAM 蓝牙数据已有
4Philips WiZ 灯泡WiFi 直连 · UDP 38899 · RGB+色温 1700-6500K主力执行器已有
5普通 LED + 220Ω 电阻5mm 高亮 LEDGPIO 本地开发验证¥5
6杜邦线母对母 若干LED 接线¥5
7运动头带宽款弹性跑步头带固定 TGAM 于前额¥20
8医用导电膏EEG 专用导电凝胶降低皮肤-电极阻抗¥20

🔌 接线图

连接方式说明
TGAM → Pi蓝牙无线TGAM 蓝牙模块广播 SPP → Pi USB Dongle 接收 → /dev/rfcomm0 (57600bps 8N1)
LED → Pi杜邦线LED 正极(长脚) → GPIO17 (Pin11) · LED 负极(短脚) → 220Ω → GND (Pin9)
WiZ 灯泡 → PiWiFi 无线同一局域网 → Pi 通过 UDP 38899 发送 JSON 指令直控灯泡
TGAM 供电杜邦线TGAM VCC → Pi Pin1 (3.3V) · TGAM GND → Pi Pin6 (GND)——或独立电池供电

⚡ GPIO 引脚占用

Pi 引脚BCM用途
Pin 13.3VTGAM 供电 (可选)
Pin 6GNDTGAM / LED 共地
Pin 8GPIO14 / TXDUART TX (备用,本项目不用)
Pin 10GPIO15 / RXDUART RX (备用,本项目通过蓝牙)
Pin 11GPIO17LED PWM 亮度控制
Pin 9GNDLED 负极回路
04 三层通信协议

📡 第1层:ThinkGear 数据包 (TGAM 蓝牙 → Pi)

┌──────┬──────┬──────┬────────────────────┬──────┐ │ SYNC │ SYNC │ PLEN │ PAYLOAD │ CHK │ │ 0xAA │ 0xAA │ N │ N 字节载荷 │ 校验 │ └──────┴──────┴──────┴────────────────────┴──────┘ 校验: CHK = ~(sum(PAYLOAD) & 0xFF) → (CHK + sum) & 0xFF == 0 通过 PAYLOAD = [CODE][LEN][DATA...] 连续排列: CODE 名称 长度 含义 0x02 Poor Signal 1 byte 0=完美 200=无信号 >50应丢弃 0x04 Attention 1 byte eSense 0-100 0x05 Meditation 1 byte eSense 0-100 0x80 Raw Wave 2 bytes Big-endian 16-bit signed, 512Hz 0x83 EEG Power 24 bytes 8频段 × 3字节 big-endian: δ(0.5-2.75Hz) / θ(3.5-6.75Hz) / low-α(7.5-9.25Hz) high-α(10-11.75Hz) / low-β(13-16.75Hz) / high-β(18-29.75Hz) low-γ(31-39.75Hz) / mid-γ(41-49.75Hz)

💡 第2层:WiZ UDP 协议 (Pi → 灯泡)

项目详情
传输层UDP 端口 38899
数据格式JSON 明文
发现灯泡广播 {"method":"getPilot"} → 255.255.255.255:38899
设置状态{"method":"setPilot","params":{"state":true,"b":80,"temp":4200}}
可设参数state(开关) · b(亮度 1-100) · temp(色温 1700-6500K) · r/g/b(0-255) · dimming(渐变 ms) · sceneId(场景编号)
查询状态{"method":"getPilot"} 单播到灯泡 IP

🔗 第3层:TCP 局域网广播协议 (Pi → 任意设备)

项目详情
传输层TCP Server 监听 0.0.0.0:9527 (asyncio)
消息格式JSON Line:每条完整 JSON + \n 分隔
消息类型brain_state (每 0.5s 一帧) · light_status (灯状态回执) · ping/pong (心跳 5s)
brain_state 格式{"type":"brain_state","ts":...,"attention":72,"meditation":25,"alpha_power":185.2,"beta_power":82.1,"blink_count":0,"eyes_state":"open","poor_signal":0}
心跳超时15s 无 Pong → 判定断线 → 自动移除客户端 → 灯保持最后状态不变
多客户端支持任意数量客户端同时连接,各自独立心跳

🔄 数据流总览

TGAM 蓝牙 树莓派 执行器 / 外部 │ │ │ ├─ 0xAA 0xAA ──→ │ [parser] 状态机逐字节扫描 │ ├─ PLEN ──────→ │ │ ├─ 0x02 ──────→ │ PoorSignal ←→ [质量门控] >50丢弃 │ ├─ 0x04 ──────→ │ Attention ──→ 10帧平滑 │ ├─ 0x05 ──────→ │ Meditation──→ 10帧平滑 │ ├─ 0x80 ──────→ │ RawWave ──→ [眨眼检测] >3σ尖峰 │ ├─ 0x83 ──────→ │ EEG Power──→ α=low+high ─→ 分类器 │ └─ CHECKSUM ──→ │ │ │ │ │ [classifier] OPEN/CLOSED/TRANSITION │ │ ↓ │ │ [mapper] 查表 → (色温,亮度,过渡) │ │ ↓ │ ├─ WiZ UDP 38899 ───────────────→ 💡 │ ├─ GPIO PWM ──────────────────→ LED │ ├─ TCP :9527 broadcast ────────→ 🌐 │ └─ Flask SSE :5000 ────────────→ 📊 │
05 信号处理与状态判断

🔬 信号处理管线(5 个阶段)

阶段模块输入处理输出
1. 协议解析tgam/parser.py原始字节流 (/dev/rfcomm0)状态机: WAIT_SYNC1→WAIT_SYNC2→WAIT_PLEN→READ_PAYLOAD→VERIFYdict{poor_signal, attention, meditation, raw_wave, eeg_power}
2. 质量门控— (inline)poor_signalif poor_signal > 50 → DISCARD有效帧 / 丢弃标记
3. 滑动滤波signal/processor.pyattention, meditation, eeg_powerAttn/Med: 10帧(~1s)均值 · α_power: 20帧(~2s)均值平滑后的 attn, med, alpha
4. 眨眼检测signal/blink_detector.pyraw_wave (512Hz)500ms窗std → >3σ尖峰(50ms<宽<300ms) → 连续2次<1s=双眨眼blink_count, double_blink_event
5. 状态分类signal/classifier.pysmoothed_alpha, attn, med, blinkα>150且Attn<45→CLOSED · α<60或Attn>55→OPEN · 其他保持OPEN / CLOSED / TRANSITION

🎯 脑波 → 灯光映射表

脑波状态判断条件色温亮度视觉效果过渡
睁眼·专注OPEN + Attn>605000K 冷白85%高亮冷白,适合屏幕阅读0.8s
睁眼·普通OPEN + Attn≤604200K 自然白65%自然白光,日常照明1.0s
过渡状态TRANSITION3500K 暖白40%偏暖暧昧区1.5s
闭眼·放松CLOSED + <60s2400K 暖橙20%暗暖橙光,放松氛围2.0s
长闭·入睡CLOSED + ≥60s2200K 极暖3%→0极暗→渐灭,助眠日落5.0s

⚙️ 状态机与防抖策略

机制参数作用
施密特滞回OPEN 阈: α<60 或 Attn>55 · CLOSED 阈: α>150 且 Attn<45中间带保持上次状态——消除临界抖动
防抖确认状态变化需持续 1.0s 才生效过滤眨眼/短暂闭眼(100-300ms)
冷却期状态切换后 3s 内不响应新变化防止频繁切换灯光闪烁烦人
入睡判定连续 CLOSED ≥ 60s闭眼小憩不触发,真入睡才渐灭
唤醒策略睁眼瞬间 → 65%/4200K不拖沓,快速回应
信号差保护PoorSignal>50 持续3s → 灯保持当前状态电极脱落不误关灯
06 7 天详细开发计划

每半天一个可执行任务块,精确到操作步骤。开发方式:Windows Claude Code + DeepSeek v4-pro 生成代码 → SSH/SCP 部署 Pi → VNC 验证运行效果。

DAY 1
环境搭建 + 硬件冒烟验证
☀️ 上午(4h)—— 开发环境 + Pi 无头化
1.1Clash Verge从 files.buckfpga.uk 下载 Windows 版 → 配置代理 → 确认科学上网
1.2Claude Code按 buckfpga.uk 博客教程: Node.js → npm install → 配置 DeepSeek v4-pro endpoint + key
1.3验证 AI对话测试 → 代码生成 → 文件读写 → 确认 Claude Code 可用
1.4Pi 基线SSH 登录: cat /etc/os-release · uname -a · free -h · df -h · ip a · lsusb
1.5换源清华 Debian 10 源 → apt update && apt upgrade -y
1.6VNC 验证Windows VNC Viewer 连 Pi → 确认桌面可操作(已安装)
1.7🎯 拔线测试拔 HDMI+键鼠,仅留电源+网线 → VNC 全流程 → 无头化确认
🏆 里程碑:Claude Code 能正常对话生成代码 + Windows VNC 可远程操作 Pi 桌面(Pi 已拔掉显示器键鼠,仅电源网线运行)+ scp 可推送文件到 Pi——开发-部署-验证三通道全部打通,后续所有工作都在这个闭环里完成
🌤️ 下午(4h)—— Python 环境 + 硬件冒烟
1.9Python venvpython3 -m venv ~/brain-light/venv && source venv/bin/activate
1.10pip 依赖pip install pyserial RPi.GPIO numpy flask · apt install python3-scipy -y
1.11蓝牙栈apt install bluetooth bluez bluez-tools -y · systemctl enable bluetooth --now
1.12Dongle 验证插 USB 蓝牙 → lsusb 看到适配器 → hciconfig -a 确认 hci0 UP
1.13GPIO 冒烟LED+220Ω 接 GPIO17+GND → Python 闪 3 次 → RPi.GPIO 正常
1.14骨架+Git创建全部目录+__init__.py → git init → 首次 commit
🏆 里程碑:Pi 上蓝牙服务运行正常,USB Dongle 识别为 hci0 且 UP 状态;GPIO17 接的 LED 可通过 Python 脚本控制闪烁;brain-light 目录结构全部建好、Git 已初始化——软件开发环境、无线通信栈、物理 IO 三层全部就绪,可以开始接入 TGAM
DAY 2
TGAM 蓝牙配对 + 脑波数据采集
☀️ 上午(4h)—— 蓝牙通信打通
2.1TGAM 上电TGAM VCC→Pi 3.3V/GND → 蓝牙模块指示灯确认工作
2.2蓝牙扫描bluetoothctl → scan on → 找到 TGAM 设备 (名含 HC-05/BT/TGAM) → 记 MAC
2.3配对信任pair <MAC> → trust <MAC> → connect <MAC> → 确认配对
2.4rfcomm 绑定sudo rfcomm bind 0 <MAC> → ls /dev/rfcomm0 确认存在
2.5持久化配置 /etc/bluetooth/rfcomm.conf 或 udev → 重启自动重连 TGAM
2.6连通验证pyserial /dev/rfcomm0 57600 → 读原始字节 → 找到 0xAA 0xAA 同步头
🏆 里程碑:bluetoothctl 配对并 trust TGAM 设备成功;/dev/rfcomm0 设备文件存在;pyserial 打开 /dev/rfcomm0 57600bps 能读到以 0xAA 0xAA 开头的原始字节流——TGAM 的脑电数据已经通过蓝牙进入 Pi 内存,硬件链路完全打通,可以开始解析 ThinkGear 协议
🌤️ 下午(4h)—— 协议解析 + 数据录制
2.7终端面板每秒刷新: [14:32:05] Sig:0 Attn:72 Med:25 α:18.5k β:8.2k
2.8CHECKSUM校验不符→丢弃+日志 · total/bad 包统计
2.9EEG Power0x83 → δ/θ/low-α/high-α/low-β/high-β/low-γ/mid-γ (8×24bit)
2.10CSV 录制全字段+ts 写 data/session_xxx.csv
2.11tgam/replayer.py读 CSV 按原始间隔 yield → 零佩戴开发
🏆 里程碑:终端每秒刷新一行实时脑波数据(PoorSignal/Attention/Meditation/α/β 数值可见);CHECKSUM 校验通过率 >95%;CSV 文件完整记录了 5 分钟以上脑波数据;回放器按原始时间间隔逐帧 yield,后续开发可离线调试——从此不必每次测试都佩戴 TGAM 头带
DAY 3
信号处理 + GPIO LED 控制
☀️ 上午(4h)—— 信号处理管线
3.1滑动窗口Attn/Med: 10帧(~1s) · α_power: 20帧(~2s) 均值平滑
3.2α 总功率alpha_total = low_alpha + high_alpha
3.3眨眼检测RawWave 500ms窗 std → >3σ尖峰(50ms<宽<300ms) → 双眨眼<1s
3.4质量门控PoorSignal>50 → skip · flag DISCARDED
3.5终端 ASCIIα 功率 █ 密度柱状图
🏆 里程碑:Attention/Meditation 经 10 帧滑动平均后曲线平滑无毛刺;α 总功率 = low_α+high_α 实时计算正确;眨眼检测能在终端正确打印 double_blink 事件(故意眨眼测试验证);PoorSignal>50 的帧被正确丢弃——4 条信号处理管线全部就绪,输入脑波帧、输出干净的特征向量
🌤️ 下午(4h)—— 脑波驱动 GPIO LED
3.6PWMRPi.GPIO.PWM(pin,100) 0-100% 占空比
3.7施密特滞回开: Attn>60 持1.5s · 关: Attn<35 持2.0s · 中间保持
3.8实测戴 TGAM → 睁眼灯亮/闭眼灯暗
3.9成功率20轮期望vs实际 → 统计误触发率
3.10调参实测反馈调滞回上下限+个人基线
🏆 里程碑:佩戴 TGAM 后睁眼看屏幕→GPIO LED 自动亮起(PWM 渐亮);闭眼放松→LED 自动变暗至设定亮度;20 轮"期望 vs 实际"测试中误触发率 < 15%;施密特滞回有效防止了临界抖动——脑波信号已经能稳定驱动物理硬件做出正确响应
DAY 4
WiZ 灯泡协议 + 本地闭环
☀️ 上午(4h)—— WiZ UDP 协议封装
4.1协议研究UDP 38899 JSON · Wireshark 验证
4.2自动发现广播 getPilot → IP/MAC/状态
4.3wiz_controller.pydiscover/on/off/set_brightness/set_color_temp/set_rgb/set_scene/get_state
4.4命令行验证python3 wiz_controller.py --discover 全功能测试
4.5渐变过渡fade_to(bri,ct,dur) 分20步UDP 视觉平滑
4.6场景预置App设"夜灯""阅读"等 → 获取sceneId
🏆 里程碑:light/wiz_controller.py 全部 8 个方法测试通过:discover() 能自动发现局域网内 WiZ 灯泡并返回 IP+MAC、on/off/set_brightness/set_color_temp/set_rgb 均可正确控制灯泡、fade_to() 渐变过渡视觉平滑、get_state() 可查询灯泡当前状态——灯泡已完全受代码控制,不再依赖 App
🌤️ 下午(4h)—— 脑波→WiZ 本地闭环
4.7signal/classifier.pyα_power/attn/med/blink → OPEN/CLOSED/TRANSITION
4.8light/mapper.py5态映射表 → (色温,亮度,过渡)
4.9状态机冷却3s防抖 · CLOSED≥60s渐灭 · 睁眼瞬间恢复
4.10闭环联调TGAM→蓝牙→rfcomm→parser→processor→classifier→mapper→WiZ 全链路
🏆 里程碑:佩戴 TGAM → 睁眼看屏幕 WiZ 灯泡自动变为 5000K 冷白 85% 亮(适合阅读);闭眼放松灯泡自动变为 2400K 暖橙 20% 暗(放松氛围);连续闭眼超过 60 秒灯光逐渐熄灭(模拟入睡日落效果);再次睁眼灯泡立即恢复 65% 自然白光——TGAM 脑波 → WiZ 灯泡的全自动闭环控制链路完全跑通,这是项目最核心的功能达成
DAY 5
局域网脑波数据广播 (TCP Server)
☀️ 上午(4h)—— TCP Server 实现
5.1JSON LineJSON+\n · brain_state/light_status/ping/pong
5.2tcp_server.pyBrainServer: asyncio TCP 0.0.0.0:9527 → 客户端列表 → broadcast()
5.3多客户端client_id+IP+时间 · 断开自动移除
5.4心跳5s Ping · 15s无Pong→踢
5.5连通验证nc Pi 9527 → 收到实时 JSON 脑波流
🏆 里程碑:局域网内另一台电脑执行 nc Pi_IP 9527,终端实时滚动打印 JSON 脑波流(attention/meditation/alpha_power/eyes_state 等字段每 0.5s 刷新一行);心跳 ping/pong 正常运转、超时 15s 自动踢客户端——脑波数据已可以实时流出 Pi,为多端扩展(手机/远程/AI分析)提供了标准数据接口
🌤️ 下午(4h)—— 集成 + 客户端测试
5.6集成主循环每0.5s: parse→classify → (1)WiZ控灯 (2)broadcast()
5.7灯状态回传WiZ执行后回传light_status 一并广播
5.8brain_client.pybrain_client.py --host 192.168.1.x → 终端实时显示远端脑波
5.9断线测试客户端断→server移除 · 重连→继续收数据
5.10config.yamltcp.enabled / tcp.port 配置化
🏆 里程碑:brain_client.py --host Pi_IP 在局域网任意电脑上运行即可实时显示远端脑波数据;主循环同时完成了控灯+broadcast 两项工作;客户端断开重连后可无缝恢复数据接收;灯状态在断线期间保持最后值不变——本地脑波控灯 + 远程数据订阅双通道稳定运行,为互联网远程控灯预留了标准化的 TCP 接口
DAY 6
可视化仪表盘 + 全链路集成
☀️ 上午(4h)—— Web 实时仪表盘
6.1Flask 骨架web/dashboard.py 监听 0.0.0.0:5000
6.2REST APIGET /api/state · /api/history?n=200 · /api/light · POST /api/light/set
6.3SSE 推送/api/stream — Server-Sent Events 每500ms一帧
6.4仪表盘页面CSS Grid 四区域明亮科技风面板
6.4a→ 脑波雷达图Chart.js δ/θ/α/β/γ 六边形 · 闭眼α瓣剧烈膨胀
6.4b→ 注意力/冥想线红蓝双Y折线 60s滚窗
6.4c→ α功率脉冲柱柱状图 + CSS glow动画 · 闭眼猛涨
6.4d→ 虚拟灯泡CSS SVG 颜色亮度随脑波实时变
6.5信号质量仪表圆形指针 绿(0-30)/黄(30-70)/红(70-200)
🏆 里程碑:打开浏览器 http://Pi_IP:5000 即可看到暗色科技风仪表盘:雷达图五频段六边形随脑波真实旋转、注意力(红线)和冥想度(蓝线)双曲线在 60s 窗口内滚动、α 功率柱状图在闭眼时瞬间猛涨并带有 CSS 发光脉冲动画、虚拟 SVG 灯泡颜色从冷白渐变到暖橙——全程通过 SSE 实时推送无需手动刷新,是演示验收的核心视觉载体
🌤️ 下午(4h)—— 全链路集成 + 服务化
6.6main.pyargparse: --config · --calibrate · --replay · --no-light · --no-tcp · --no-web
6.7config.yamlrfcomm设备·WiZ IP/发现·TCP开关端口·阈值·日志级别
6.8calibrate.py交互:"睁眼10s→闭眼10s"→自动算α基线→写config
6.9systemdbrain-light.service: After=bluetooth.service network.target · Restart=always
6.10日志系统INFO→文件 · DEBUG→journald · WARNING→stderr
🏆 里程碑:sudo systemctl start brain-light 一条命令启动全部功能(蓝牙连接→脑波采集→信号处理→WiZ 控灯→TCP 广播→Web 仪表盘);systemctl enable brain-light 后 Pi 断电重启自动恢复运行;journalctl -u brain-light 可查看完整运行日志;config.yaml 中修改任何参数无需改代码——项目已从开发原型进化为可部署的系统服务
DAY 7
全面测试 + 震撼演示验收
☀️ 上午(4h)—— 全面测试
7.1功能回归GPIO LED→本地WiZ→TCP广播→Web仪表盘→校准→配置切换
7.2异常测试电极脱落·灯泡断电·WiFi断·蓝牙断连·Pi重启自恢复
7.3长稳测试戴1h→htop监控·丢包率·蓝牙断连次数
7.4延迟测量睁眼→灯变 < 1.5s
7.5参数精调基于1h实测微调
🏆 里程碑:功能回归清单 12 项全部通过(GPIO LED/本地 WiZ/TCP 广播/Web 仪表盘/校准/配置切换);异常场景测试通过:电极脱落→信号质量跳红灯保持→重戴自动恢复、WiZ 断电重现→重新自动连接、网线拔掉 TCP 断→重连恢复数据流、Pi 重启→ systemd 自动拉起全部服务;1 小时连续佩戴运行无崩溃无内存泄漏;端到端睁眼→灯变延迟 < 1.5s——系统达到可交付的稳定状态
🌤️ 下午(4h)—— ⭐ 震撼演示验收
7.63分钟演示剧本分镜见下表
7.7视觉打磨毛玻璃·α柱glow·灯泡辉光·打字机标题·实时日志滚动
7.8分屏录屏OBS: 仪表盘(左)+演示者(右上)+灯泡特写(右下)
7.9接线图Fritzing/ASCII标注
7.10代码清理+Gitdocstring · git tag snapshot-YYYYMMDDhhmmss
7.11README背景·硬件清单·蓝牙步骤·配置·运行·TCP协议·FAQ
🏆 最终验收:3 分钟演示全程无卡顿无故障:仪表盘雷达图 α 瓣随睁眼闭眼剧烈变化、实体 WiZ 灯泡同步冷白↔暖橙切换、TCP 广播实时 JSON 流在另一台电脑终端滚动、电极拔掉重戴自恢复流畅自然。演示录制完成、代码仓库已打 tag、README 完整可复现——暑期一周树莓派高阶项目「驭光 NeuroLux」正式交付!

🎬 Day 7 演示剧本(3 分钟分镜)

时间画面内容
00:00仪表盘首页明亮科技风面板:雷达图旋转 + 双曲线波动 + 数据流粒子
00:10戴 TGAM演示者戴头带 → 雷达图 α 瓣收缩(睁眼特征)→ 虚拟灯泡亮冷白光,标注"注意力 78"
00:25分屏对比浏览器仪表盘(左) + 实体 WiZ 灯泡(右) 同步冷白高亮——视觉冲击点1
00:40闭眼演示者闭眼 → 雷达图 α 瓣剧烈膨胀!→ 虚拟灯泡切换暖橙——视觉冲击点2
00:55实体灯同步WiZ 灯泡同步变暖橙暗光——视觉冲击点3
01:10旁白讲解信号路径动画:TGAM→蓝牙→rfcomm→parser→classifier→mapper→WiZ UDP
01:25睁眼睁眼 → 灯瞬间冷白高亮——α 抑制的震撼速度
01:40TCP 广播演示另一台电脑 brain_client.py 实时打印 JSON 脑波流
01:55异常演示拔掉电极 → 信号质量跳红 → 灯保持 → 重新戴上 → 自动恢复
02:15结尾架构总览图 + 性能指标 + GitHub 地址
07 Web 仪表盘设计

📊 四大面板布局

A · 脑波雷达图δ/θ/α/β/γ 五频段六边形 · Chart.js radar · 闭眼α瓣剧烈膨胀(主视觉冲击)
B · 注意力/冥想红蓝双Y折线 · 60s滚动窗 · 实时更新
C · α 功率脉冲柱柱状图+CSS glow · 闭眼柱体猛涨带脉冲发光动画
D · 虚拟灯泡CSS SVG 灯泡+辉光 · 颜色亮度随脑波实时变化 · 睁眼冷白/闭眼暖橙

🔧 技术选型

后端Flask (Python) · 0.0.0.0:5000
实时推送Server-Sent Events (SSE) · Content-Type: text/event-stream · 500ms/帧
前端图表Chart.js 4.x · radar + line + bar 混合
样式纯 CSS · 明亮科技风 · 零第三方 UI 库
访问局域网任意浏览器 → http://Pi_IP:5000
08 关键风险与预案
风险概率影响预案
USB BT Dongle 不兼容 Debian 10Day2 阻塞lsusb 查芯片→内核模块 · 换 CSR 芯片 Dongle (¥15)
TGAM 蓝牙配对失败Day2 阻塞确认 TGAM 蓝牙模块型号(HC-05/06) · 手机先验证 TGAM 可被发现
rfcomm 绑定不稳定、频繁断连Day3-7 体验差watchdog 脚本监控 /dev/rfcomm0 · systemd 自动重绑 · rfcomm.conf 持久化 · 灯保持最后状态不闪
电极接触不良,信号质量差实测效果差酒精棉片擦额头+导电膏 · Day2 做 CSV 回放器可离线开发 · PoorSignal>50 门控兜底
DeepSeek API 不可用全程受阻Clash Verge 代理确认在线 → 再配 Claude Code · 备: 换其他 API endpoint
2GB 内存吃紧 (Flask+numpy+BT)仪表盘卡顿关桌面 multi-user.target · numpy 轻量操作 · Flask 单线程 · 仪表盘静态资源最小化
WiZ 协议文档不全,UDP 指令试错Day4 延迟Wireshark 抓 WiZ App 通信包逆向 · 已有成熟社区文档
当天任务没完成整体顺延每天下午6点 checkpoint · 未完成项顺延不超阶段1天
09 每日开发工作流
┌──────────────────────────────────────────────────────┐ │ 1. Windows: Claude Code + DeepSeek v4-pro 生成代码 │ │ 2. 本地快速语法检查 / 单元测试 │ │ 3. scp → Pi ~/brain-light/ 部署 │ │ 4. VNC 连接 Pi → python3 main.py → 观察运行效果 │ │ 5. 有问题 → 回 Windows Claude Code 修 → 再部署 │ │ 6. 功能确认 → git commit │ │ 7. 每日 18:00 checkpoint → 记录进度+阻塞项 │ └──────────────────────────────────────────────────────┘
10 未来提升方向(不纳入本周)
方向说明实现思路
互联网远程控灯另一台 Pi 通过互联网订阅脑波流,异地控灯利用已有代理工具暴露 TCP :9527 → 远程 Pi 连公网地址
双向映射两人各戴 TGAM+各有一灯,A 脑波→B 灯、B 脑波→A 灯TCP 双发 + 各自 mapper 独立
移动端 App手机替代 Web 仪表盘,更便携连 Pi TCP :9527 或直接蓝牙连 TGAM
佩戴产品化3D 打印外壳+头带,隐藏所有线Fusion 360 建模 → 淘宝 3D 打印 ¥30
多灯光模式阅读/冥想/影音/睡眠模式自动切换config.yaml 预设多套映射表
云端存储脑波历史上传,长期趋势+睡眠报告SQLite 本地 → 定期同步云端
智能家居联动检测到睡着→触发语音助手"晚安"场景Home Assistant API / 关窗帘+设闹钟
驭光 NeuroLux  ·  脑波驱灯 · 意念驭光  ·  暑期一周树莓派高阶项目
TGAM EEG → Raspberry Pi 4 → Philips WiZ Smart Light  ·  Claude Code + DeepSeek v4-pro  ·  2026 暑期实习