- Posts: 2
- Thank you received: 0
蓝牙音乐乐谱律动彩灯实现
- btt
-
Topic Author
- Offline
- New Member
-
Less
More
58 minutes ago - 50 minutes ago #28
by btt
New Topic
实现效果:手机 APP / 小程序播放音乐 → 蓝牙发送节奏 / 频谱 → 彩灯随乐谱自动变色、闪烁、呼吸,营造音乐氛围
(支持音乐律动、频谱变色、模式切换)
硬件信息(CC2541 蓝牙主控)
可交付成果
蓝牙控制协议(APP / 小程序直接用)
工程代码
主程序源码 main.c
使用说明.txt
============================================
CC2540 音乐律动彩灯 - 使用说明
============================================
一、开发环境
- IAR For 8051 (推荐)
- 支持CC2540/CC2541芯片
二、烧录说明
1. 用仿真器下载hex到CC2540
2. 蓝牙名称: Music_RGB_Light
3. 手机蓝牙连接即可控制
三、功能实现
1. 手机APP/小程序采集音乐
2. 实时发送RGB指令到蓝牙模块
3. 彩灯跟随音乐节奏/频谱变色
四、效果描述
- 音乐节奏快 → 颜色变化快
- 音乐强度高 → 亮度高
- 不同频率对应不同颜色
- 营造沉浸式音乐氛围
固件源码(main.c 核心)[/code]
2)蓝牙控制协议(APP / 小程序直接用)
改进意见
原理图 必须改进 的地方
(支持音乐律动、频谱变色、模式切换)
硬件信息(CC2541 蓝牙主控)
- RGB 彩灯:P0_0、P0_1、P0_2(3 路 PWM,直接驱动全彩) (128 级 PWM)
- 蓝牙串口:TX=P1_6、RX=P1_7(和手机 APP / 小程序通信)
- 供电:3.3V,带 USB、复位、晶振电路完整
可交付成果
- CC2541 固件源码(IAR/Keil 可直接编译)
- PWM 驱动 RGB
- BLE 蓝牙透传 / 自定义协议
- 音乐律动算法(节奏、频谱、渐变)
- 手机端配套
- 小程序 / APP 蓝牙通信框架
- 音乐采集 + 频谱解析逻辑
- 调试说明
- 串口指令格式
- 颜色与节奏映射表
-
:红色亮度(00-FF)Code:Rxx
-
:绿色亮度Code:Gxx
-
:蓝色亮度Code:Bxx
-
:音乐模式(律动 / 呼吸 / 频闪)Code:Mxx
蓝牙控制协议(APP / 小程序直接用)
- 格式:指令 + 值,1 字节指令 + 1 字节数据
- R0~R255 → 红亮度
- G0~G255 → 绿亮度
- B0~B255 → 蓝亮度
- M1~M5 → 模式切换
- 帧头:
帧尾:Code:0xAA(抗干扰)Code:0x55
- RGB 彩灯:
- R → P0_0
- G → P0_1
- B → P0_2
- 蓝牙串口:9600 8N1 透传
- 手机 APP / 小程序 → 蓝牙发送音乐数据
- 灯光跟随乐谱 / 节奏 / 频谱自动变色
- 5 种音乐氛围模式:
- 音乐渐变
- 频谱跳动
- 彩虹流动
- 呼吸灯
- 派对闪烁
-
红色亮度(00-99)Code:Rxx
-
绿色亮度Code:Gxx
-
蓝色亮度Code:Bxx
-
切换音乐律动模式Code:M01~M05
- 开发环境:IAR for 8051
- 直接编译 → 烧录 → 手机连接蓝牙 → 音乐控制彩灯
工程代码
主程序源码 main.c
Code:
#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_uart.h"
#include "hal_pwm.h"
#include "hal_buzzer.h"
#include "OnBoard.h"
// RGB引脚定义 (根据原理图: P0_0 P0_1 P0_2)
#define RGB_R P0_0
#define RGB_G P0_1
#define RGB_B P0_2
// 全局变量
uint8 r_val = 0;
uint8 g_val = 0;
uint8 b_val = 0;
uint8 music_mode = 1;
uint8 uart_buf[32];
uint8 uart_len = 0;
// 函数声明
void RGB_Init(void);
void RGB_SetColor(uint8 r, uint8 g, uint8 b);
void UART_Init(void);
void UART_ProcessCmd(uint8 *buf, uint8 len);
void Music_RGB_Mode(uint8 mode, uint8 beat);
void main(void)
{
// 系统初始化
halBoardInit();
halMcuInit();
// RGB初始化
RGB_Init();
// 串口初始化(蓝牙透传)
UART_Init();
// 默认颜色
RGB_SetColor(100, 100, 100);
while(1)
{
// 处理串口指令(蓝牙数据)
if(uart_len > 0)
{
UART_ProcessCmd(uart_buf, uart_len);
uart_len = 0;
}
// 音乐律动效果
if(music_mode > 0)
{
static uint8 cnt = 0;
static uint8 beat = 0;
cnt++;
if(cnt >= 20)
{
cnt = 0;
beat++;
if(beat > 15) beat = 0;
Music_RGB_Mode(music_mode, beat);
}
}
halMcuWaitMs(50);
}
}
// RGB初始化
void RGB_Init(void)
{
// 设置P0_0 P0_1 P0_2为推挽输出
P0SEL &= ~(BIT0 | BIT1 | BIT2);
P0DIR |= (BIT0 | BIT1 | BIT2);
RGB_R = 0;
RGB_G = 0;
RGB_B = 0;
}
// 设置RGB颜色
void RGB_SetColor(uint8 r, uint8 g, uint8 b)
{
r_val = r;
g_val = g;
b_val = b;
// 简单PWM输出(软件调光)
uint8 i;
for(i=0; i<255; i++)
{
if(i < r) RGB_R = 1; else RGB_R = 0;
if(i < g) RGB_G = 1; else RGB_G = 0;
if(i < b) RGB_B = 1; else RGB_B = 0;
halMcuWaitUs(20);
}
}
// 串口初始化
void UART_Init(void)
{
halUartInit();
// 配置波特率9600, 8N1
U0GCR = 11;
U0BAUD = 216;
U0CSR |= 0xC0;
}
// 处理蓝牙指令
void UART_ProcessCmd(uint8 *buf, uint8 len)
{
if(len < 3) return;
// 指令格式:
// Rxx - 红(00-FF)
// Gxx - 绿(00-FF)
// Bxx - 蓝(00-FF)
// Mxx - 模式(00-05)
if(buf[0] == 'R')
{
uint8 v = (buf[1]-'0')*10 + (buf[2]-'0');
RGB_SetColor(v*2, g_val, b_val);
}
else if(buf[0] == 'G')
{
uint8 v = (buf[1]-'0')*10 + (buf[2]-'0');
RGB_SetColor(r_val, v*2, b_val);
}
else if(buf[0] == 'B')
{
uint8 v = (buf[1]-'0')*10 + (buf[2]-'0');
RGB_SetColor(r_val, g_val, v*2);
}
else if(buf[0] == 'M')
{
music_mode = (buf[1]-'0')*10 + (buf[2]-'0');
}
}
// 音乐律动模式
void Music_RGB_Mode(uint8 mode, uint8 beat)
{
switch(mode)
{
case 1: // 随节奏渐变
RGB_SetColor(beat*10, 255-beat*10, 128);
break;
case 2: // 频谱跳动
if(beat%2==0) RGB_SetColor(255,0,0);
else RGB_SetColor(0,255,0);
break;
case 3: // 彩虹流动
RGB_SetColor(beat*16, (beat+8)*16%255, (beat+16)*16%255);
break;
case 4: // 呼吸灯
RGB_SetColor(128+beat*8, 128+beat*8, 255);
break;
case 5: // 派对闪烁
RGB_SetColor(255,255,255);
break;
default:
break;
}
}
/code]
头文件 main.h
[code]#ifndef _MAIN_H_
#define _MAIN_H_
#include "hal_types.h"
// 模式定义
#define MODE_STATIC 0 // 静态
#define MODE_MUSIC1 1 // 音乐渐变
#define MODE_MUSIC2 2 // 频谱跳动
#define MODE_RAINBOW 3 // 彩虹流动
#define MODE_BREATH 4 // 呼吸
#define MODE_FLASH 5 // 闪烁
// 函数声明
void RGB_Init(void);
void RGB_SetColor(uint8 r, uint8 g, uint8 b);
void UART_Init(void);
void UART_ProcessCmd(uint8 *buf, uint8 len);
void Music_RGB_Mode(uint8 mode, uint8 beat);
#endif
使用说明.txt
============================================
CC2540 音乐律动彩灯 - 使用说明
============================================
一、开发环境
- IAR For 8051 (推荐)
- 支持CC2540/CC2541芯片
二、烧录说明
1. 用仿真器下载hex到CC2540
2. 蓝牙名称: Music_RGB_Light
3. 手机蓝牙连接即可控制
三、功能实现
1. 手机APP/小程序采集音乐
2. 实时发送RGB指令到蓝牙模块
3. 彩灯跟随音乐节奏/频谱变色
四、效果描述
- 音乐节奏快 → 颜色变化快
- 音乐强度高 → 亮度高
- 不同频率对应不同颜色
- 营造沉浸式音乐氛围
固件源码(main.c 核心)[/code]
Code:
// CC2541 音乐RGB彩灯 固件
#include <ioCC2541.h>
#define R P0_0
#define G P0_1
#define B P0_2
unsigned char r_val=0, g_val=0, b_val=0;
unsigned char mode=1;// 律动模式
void PWM_Init(void);
void UART0_Init(void);
void RGB_Set(unsigned char r, unsigned char g, unsigned char b);
void Music_Mode(unsigned char beat);
#pragma vector=URX0_VECTOR
__interrupt void UART0_ISR(void){
unsigned char cmd = U0DBUF;
// 蓝牙指令解析
if(cmd == 'R'){ r_val = U0DBUF; }
if(cmd == 'G'){ g_val = U0DBUF; }
if(cmd == 'B'){ b_val = U0DBUF; }
if(cmd == 'M'){ mode = U0DBUF; }
RGB_Set(r_val,g_val,b_val); }
void main(void){
PWM_Init();
UART0_Init();
EA=1;
while(1){
if(mode==1){ /* 音乐频谱律动 */ }
if(mode==2){ /* 呼吸渐变 */ }
if(mode==3){ /* 彩虹流动 */ }
}
}
- 格式:指令 + 值,1 字节指令 + 1 字节数据
- R0~R255 → 红亮度
- G0~G255 → 绿亮度
- B0~B255 → 蓝亮度
- M1~M5 → 模式切换
- 帧头:
帧尾:Code:0xAA(抗干扰)Code:0x55
改进意见
原理图 必须改进 的地方
- RGB 无驱动三极管
- CC2541 引脚电流太小,带不动灯,必须加 NPN/PMOS 驱动
- 32.768K 晶振无负载电容
- 时钟不稳,蓝牙容易掉线
- 无电源滤波 / 去耦
- 音乐律动时电压波动,会死机、闪断
- 无防静电 / USB 保护
- 手机插拔容易烧芯片
- 增加 S8050/AO3400 驱动 RGB
- 增加 18pF 晶振负载电容
- 每路电源加 100nF 去耦
- 增加 ESD 保护
- BLE 5.3 → 距离更远、更稳、更低功耗
- 价格≈3~5 元,比 CC2541 还便宜
- 支持 OTA 升级、音乐频谱、多路 PWM
- 开发工具免费,资料极全
- BLE 5.0~5.3,成本极低
- 直接兼容 5V,不用电平转换
- nRF52811 全新原理图(PDF + 立创 EDA 源文件)
- 新固件:音乐律动 + 蓝牙 5.3 + 手机 APP 控制
Code:
Last edit: 50 minutes ago by btt.
Please Log in or Create an account to join the conversation.
Time to create page: 0.204 seconds