内容介绍
内容介绍
- 项目总结报告
- 项目和创意方向介绍
- 创意来源于给女朋友拍照时经常被骂,说为什么拍的这么黑,一点都不专业,怒叱我去好好学习拍照技巧,但是巧妇难为无米之炊,差生怎么能缺了文具,补光灯这个不可或缺的设备自然是“应运而生”。
- 项目设计思路及实现方法
- 该项目使用了乐鑫ESP32模组作为主控及周边电源电路和触摸电路,控制WS2812B灯珠的变化,可以应用于多种场景,例如:
- 1、便携式补光灯:可以在需要外景拍照补光时临时打光
- 2、mini挂饰:可以挂在包上显示内容,可以自定义图案。
- 项目方案框图和原理图介绍
主要原理:
WS2812B的灯珠只要玩电子的人应该都不会陌生了,该项目同样使用了WS2812,因为便携性,缩小空间体积,只使用5*5的分辨率,通过ESP32的SPI口MOSI主发从收,将字符串传到第一个WS 2812, 读取第一位,其次每一个灯珠读取后一位数据。触摸按键预计使用223芯片,短按切换功能,长按开关机,关机的定义是进入深度休眠模式,关闭所有外设供电。MQTT协议预计用于桌面模式和挂饰模式,联网耗电太大,只能在USB接入时使用,局域网WEB 服务待协议写完后再更新软件。
详细框图:- 系统的方案如下:
- 设计中用到的指定厂商元器件及介绍
- 主控ESP32-C3-MINI-1-H4
是ESP32-C3-MINI-1 是一款通用型 Wi-Fi 和低功耗蓝牙 (Bluetooth LE) 模组,体积小,具有丰富的外设接口,可用于智能家居、工业自动化、医疗保健、消费电子产品等领域。ESP32-C3 系列芯片,搭载 RISC-V 32 位单核处理器。ESP32-C3 系列芯片集成了丰富的外设,包括 UART、 I2C、I2S、红外遥控模块 (remote control peripheral)、LED PWM 控制器、通用 DMA 控制器、TWAI® 控制器、 USB 串口/JTAG 控制器、温度传感器和模/数转换器等,还具有单线、双线、四线 SPI 接口。
WS2812B灯珠
WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。具有较小体积,其外型尺寸与 一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动 电路,还包含有高精度的内部振荡器和可编程定电流控制部分,有效保证了像素点光的颜色高度一致。 数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先 送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整 形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点 采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。 高达 2KHz 的端口扫描频率,在高清摄像头的捕捉下都不会出现闪烁现象,非常适合高速移动产品的使用。 280μs以上的 RESET 时间,出现中断也不会引起误复位,可以支持更低频率,价格便宜的MCU。 LED具有低电压驱动、环保节能、亮度高、散射角度大、一致性好超、低功率及超长寿命等优点。将控制电 路集成于LED上面,电路变得更加简单,体积小,安装更加简便。 - 如下
- PCB设计介绍及遇到的问题和解决方法
- 灯板的PCB很好画,之前也有画过8*8的,所以这方面不是问题。
- 主控板的电路还是花了点时间的,电源线的宽度,信号线的宽度都有仔细计算,RXTX也有做等长处理。
- 关键代码及说明
- 1. 库的引入
cppCopy Code#include <Adafruit_NeoPixel.h>
#include <BluetoothSerial.h>
- Adafruit_NeoPixel:这个库用于控制 NeoPixel LED 灯条,它提供了一种简单的方法来控制每个 LED 的颜色和亮度。
- BluetoothSerial:这个库用于通过蓝牙串口通信,使 Arduino 能够接收来自手机或其他蓝牙设备的命令。
2. 全局变量和常量
cppCopy Code#define PIN 6 // 定义 LED 灯条连接的引脚
#define NUM_LEDS 30 // 定义 LED 的数量
Adafruit_NeoPixel strip(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800); // 初始化 NeoPixel 对象
BluetoothSerial SerialBT; // 创建蓝牙串口对象
- PIN:指定 LED 灯条连接到 Arduino 的引脚。
- NUM_LEDS:定义 LED 灯条中 LED 的数量。
- Adafruit_NeoPixel strip:创建一个
strip
对象来控制 NeoPixel 灯条。这里指定了 LED 的数量、连接引脚和颜色格式。 - BluetoothSerial SerialBT:创建一个蓝牙串口对象,用于接收数据。
3. 初始化
cppCopy Codevoid setup() {
Serial.begin(115200); // 初始化串口监视器,设置波特率为115200
SerialBT.begin("ESP32_LED"); // 初始化蓝牙,设置设备名称
strip.begin(); // 初始化 LED 灯条
strip.show(); // 更新 LED 状态
}
- Serial.begin:启动串口通信,允许在串口监视器中输出调试信息。
- SerialBT.begin:初始化蓝牙模块并设置设备名称为 "ESP32_LED",这个名称会在蓝牙搜索中显示。
- strip.begin:初始化 LED 灯条,准备接收颜色设置。
- strip.show:确保灯条在开始时是关闭的。
4. 主循环
cppCopy Codevoid loop() {
if (SerialBT.available()) { // 检查是否有蓝牙数据可用
String command = SerialBT.readStringUntil('\n'); // 读取一行数据
// 解析命令并根据需要调用相应的函数
}
// 其他功能如震动传感器和时间显示
}
- SerialBT.available():检查是否有来自蓝牙的可用数据。
- SerialBT.readStringUntil('\n'):读取蓝牙串口中的一行字符串,直到遇到换行符为止。
5. 绘制 LED 图案
cppCopy Codevoid drawHeart() {
for (int i = 0; i < NUM_LEDS; i++) {
if (/* 条件判断 */) {
strip.setPixelColor(i, heartColor); // 设置为红色
} else {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // 关闭其他 LED
}
}
strip.show(); // 更新 LED 状态
}
- drawHeart:这是一个函数,用于绘制心形图案。它通过判断 LED 的索引
i
来决定哪些 LED 亮起,哪些关闭。 - strip.setPixelColor(i, heartColor):设置特定 LED 的颜色为心形颜色(如红色)。
- strip.show():更新灯条状态,使变化可见。
- drawHeart:这是一个函数,用于绘制心形图案。它通过判断 LED 的索引
6. 蓝牙命令解析
在 loop
函数中,需要解析蓝牙接收到的命令并相应地调用图案绘制函数。例如:
cppCopy Codeif (command == "heart") {
drawHeart(); // 调用绘制心形的函数
} else if (command == "smiley") {
drawSmiley(); // 调用绘制微笑的函数
}
- 通过简单的条件语句判断接收到的命令,然后调用相应的函数以展示不同的 LED 图案。
7. 时间显示和震动感应
虽然代码片段没有完整显示这些部分,但可以添加额外的代码来实现震动感应和显示时间功能。
- 震动感应:可以使用一个震动传感器,检测到震动时执行某些动作。
- 时间显示:可以使用 RTC 模块或蓝牙命令从手机获取当前时间,并通过 LED 显示每个数字。
8. 其他颜色和图案定义
cppCopy Codeuint32_t heartColor = strip.Color(255, 0, 0); // 红色
uint32_t smileyColor = strip.Color(255, 255, 0); // 黄色
uint32_t sadColor = strip.Color(0, 0, 255); // 蓝色
uint32_t starColor = strip.Color(255, 255, 255); // 白色
- 这里定义了几种颜色,使用
strip.Color()
函数指定 RGB 值。可以灵活地设置 LED 的颜色。
- 这里定义了几种颜色,使用
- 功能展示图及说明
- APP控制切换
- 对本大赛的心得体会及整个设计过程中遇到的难点和解决方法
- 在数字化和智能化日益普及的今天,基于 IoT(物联网)技术的项目越来越受到关注。本项目旨在探索如何利用 ESP32 控制 RGB LED 灯珠,通过蓝牙与移动设备进行交互,创造出动态的灯光效果。该项目不仅增加我对硬件和软件交互的理解,还能为女朋友拍照更美丽。
2. 设计过程
a. 硬件选择
在硬件选择上,我决定使用 ESP32-C3-MINI,因为它具备强大的处理能力、蓝牙和 Wi-Fi 功能,非常适合物联网项目。同时,选择WS2812B,因为它易于控制并能产生丰富的颜色效果。这种选择使我能够快速实现项目目标。b. 软件开发
软件方面,我使用了 Arduino IDE 开发环境,这对于初学者非常友好。通过 Adafruit NeoPixel 和 BluetoothSerial 库,我能够高效地实现 LED 控制和蓝牙通信。在设计过程中,我注重代码的可读性和模块化,使得后期的维护和扩展变得更加容易。c. 蓝牙通信
蓝牙通信的实现是项目中的一个关键点。我设定了一些基本命令(如 "heart"、"smiley" 等)来控制不同的 LED 图案。在测试过程中,发现蓝牙连接不稳定的问题。经过一番调整和优化,确保了通信的可靠性。3. 遇到的挑战与解决方案
a. 蓝牙连接问题
在初始测试中,蓝牙连接时常中断。为了解决这个问题,我对蓝牙模块的初始化和命令解析部分进行了优化,确保在每次接收数据前都进行状态检查,增加了系统的稳定性。b. LED 图案设计
设计不同的 LED 图案也是一个挑战。为了实现丰富的视觉效果,我不断尝试不同的灯光排列和颜色组合,通过多次实验来优化效果。这一过程增强了我对视觉设计和编程逻辑的理解。4. 学到的经验
a. 模块化编程的重要性
项目中,我通过模块化的方式设计函数,分别处理 LED 控制和蓝牙通信。这样的做法使得代码结构更加清晰,功能易于维护和扩展。今后在进行更复杂的项目时,模块化编程将是我必备的技能。b. 故障排除的能力
在调试过程中,我逐渐提高了故障排除的能力。遇到问题时,我学会了逐步缩小问题范围,采用不同的方法进行测试,最终找到解决方案。这种技能在今后的项目开发中将极为重要。总结
因为有电子森林发布的Fastbond活动让我通过这个项目,不仅提高了对硬件和编程的理解,更加深入地掌握了蓝牙通信和 LED 控制的技术。这次经历让我对未来的物联网项目充满期待,同时也激励我继续探索更多的创意和技术挑战。
- 在数字化和智能化日益普及的今天,基于 IoT(物联网)技术的项目越来越受到关注。本项目旨在探索如何利用 ESP32 控制 RGB LED 灯珠,通过蓝牙与移动设备进行交互,创造出动态的灯光效果。该项目不仅增加我对硬件和软件交互的理解,还能为女朋友拍照更美丽。
软硬件
附件下载
Gerber_ESP32-C3-MINI-1-H4核心板_PCB_ESP32-C3-MINI-1-H4核心板_2024-10-18.zip
Gerber_WS2812_MINI点阵_PCB_WS2812_MINI点阵_2024-10-18.zip
Schematic_ESP32-C3-MINI-1-H4核心板_2024-10-18.pdf
Schematic_WS2812_MINI点阵_2024-10-18.pdf
代码.ino
团队介绍
寒夜雨
评论
0 / 100
查看更多
猜你喜欢
FastBond3基础部分-使用esp32为主控的基于pico开发板集群阵列在esp32开发板上部署操作系统实现控制多个pcio (rp2040)开发板,让每个pico(rp2040)当作一个子处理器 实现某些任务的集群-分布计算 从而提高数据处理能力并且利用esp32当作LoadBalancer实现均衡负载
pildio
23
FastBond3基础部分-基于ESP32的RGB灯珠阵列该项目使用了乐鑫ESP32芯片及周边电源电路,控制WS2812B灯珠,实现了矩阵式多功能灯板的设计,它的主要功能为:1、便携式补光灯:可以在需要外景拍照补光时临时打光 2、mini挂饰:可以挂在包上显示内容,可以自定义图案。
寒夜雨
24
FastBond3挑战部分-基于恒流控制的打光灯板设计该项目使用了恒流驱动,实现了高亮灯板的设计,它的主要功能为:使用充电宝就可以供电,代替昂贵的摄影灯进行打光。。
梅子6574
29