Zerynth 智能氛围灯:Python + NeoPixel + 手机 APP 全彩控制
项目简介
基于 Zerynth 生态(Python 固件 + 手机 APP),驱动 Adafruit NeoPixel 灯带/环,实现手机端拾色器选色、预设动画(小蛇、旋转、彩虹、呼吸)与速度调节的智能氛围灯。支持 Arduino Due、STM32 Nucleo、Particle Photon、UDOO 等多平台,零 C++ 开发门槛。
硬件清单
- Zerynth Shield(集成触控、红外、麦克风、光敏、温度传感器)×1
- 主控板任选一:Arduino Due / STM32 Nucleo F401RE / Particle Photon / UDOO Dual ×1
- Wi-Fi 模块(非 Photon 需外挂,如 Adafruit CC3000 Shield)×1
- Adafruit NeoPixel 灯带或灯环 ×1
- 玻璃/3D 打印灯罩 ×1
组装步骤
- Wi-Fi Shield 与 Zerynth Shield 叠装于主控板(Photon 直插 Zerynth Shield 专用座)。
- NeoPixel 数据线接 Zerynth Shield 专用端口(默认 D6)。
- 整体装入灯罩,固定理线。
软件开发流程
- 安装 Zerynth Studio(跨平台浏览器式 IDE),连接主控板完成 “虚拟化”。
- 新建项目,创建 4 个文件:
main.py、animation.py、template.html、project.md。 - 分别粘贴对应代码(见下)。
- 点击 Uplink 烧录,上电自动连 Wi-Fi。
- 手机安装 Zerynth App,自动发现设备,点击进入控制界面。
核心代码解析
main.py —— 入口与 APP 绑定
import streams
from bcm43362 import bcm43362 as wifi_driver
from wireless import wifi
import animation
from zerynthapp import zerynthapp
streams.serial()
wifi_driver.auto_init()
wifi.link("SSID", wifi.WIFI_WPA2, "password")
new_resource("template.html")
def change_color(r,g,b): animation.setup_color(r,g,b)
def change_animation(n): animation.setup_anim(n)
def change_speed(n): animation.setup_anim_speed(n)
vp = zerynthapp.ZerynthApp("Zerynth Lamp", "Try me!", "resource://template.html")
vp.on("change_color", change_color)
vp.on("change_animation", change_animation)
vp.on("change_speed", change_speed)
vp.run()
animation.start(D6, 24) # D6 驱动 24 颗 LED
template.html —— 手机端 UI(jQuery Mobile + jqWidgets 拾色器)
包含:下拉式拾色器、动画选择下拉框(4 种)、速度滑块(0–100)。JS 回调 ZerynthApp.call() 触发 Python 端函数。
animation.py —— 多层动画引擎
- 三层
LedStrip对象:layer0/1前景动画,layer2背景呼吸。 - 线程安全锁
threading.Lock()保护共享缓冲区。 - 两个后台线程:
•animate_background:正弦波系数驱动背景色呼吸。
•animate_foreground:位移操作(左/右移)实现蛇形、旋转、彩虹流动。 start(pin, numpins)初始化并启动线程,主循环以 50 ms 周期合成三层并刷新灯带。
扩展玩法
- 利用 Zerynth Shield 麦克风做声控变色、光敏做自动亮度、温度做冷暖色温映射。
- 接入 MQTT/HTTP 实现 Home Assistant、HomeKit 集成。
- 多灯同步:同一 Wi-Fi 下多盏灯订阅同一主题,实现全屋联动。
制造工艺