
让普通柜子有RGB光污染的灯带控制器(ESP32独立供电开发板)
简介
使用ESP32+微信小程序,分区控制柜子的灯光,同时也可作为ESP32-S3独立供电开发板
简介:使用ESP32+微信小程序,分区控制柜子的灯光,同时也可作为ESP32-S3独立供电开发板开源协议
:CC BY-NC-SA 4.0
(未经作者授权,禁止转载)描述
项目说明
通过微信小程序,以蓝牙的方式控制WS2812的色彩变化
本项目采用 CC BY-NC-SA 4.0 协议
原理说明
供电
采用双路12V供电设计,可使用Type-C的PD快充协议供电,也可使用12V DC适配器供电,设计电流为3A,支持10路负载输出(9路2.54间隔排针+1路2.54mm螺钉式接线端子)
另有Type-C UART接口可用于供电与数据传输,以便在没有外围供电的情况下调试软件,其设计有防倒灌电路,使得当DC与Type-C UART接口同时连接时,高电压不会由经Type-C倒灌进电脑。
此外,在Type-C供电至DC供电之间也有防倒灌。其作为防呆设计,避免在调试时插错接口损坏电脑,也降低DC输入在特殊情况下损坏诱骗电路的可能性。
供电逻辑如下:
graph TD
DC母座输入 --> 12V供电
Type-C诱骗输入 -->Type-C供电防倒灌--> 12V供电
12V供电 -->TPS5430
12V供电 -->HT7533
HT7533 -->3.3V输出
3.3V输出 --> ESP32-S3
TPS5430-->5V输出 -->WS2812
5V输出 -->其他外围5V设备
Type-C_UART输入 -->Type-C-UART接口防倒灌 -->12V供电
降压DC-DC(5V,为WS2812 LED供电)
使用德州仪器(TI)tps5430芯片,实现12V降压5V。其具有高转换率(95%)与大电流供电(持续3A,峰值4A)的特点。
在立创商城与该款芯片的规格书中有详细介绍参数,用例,PCB布局建议。
LDO(3.3V,为ESP32供电)
采用HT7533芯片,外围电路仅需2个滤波电容,需注意输出只有100mA。
控制
核心控制模块为ESP32-S3,具有足够多的GPIO引脚。本项目并未用到所有GPIO,但引出全部GPIO,可用于二次开发,也可兼具开发板的功能。
引脚独立供电,但与MCU共地的开发板,也能解决实际开发中周边设备的供电难题。
扩展IO
为实现更好的扩展功能,10路输出通道全部使用5V供电(DC-DC转换而来,与ESP32不用同一路),同时接口采用无特殊限制的引脚,作为开发板使用时更具有灵活度。
若需3.3V外部供电,小功率可考虑共用ESP32的LDO,大功率需另行设计DC-DC。(一般来说大功率外围设备也都是5V的吧)
PCB
使用四层板,内部为地平面和供电层,顶层与底层走信号线,降低干扰并提供良好的电源性能,同时降低布线难度。
RGB LED灯带
LED选型为WS2812B,特性为内置RGB与控制芯片,可寻址的串联控制灯带。可配合控制程序实现寻址与调色(动态效果也能实现,需软件配合)。
为降低PCB和焊接成本,直接使用现成的灯带(30颗灯珠/1米)。若有需要,可添加透镜,柔光条等方式优化灯光效果,也可以自行设计灯条。
软件逻辑
软件部分为简单的DEMO,暂未支持动态效果,仅支持固定颜色调色
开发时遇到两个问题:
- 似乎由于小程序存在延迟,难以实现在拖动条时实时发送数据,所以拖动后松手才能发送一次数据包给ESP32(测试时发现,如果在拖动时就发包,发包时会有阻塞现象,造成延迟高达数秒)
- 小程序的蓝牙功能与ESP32配合使用时,存在适配问题(由于机型等原因),需重写代码进行适配
此处代码为示例代码,仅展示关键细节做逻辑演示。代码为Micropython,微信小程序(.ts,.wxml)格式交叉使用
graph TD
ESP32启用蓝牙功能 --> 微信小程序调用蓝牙权限搜索设备 --> 在小程序中连接到ESP32 --> 选定所需控制的GPIO --> 选定RGB值 --> 封装命令为蓝牙数据包 --> ESP32接收并处理蓝牙数据包 --> ESP32向WS2812发送数据 --> WS2812变更颜色
ESP32启用蓝牙功能
self.bt = bluetooth.BLE()
self.bt.active(True)
#需要配置蓝牙UUID
ESP32启用蓝牙功能
// 开始搜索蓝牙设备
wx.startBluetoothDevicesDiscovery
选定所需控制的GPIO
选择GPIO: {{selectedGPIO || '请选择'}}
选定RGB值
const command = {
status: 'change',
target: gpio, // 将GPIO编号作为目标
action: { r: red, g: green, b: blue }
封装命令为蓝牙数据包
#调用 wx.writeBLECharacteristicValue
ESP32接收蓝牙数据包
red_value = int(data["action"].get("r", 0)) #解析RGB
ESP32处理数据
self.led_controller.set_color(red_value, green_value, blue_value, gpio_led) #传递蓝牙数据给LED控制模块
ESP32向WS2812发送数据
self.np = neopixel.NeoPixel(led_pin, 100) # 假设100个LED,可用于一次点亮100个及以内LED数量的灯条,但不能设置为动态效果
self.np[0] = (r, g, b) # 设置颜色
self.np.write() # 更新 LED 显示
外壳
外壳使用嘉立创EDA专业版设计,设计文件可在项目资料中看到
外壳有散热设计,但耐温较为有限,后续可加入NTC电阻与风扇实现温控与散热
外壳顶部没有做排针开孔,使用PCB正面的ESP32引出排针时,需打开外壳(PCB固定螺丝与上下外壳固定螺丝相独立,打开上盖即可,不必完全拆除外壳)
注意事项
- 在使用时,PCB上DC-DC与LDO会明显发热
- 输入输出接线需要留意正负极,确认后再上电,设计中没有防反接保护电路
- 现有的PCB设计不建议持续大功率使用,与散热措施和供电线宽有关
- 兼容性考虑选择了2.5mm间距螺丝接线端子,该款螺丝较小,建议使用SL2.0螺丝刀拆装线缆
- 设计灯带时需考虑线路负载与DC-DC负载
遇到的问题与建议
问题 | 建议 |
---|---|
LED错色错通道 | 检查供电和布线,可能供电不良或干扰 |
LED不亮/闪烁 | 检查接线端子,线太细容易虚接 |
实物展示
提示:作品的实物图片,图片可以加上说明。
其他
演示视频:演示视频上传附件即可,附件最大只能长传50M的文件,大于50M的文件可放置在其他网盘或视频网站上,只需把地址链接放入这里即可
工程附件:参加活动的作品必须把工程相关的程序附件上传至开源平台或个人的代码存储云端,附件最大支持50M上传(请勿在立创工作区上传,有限制)~~
设计图

BOM


评论