276浏览
查看: 276|回复: 6

[项目] 【花雕学编程】Arduino动手做(234)--WeMos D1R32转换多彩灯

[复制链接]
【花雕学编程】Arduino动手做(234)--WeMos D1R32转换多彩灯图1
Wemos D1 ESP32 开发板是一款紧凑而强大的设备,它集成了天线和射频巴伦、功率放大器、低噪声放大器、滤波器和电源管理模块。整个解决方案占用的印刷电路板面积最少。该板采用台积电 40nm 低功耗技术,搭配 2.4GHz 双模 Wi-Fi 和蓝牙芯片,功率和射频性能最佳,安全可靠,可扩展至各种应用。将 WiFi 和蓝牙连接结合在单个 ESP32 芯片上。Wemos D1 ESP32 开发板是基于乐鑫 ESP32 芯片的开发板。它具有 Wi-Fi 和蓝牙连接,以及一系列用于连接传感器、执行器和其他设备的输入和输出引脚。该板具有高性能处理器和广泛的功能,是物联网和家庭自动化项目的理想选择。此外,该板具有易于使用的界面,采用 Arduino UNO 外形尺寸,并与 Arduino 平台兼容,可以轻松开发项目并与其他设备集成。借助 Wemos D1 ESP32 开发板,您可以轻松地为各种应用创建智能、互联的解决方案。该板的一些规格包括:
- 240 MHz 双核 LX6 芯片
- Wi-Fi 802.11 b/g/n 连接
- 蓝牙 4.2 BLE 连接
- 4 MB 闪存
- 520 KB SRAM
- 30 针输入/输出,包括 GPIO、I2C、SPI、UART 和 ADC
- MicroSD支持
- LiPo电池充电支持
该板与 Arduino 平台兼容,可以使用 Arduino IDE 进行编程。此外,它还支持 MicroPython 平台,该平台允许使用 Python 进行编程。

【花雕学编程】Arduino动手做(234)--WeMos D1R32转换多彩灯图2

驴友花雕  中级技神
 楼主|

发表于 2024-10-14 10:41:29

【花雕学编程】Arduino动手做(234)--WeMos D1R32转换多彩灯

64位屏是一种由WS2812B LED灯珠组成的矩阵屏幕,每个灯珠都可以独立控制颜色和亮度。
1、结构与组成:
该屏幕由8行8列共64个WS2812B LED灯珠组成,每个灯珠都是一个独立的像素点。每个像素点内部集成了控制电路和RGB芯片,能够显示16777216种颜色。

2、控制方式:
WS2812B采用单线串行通信协议,通过一个数据线即可控制所有LED。每个像素点接收到数据后,会将数据传递给下一个像素点,形成级联结构。常用的控制器包括Arduino、ESP32等,配合相应的库文件(如Adafruit_NeoPixel或FastLED)可以轻松实现控制。

3、应用场景:
这种64位屏幕广泛应用于LED显示屏、广告牌、装饰照明、电子产品原型设计等领域。由于其高亮度和丰富的颜色显示能力,非常适合用于动态显示和视觉效果。

4、优点:
WS2812B LED具有低电压驱动、环保节能、亮度高、散射角度大、一致性好、超低功耗和超长寿命等优点。其控制电路集成在LED内部,使得电路设计更加简单,安装更加方便。

5、编程与控制:
使用Arduino或ESP32等微控制器,可以通过编程实现各种动态效果和动画。例如,可以使用setPixelColor函数设置每个像素的颜色,通过循环和延迟函数实现流水灯、彩虹效果等。

【花雕学编程】Arduino动手做(234)--WeMos D1R32转换多彩灯图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-10-14 10:49:29

【花雕学编程】Arduino动手做(234)--WeMos D1R32转换多彩灯

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
    实验二百三十四:Wemos D1 迷你Arduino Uno R3 D1 R32 ESP32
    Wifi蓝牙无线开发板CH340 4M内存
  {花雕动手做}项目之九:WS2812灯的快速转换多彩模式

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.     实验二百三十四:Wemos D1 迷你Arduino Uno R3 D1 R32 ESP32
  4.     Wifi蓝牙无线开发板CH340 4M内存
  5.   {花雕动手做}项目之九:WS2812灯的快速转换多彩模式
  6. */
  7. #include <WS2812FX.h> //导入WS2812FX库,用于控制WS2812B LED
  8. #define LED_COUNT 64 //定义LED数量为
  9. #define LED_PIN    2 //定义LED接脚为2
  10. WS2812FX ws2812fx = WS2812FX(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); //初始化WS2812FX对象,指定LED数量和接脚
  11. unsigned long lastChange = 0; //记录上一次模式切换的时间
  12. const unsigned long interval = 1000; //设置模式切换的间隔时间为5秒
  13. uint8_t currentMode = 0; //当前模式编号,初始为0
  14. void setup() {
  15.   ws2812fx.init(); //初始化LED
  16.   ws2812fx.setBrightness(19); //设置亮度为35(范围0-255)
  17.   ws2812fx.setSpeed(100); //设置速度为100
  18.   ws2812fx.setMode(currentMode); //设置初始模式为currentMode
  19.   ws2812fx.start(); //启动LED效果
  20. }
  21. void loop() {
  22.   ws2812fx.service(); //循环运行LED效果
  23.   if (millis() - lastChange > interval) { //检查是否达到模式切换的间隔时间
  24.     lastChange = millis(); //更新上一次模式切换的时间
  25.     currentMode = (currentMode + 1) % ws2812fx.getModeCount(); //计算下一个模式,循环模式列表
  26.     ws2812fx.setMode(currentMode); //设置新的模式
  27.   }
  28. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-10-14 10:53:18

【花雕学编程】Arduino动手做(234)--WeMos D1R32转换多彩灯

实验场景图

【花雕学编程】Arduino动手做(234)--WeMos D1R32转换多彩灯图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-10-14 10:54:33

【花雕学编程】Arduino动手做(234)--WeMos D1R32转换多彩灯

代码解读:
一、整体功能概述
这段代码的主要功能是使用 Arduino 控制 WS2812B LED 灯带,通过 WS2812FX 库实现不同的灯光效果,并以一定的时间间隔自动切换模式。

二、具体代码分析
1、库导入和常量定义:
#include <WS2812FX.h>:导入了 WS2812FX 库,这个库专门用于控制 WS2812B 类型的 LED 灯带,提供了丰富的灯光效果和控制功能。
#define LED_COUNT 64:定义了 LED 的数量为 64 个。可以根据实际连接的 LED 数量进行调整。
#define LED_PIN 2:指定了连接 LED 灯带的引脚为数字引脚 2。

2、对象初始化:
WS2812FX ws2812fx = WS2812FX(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);:创建了一个 WS2812FX 对象 ws2812fx,并传入了 LED 的数量、连接引脚以及色彩模式参数(NEO_GRB 表示使用 GRB 色彩模式,NEO_KHZ800 表示时钟频率为 800kHz)。

3、setup 函数:
ws2812fx.init();:初始化 WS2812FX 对象,准备控制 LED 灯带。
ws2812fx.setBrightness(19);:设置 LED 的亮度为 19(亮度范围是 0 - 255)。可以根据实际需求调整亮度。
ws2812fx.setSpeed(100);:设置灯光效果的变化速度为 100。具体速度的含义取决于库的实现,可能是效果切换的频率或者渐变的速度等。
ws2812fx.setMode(currentMode);:设置初始的灯光效果模式为 currentMode,初始值为 0。
ws2812fx.start();:启动 LED 灯带的灯光效果。

4、loop 函数:
ws2812fx.service();:在每个循环中调用这个函数,以确保灯光效果持续运行。这可能涉及更新 LED 的颜色和状态,以实现各种动态效果。
if (millis() - lastChange > interval) {... }:检查从上一次模式切换到现在是否经过了足够的时间(由 interval 定义,这里是 1000 毫秒即 1 秒)。如果是,就执行模式切换的逻辑。
lastChange = millis();:更新上一次模式切换的时间为当前时间(以毫秒为单位,通过 millis() 函数获取)。
currentMode = (currentMode + 1) % ws2812fx.getModeCount();:计算下一个模式编号。通过将当前模式编号加 1,然后对总的模式数量取余,实现循环切换模式。
ws2812fx.setMode(currentMode);:设置新的模式,使 LED 灯带切换到新的灯光效果。

三、总结
这段代码实现了一个简单而有趣的 LED 灯带控制程序,可以自动切换不同的灯光效果,适用于各种装饰和创意项目。通过调整常量和函数参数,可以定制 LED 的数量、亮度、速度和模式切换间隔等。

回复

使用道具 举报

钉子1  学徒

发表于 2024-10-15 09:56:06

加您好友了,能通过下吗?想向您请教些问题
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-10-15 20:03:10

钉子1 发表于 2024-10-15 09:56
加您好友了,能通过下吗?想向您请教些问题

加你了,谢谢鼓励
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail