蓝牙音乐乐谱律动彩灯实现

More
1 hour ago - 51 minutes ago #28 by btt
New Topic
实现效果:手机 APP / 小程序播放音乐 → 蓝牙发送节奏 / 频谱 → 彩灯随乐谱自动变色、闪烁、呼吸,营造音乐氛围
(
支持音乐律动、频谱变色、模式切换)

硬件信息(CC2541 蓝牙主控)
  • RGB 彩灯:P0_0、P0_1、P0_2(3 路 PWM,直接驱动全彩) (128 级 PWM)
  • 蓝牙串口:TX=P1_6、RX=P1_7(和手机 APP / 小程序通信)
  • 供电:3.3V,带 USB、复位、晶振电路完整

可交付成果
  1. CC2541 固件源码(IAR/Keil 可直接编译)
    • PWM 驱动 RGB
    • BLE 蓝牙透传 / 自定义协议
    • 音乐律动算法(节奏、频谱、渐变)
  2. 手机端配套
    • 小程序 / APP 蓝牙通信框架
    • 音乐采集 + 频谱解析逻辑
  3. 调试说明
    • 串口指令格式
    • 颜色与节奏映射表
最简控制协议示例
  • Code:
    Rxx
    :红色亮度(00-FF)
  • 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 种音乐氛围模式:
    1. 音乐渐变
    2. 频谱跳动
    3. 彩虹流动
    4. 呼吸灯
    5. 派对闪烁
📱 蓝牙控制指令(小程序直接用)
  • Code:
    Rxx
    红色亮度(00-99)
  • 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){ /* 彩虹流动 */ } } }
2)蓝牙控制协议(APP / 小程序直接用)
  • 格式:指令 + 值,1 字节指令 + 1 字节数据
  • R0~R255 → 红亮度
  • G0~G255 → 绿亮度
  • B0~B255 → 蓝亮度
  • M1~M5 → 模式切换
  • 帧头:
    Code:
    0xAA
    帧尾:
    Code:
    0x55
    (抗干扰)

改进意见
原理图 必须改进 的地方
  1. RGB 无驱动三极管
    • CC2541 引脚电流太小,带不动灯,必须加 NPN/PMOS 驱动
  2. 32.768K 晶振无负载电容
    • 时钟不稳,蓝牙容易掉线
  3. 无电源滤波 / 去耦
    • 音乐律动时电压波动,会死机、闪断
  4. 无防静电 / USB 保护
    • 手机插拔容易烧芯片
优化后电路:
  • 增加 S8050/AO3400 驱动 RGB
  • 增加 18pF 晶振负载电容
  • 每路电源加 100nF 去耦
  • 增加 ESD 保护
三、完整 BOM 清单(直接打板采购)表格位号型号用途U1CC2541F256BLE 主控Q132.768KHz实时时钟Q216MHz/32MHz主晶振Q3~Q5S8050RGB 驱动D1~D35050RGB彩灯R220Ω/1K限流C100nF/1uF/18pF滤波 / 负载USBMICRO-USB供电J1烧录接口下载程序四、强烈推荐替换方案(CC2541 太老,直接升级)最新芯片推荐(2026 最稳)1)首选:Nordic nRF52811 / nRF52805
  • BLE 5.3 → 距离更远、更稳、更低功耗
  • 价格≈3~5 元,比 CC2541 还便宜
  • 支持 OTA 升级、音乐频谱、多路 PWM
  • 开发工具免费,资料极全
2)国产平替:PHY6252 / BL616
  • BLE 5.0~5.3,成本极低
  • 直接兼容 5V,不用电平转换
提供:
  • nRF52811 全新原理图(PDF + 立创 EDA 源文件)
  • 新固件:音乐律动 + 蓝牙 5.3 + 手机 APP 控制











Code:
 
Last edit: 51 minutes ago by btt.

Please Log in or Create an account to join the conversation.

Time to create page: 0.219 seconds