赞
踩
多功能智能家居室内灯光控制系统设计与实现
3.4.3 DFRobot DFPlayer Mini MP3 播放器
详细资料源码:毕设&课设&项目&竞赛-多功能智能家居室内灯光控制系统设计与实现(完整工程资料源码).zip资源-CSDN文库
随着现代科技的迅猛发展,智能家居系统在我们的日常生活中扮演着越来越重要的角色。通过智能化技术提升家居环境的舒适度和安全性,已经成为当前技术创新的重要方向之一。在大数据、物联网(IoT)和人工智能(AI)技术的推动下,智能家居系统的功能越来越丰富,操作越来越简便,兼容性和扩展性也显著提升。灯光控制作为智能家居系统中的重要组成部分,对于营造家居氛围、提高能源利用效率和提升生活质量具有重要意义。
本项目旨在设计并实现一个多功能智能家居室内灯光控制系统,通过整合多种先进的传感器和控制模块,实现对室内灯光的智能控制。系统主要由三个控制端组成:STM32_Bluetooth控制端、ESP8266 WiFi控制端和语音控制端。通过这三个控制端,用户可以实现对灯光的远程控制、语音控制以及基于环境数据的自动控制。
本项目集成了光敏电阻传感器、HC-05蓝牙模块、DS18B20数字温度传感器、LED灯、风扇叶、130直流电机、TB6612直流电机驱动模块、STM32最小系统板(STM32F103C8T6芯片)、OLED显示板、智能语音识别模块、扬声器、ESP8266模块、DC-DC可调电源模块和继电器模块等多种硬件元件。通过这些元件的协同工作,系统能够高效、稳定地实现对室内灯光的智能控制。
随着科技的不断进步和生活水平的提高,智能家居技术逐渐成为现代家庭生活的重要组成部分。智能家居系统通过物联网技术将家庭中的各种设备联结在一起,实现相互通信与协作,提升家居环境的舒适性、安全性和便利性。其中,智能灯光控制系统作为智能家居系统中的核心模块之一,具有广泛的应用前景。
在传统的家居环境中,灯光控制主要依赖于手动开关,操作繁琐且缺乏灵活性。随着人们对生活质量要求的不断提升,如何实现更加便捷、高效和智能的灯光控制,成为了智能家居技术研究的重要方向。此外,通过智能控制技术优化灯光的使用,可以有效减少能源浪费,提升能源利用效率,符合现代社会提倡的绿色环保理念。
本项目旨在设计和实现一个多功能智能家居室内灯光控制系统,通过整合多种传感器和控制模块,实现对室内灯光的智能化控制。系统不仅支持传统的手动控制,还能通过蓝牙、WiFi和语音等多种方式进行远程和自动控制,极大地提升了灯光控制的便捷性和灵活性。
图1-1 智能家居设计
本项目的主要目标是设计并实现一个多功能智能家居室内灯光控制系统,通过先进的传感器和控制技术,实现对灯光的智能化控制,提升家居生活的质量和舒适度。具体目标包括:
1. 蓝牙控制:
2. WiFi控制:
3. 语音控制:
4. 硬件集成:
5. 用户体验提升:
通过实现上述目标,本项目不仅展示了智能家居技术的实际应用,还为智能灯光控制系统的发展提供了有益的参考和实践经验。希望通过本项目的研究与实现,能够为人们的日常生活带来更多的便利和舒适,推动智能家居技术的进一步发展。
随着智能家居技术的不断发展,国内的智能家居市场也在迅速扩大。近年来,许多高校和研究机构在智能家居系统的研究与应用方面取得了显著的进展。其中,智能灯光控制系统作为智能家居的重要组成部分,得到了广泛关注和研究。
1. 高校和研究机构:
2. 企业应用:
3. 标准化与互联互通:
国外在智能家居技术的研究和应用方面起步较早,技术相对成熟,市场也较为广泛。智能灯光控制系统作为智能家居的重要组成部分,得到了广泛的研究和应用。
1. 学术研究:
2. 企业应用:
3. 标准化与互联互通:
国内外在智能灯光控制系统的研究与应用方面均取得了显著的进展。国内研究更加注重系统的集成和应用创新,国外则在技术创新和标准化建设方面具有优势。本项目希望通过借鉴国内外的研究成果,设计并实现一个多功能智能家居室内灯光控制系统,为用户提供更加便捷、高效和智能的家居体验。
随着科技的不断进步和消费者对高品质生活需求的提升,智能家居室内灯光控制系统正朝着更加智能化、个性化和集成化的方向发展。
本项目是一个集成了多种先进传感器和控制模块的智能家居控制系统,旨在提供便捷的灯光、风扇、环境温湿度等设备的智能控制功能。系统分为三个主要控制端:STM32_Bluetooth控制端、ESP8266 WiFi控制端和语音控制端。STM32_Bluetooth控制端通过蓝牙APP实现对LED灯的开关和亮度调节、风扇的开关、转速和方向调节,同时根据实时亮度自动触发LED灯照亮,并根据实时温度自动触发风扇降温。ESP8266 WiFi控制端可以远程控制彩灯灯带的颜色和亮度,提供当前位置定位功能以及相关调试界面。语音控制端通过“智能管家”命令启动语音模块,提供“打开灯光”和“关闭灯光”命令控制灯光,“打开彩灯”和“关闭彩灯”命令控制灯带,以及“故事模式”和“诗歌模式”命令分别启动故事和诗歌模式,目前录入的故事有“画蛇添足”、“狐狸和乌鸦”、“掩耳盗铃”、“拔苗助长”、“刻舟求剑”,录入的诗歌有“静夜思”、“春晓”、“春望”、“望庐山瀑布”、“清明”、“夜雨寄北”。此外,通过“房间温湿度”命令可以得到当前环境的温湿度数据。系统应用的元件包括光敏电阻传感器、HC-05蓝牙模块、DS18B20数字温度传感器、LED灯、风扇叶、130直流电机、TB6612直流电机驱动模块、STM32最小系统板(STM32F103C8T6芯片)、OLED显示板(0.96寸,白色像素)、路小班智能语音识别模块、腔体喇叭扬声器(8欧2W)、D1迷你版Modemcu WiFi基于ESP8266模块、LM2596S DC-DC可调大功率5A电源模块、LM2596S(4-36V输入输出可调带显示)、12V LED灯泡超亮12伏直流电瓶灯24V以及5V2路继电器模块。通过这些元件和控制端的综合运用,本智能家居系统实现了便捷、高效的家居设备控制和环境监测,极大地提升了用户的生活体验。
3-1 电路设计图
光敏电阻传感器连接到STM32的ADC引脚,用于环境光照检测。
HC-05蓝牙模块通过USART接口连接STM32,用于蓝牙通信。
DS18B20温度传感器连接到STM32的GPIO引脚,并使用1-Wire协议通信。
LED灯通过PWM控制,连接到STM32的PWM引脚。
130直流电机通过TB6612驱动模块控制,TB6612连接到STM32的PWM和GPIO引脚。
OLED显示板通过I2C接口连接到STM32的SCL和SDA引脚。
路小班智能语音识别模块通过USART接口连接STM32,用于语音识别。
扬声器连接到语音识别模块的音频输出端,用于语音播报。
ESP8266模块通过USART接口连接STM32,用于WiFi通信和远程控制。
LM2596S电源模块提供稳定的电压给各个模块。
12V LED灯泡通过继电器模块控制,继电器的控制端连接到STM32的GPIO口。
STM32单片机在智能宠物喂养设备中担任核心控制器的角色。它负责实时处理来自各类传感器的数据,执行相应的控制逻辑,并与用户界面进行交互。STM32的多种接口(如GPIO、ADC、I2C、SPI等)使其能够灵活地连接温湿度传感器、红外测温传感器、水位传感器等外设,确保系统能够准确获取环境信息。此外,STM32还能够根据传感器的数据做出及时反应,如控制水泵的开关、发出警报信号以及更新OLED显示屏的信息。这种高效的处理能力和灵活的接口设计,使得STM32单片机成为智能宠物喂养设备的理想选择。
图3-2 STM32F103C8T6 实物图
将DS18B20温度传感器的数据引脚连接到STM32的PA0引脚,电源和地分别连接到3.3V和GND。如果使用的是单总线模式,需要一个上拉电阻(通常为4.7kΩ)连接在数据引脚和电源之间。
图3-3 DS18B20 温度传感器实物图
光传感器的模拟输出引脚连接到STM32的PA1引脚,电源和地分别连接到3.3V和GND。
图3-4 光传感器实物图
蓝牙模块(如HC-05或HC-06)的TX引脚连接到STM32的PA3(RX)引脚,RX引脚连接到PA2(TX)引脚。电源和地分别连接到3.3V和GND。
图3-5 HC-05实物图
LED灯的控制通过STM32的PA5引脚(PWM输出),LED的正极连接到电源(3.3V或5V,取决于LED的额定电压),负极通过限流电阻连接到PA5引脚。
电机连接到L298N电机驱动模块:
图3-6 DRV8833电机驱动板模块实物图
电机驱动模块的VCC和GND分别连接到电源(通常是12V)和地。
OLED模块(如128x64 I2C OLED)的SDA和SCL引脚分别连接到STM32的I2C引脚(通常是PB7和PB6)。电源和地分别连接到3.3V和GND。
图3-7 OLED模块实物图
以上连接方式:
STM32 引脚 | 模块 | 模块引脚 | 连接说明 |
---|---|---|---|
PA0 | DS18B20 | Data | 数据引脚 |
3.3V | DS18B20 | VCC | 电源 |
GND | DS18B20 | GND | 地 |
PA1 | 光传感器 | Analog Out | 模拟输出 |
3.3V | 光传感器 | VCC | 电源 |
GND | 光传感器 | GND | 地 |
PA2 | 蓝牙模块 | RX | 蓝牙模块接收 |
PA3 | 蓝牙模块 | TX | 蓝牙模块发送 |
3.3V | 蓝牙模块 | VCC | 电源 |
GND | 蓝牙模块 | GND | 地 |
PA5 | LED灯 | (-) | 通过限流电阻连接到负极 |
3.3V | LED灯 | (+) | 正极 |
PA6 | 电机驱动模块 | ENA | 电机使能引脚 |
PA7 | 电机驱动模块 | IN1/IN2 | 电机方向控制 |
GND | 电机驱动模块 | GND | 地 |
PB7 | OLED | SDA | I2C 数据线 |
PB6 | OLED | SCL | I2C 时钟线 |
3.3V | OLED | VCC | 电源 |
GND | OLED | GND | 地 |
ESP8266 是一个集成 WiFi 功能的微控制器,广泛用于物联网项目。
图3-8 ESP8266实物图
图3-9 LED 灯带实物图
图3-10 Mini MP3 播放器实物图
以上连接方式:
图3-11 esp8266与灯带详细连接
模块 | 引脚 | 连接到 | 说明 |
---|---|---|---|
NeoPixel LED 带 | DIN | GPIO13 (D7) | 数据输入 |
VCC | 外部 5V | 电源 | |
GND | GND | 地 | |
DFPlayer Mini | RX | GPIO5 (D1) | 串口通信 |
TX | GPIO4 (D2) | 串口通信 | |
VCC | 5V | 电源 | |
GND | GND | 地 | |
ESP8266 | GPIO2 | 外部 LED | 控制状态指示 LED |
3.3V | 外部电源 | 电源 | |
GND | GND | 地 |
图3-12 esp8266与灯带详细连接
LU-ASR01鹿小班是一个智能语音识别模块,具备高度集成的语音识别和处理能力,适用于多种物联网和智能家居应用。该模块支持多种语音命令的识别,可以实现复杂的语音控制功能。LU-ASR01内置先进的语音识别算法,能够在嘈杂的环境下准确识别用户的语音指令。它还支持多种唤醒词和命令词的自定义,用户可以根据实际需求自由设置。模块通过串口与主控板通信,提供简单易用的接口,方便各种开发板和微控制器进行集成。
图3-13 鹿小班语音模块
另外,LU-ASR01还具备实时语音反馈功能,通过内置或外接的扬声器可以及时响应用户的指令。该模块广泛应用于智能音箱、语音助手、语音控制家电等领域,帮助实现更为智能化和人性化的交互体验。LU-ASR01设计紧凑,功耗低,适合各种嵌入式系统和便携设备的应用,是开发语音交互产品的理想选择。
1. STM32_Bluetooth端APP控制LED灯开关和调节亮度:
通过HC-05蓝牙模块接收来自手机APP的指令。
使用PWM控制STM32的GPIO输出,调节LED灯的亮度。
设置GPIO引脚控制LED灯开关。
图4-1 蓝牙APP操作界面
2. STM32_Bluetooth端APP控制风扇开关和调节风扇转速以及方向:
通过HC-05蓝牙模块接收手机APP的指令。
使用PWM信号控制TB6612驱动模块,从而调节130直流电机的转速和方向。
设置GPIO引脚控制风扇开关。
图4-2 蓝牙连接热点
3. 根据实时亮度自动触发LED灯照亮:
使用光敏电阻传感器检测环境光照强度。
通过ADC读取光敏电阻的电压值,并根据设定的阈值自动控制LED灯的开关和亮度。
4. 根据实时温度自动触发风扇降温:
使用DS18B20温度传感器检测环境温度。
通过读取温度值,并根据设定的阈值自动控制风扇的开关和转速。
1. 远程控制启动彩灯灯带颜色与深度:
使用ESP8266连接到WiFi网络,实现远程控制。
配合合适的灯带(如RGB灯带),通过PWM信号控制灯带的颜色和亮度。
通过HTTP或MQTT协议接收来自远程服务器或应用的控制指令。
图4-3 远程APP控制界面
2. 定位当前所在位置:
使用ESP8266的WiFi定位功能,通过信号强度和WiFi热点信息定位。
发送定位数据到远程服务器进行处理和显示。
3. 有相关调试界面:
提供一个Web界面或移动应用界面进行调试和控制。
Web界面可以通过ESP8266的Web Server功能实现,移动应用可以通过HTTP API与ESP8266通信。
图4-4 web界面设计
1. 通过“智能管家”命令启动语音模块:
使用路小班智能语音识别模块进行语音命令识别。
通过USART接口将语音识别结果传输到STM32进行处理。
2. 通过“打开灯光”命令打开灯光、通过“关闭灯光”命令关闭灯光:
解析语音命令,识别“打开灯光”或“关闭灯光”。
控制STM32的GPIO引脚实现LED灯的开关。
3. 通过“打开彩灯”命令打开灯带、通过“关闭彩灯”命令关闭灯带:
解析语音命令,识别“打开彩灯”或“关闭彩灯”。
通过ESP8266发送控制指令到灯带,实现灯带的开关。
4. 通过“故事模式”命令启动故事模式:
解析语音命令,识别“故事模式”。
通过STM32控制扬声器播放预录的故事音频。
5. 通过“诗歌模式”命令启动诗歌模式:
解析语音命令,识别“诗歌模式”。
通过STM32控制扬声器播放预录的诗歌音频。
6. 通过“房间温湿度”命令得到当前环境温湿度总体概述:
解析语音命令,识别“房间温湿度”。
读取DS18B20温度传感器的数据,并通过扬声器播报当前温湿度概述。
1. STM32固件:
初始化各个外设(ADC、PWM、USART、I2C等)。
通过中断或定时器定期读取传感器数据。
接收并解析蓝牙和语音模块的命令,控制相应的外设。
通过USART与ESP8266通信,实现WiFi控制。
2. ESP8266固件:
初始化WiFi连接,连接到指定的网络。
提供HTTP或MQTT接口,接收远程控制指令。
控制彩灯灯带的颜色和亮度。
实现定位功能并上传定位数据。
3. 移动App或Web界面:
提供用户友好的界面,控制LED灯、风扇和彩灯灯带。
通过蓝牙或WiFi与STM32和ESP8266通信。
显示实时传感器数据和系统状态。
通过以上设计和实现,可以构建一个功能丰富、智能化的多功能智能家居室内灯光控制系统,满足用户的多种需求。
- #include "stm32f10x.h" // Device header
- #include "Delay.h" //延时
- #include "OLED.h" //OLED模块
- #include "Key.h" //按键模块
- #include "DS18B20.h" //温度获取模块
- #include "Motor.h" //电机模块
- #include "LightSensor.h" //光亮度获取模块
- #include "LED.h" //LED灯模块
- #include "Serial.h" //蓝牙通信模块
-
- uint16_t AT; //接收蓝牙发过来的指令
- uint8_t LEDNum,FanSpeed; //光度,转速
- int8_t FanDirection = 1 ; //转向
- char SendString[100]; //向蓝牙发送的显示信息
- uint8_t StandardL = 35, StandardT = 26; //标准亮度和温度
- unsigned short int NowL; //实时亮度
- float NowT; //实时温度
- uint8_t LFlag = 0, TFlag = 0; //开启控光,控温模块;0--不开启,1--开启
- uint8_t i;
-
- void Control_L(uint8_t StandardL) //光控模块
- {
- if (NowL < StandardL)
- {
- LEDNum = 100;
- }
- else
- {
- LEDNum = 0;
- }
- LED_SetCompare2(LEDNum);
- };
-
- void Control_T(uint8_t StandardT) //温控模块
- {
- if (NowT > StandardT)
- {
- FanSpeed = 100;
- }
- else
- {
- FanSpeed = 0;
- }
- Motor_SetSpeed(FanSpeed);
- };
-
- int main(void)
- {
- OLED_Init();
- Serial_Init();
- LED_Init();
- Motor_Init();
- LightSensor_Init();
-
- while (1)
- {
- NowT = DS18B20_ReadTemp();
- NowL=LightSensor_GetData();
- memset(SendString,0,sizeof(SendString));
- sprintf(SendString,"%d;%s",NowL,Temperature_String());
- Serial_SendString(SendString);
- OLED_ShowString(1,1,"Temp:");
- OLED_ShowNum(1,6,NowT,2);
- OLED_ShowString(2,1,"Light:");
- OLED_ShowSignedNum(2,7,NowL,4);
- if (Serial_GetRxFlag() == 1)
- {
- AT = Serial_GetRxData();
- switch (AT)
- {
- case 1:
- LEDNum = 100;
- LED_SetCompare2(LEDNum);
- break;
- case 2:
- LEDNum = 0;
- LED_SetCompare2(LEDNum);
- break;
- case 3:
- LEDNum = (LEDNum == 100? 100 : LEDNum + 10);
- LED_SetCompare2(LEDNum);
- break;
- case 4:
- LEDNum = (LEDNum == 10? 10 : LEDNum - 10);
- LED_SetCompare2(LEDNum);
- break;
- case 5:
- FanSpeed = 100;
- Motor_SetSpeed(FanSpeed);
- break;
- case 6:
- FanSpeed = 0;
- Motor_SetSpeed(FanSpeed);
- break;
- case 7:
- FanSpeed = (FanSpeed == 100? 100 : FanSpeed + 10);
- Motor_SetSpeed(FanDirection * FanSpeed);
- break;
- case 8:
- FanSpeed = (FanSpeed == 10? 10 : FanSpeed - 10);
- Motor_SetSpeed(FanDirection * FanSpeed);
- break;
- case 9:
- FanDirection = 1;
- Motor_SetSpeed(FanDirection * FanSpeed);
- break;
- case 10:
- FanDirection = -1;
- Motor_SetSpeed(FanDirection * FanSpeed);
- break;
- case 11:
- LFlag = 1;
- i++;
- break;
- case 12:
- LFlag = 0;
- LEDNum = 0;
- LED_SetCompare2(LEDNum);
- break;
- case 13:
- TFlag = 1;
- break;
- case 14:
- TFlag = 0;
- FanSpeed = 0;
- Motor_SetSpeed(FanSpeed);
- break;
-
- default:
- if (AT >= 15 && AT <= 115)
- {
- StandardL = AT - 15;
- }
- else if(AT >= 116 && AT <= 216)
- {
- StandardT = AT - 116;
- }
- break;
- }
-
- }
- if (LFlag)
- {
- Control_L(StandardL);
- }
- if (TFlag)
- {
- Control_T(StandardT);
- }
-
- }
- }
-
一个基于STM32F103微控制器的智能家居室内灯光控制系统的主程序。以下是对源码的详细分析:
1. 包含的头文件
stm32f10x.h
:STM32F103系列微控制器的标准库头文件。Delay.h
:延时函数头文件。OLED.h
:OLED显示屏驱动头文件。Key.h
:按键处理头文件。DS18B20.h
:DS18B20温度传感器驱动头文件。Motor.h
:电机控制头文件。LightSensor.h
:光亮度传感器驱动头文件。LED.h
:LED灯控制头文件。Serial.h
:串口通信(蓝牙)头文件。2. 全局变量
uint16_t AT
:接收蓝牙发过来的指令。uint8_t LEDNum, FanSpeed
:LED灯亮度和风扇转速。int8_t FanDirection
:风扇转向,1为正转,-1为反转。char SendString[100]
:向蓝牙发送的显示信息。uint8_t StandardL, StandardT
:标准亮度和温度。unsigned short int NowL
:实时亮度。float NowT
:实时温度。uint8_t LFlag, TFlag
:光控和温控模块的开关标志。uint8_t i
:计数器。3. 函数定义
Control_L(uint8_t StandardL)
:光控模块,根据实时亮度调整LED灯亮度。Control_T(uint8_t StandardT)
:温控模块,根据实时温度调整风扇转速。3. 主函数 main
(1)
初始化:
OLED_Init()
:初始化OLED显示屏。Serial_Init()
:初始化串口通信(蓝牙)。LED_Init()
:初始化LED灯。Motor_Init()
:初始化电机。LightSensor_Init()
:初始化光亮度传感器。(2)主循环:
NowT = DS18B20_ReadTemp()
:读取温度。NowL = LightSensor_GetData()
:读取亮度。sprintf(SendString, "%d;%s", NowL, Temperature_String())
:构建字符串。Serial_SendString(SendString)
:发送字符串。OLED_ShowString(1,1,"Temp:")
:显示温度标签。OLED_ShowNum(1,6,NowT,2)
:显示温度值。OLED_ShowString(2,1,"Light:")
:显示亮度标签。OLED_ShowSignedNum(2,7,NowL,4)
:显示亮度值。if (Serial_GetRxFlag() == 1)
:检查是否有新数据。AT = Serial_GetRxData()
:获取接收到的数据。switch (AT)
:根据接收到的指令执行相应操作。
if (LFlag)
:如果光控标志位为1,执行光控模块。if (TFlag)
:如果温控标志位为1,执行温控模块。该程序通过蓝牙接收控制指令,根据指令控制LED灯和风扇,并实时显示温度和亮度。同时,程序支持自动光控和温控功能,可以根据设定的标准亮度和温度自动调节LED灯和风扇。
- #include <Arduino.h>
- #include <Adafruit_NeoPixel.h>
- #include "SoftwareSerial.h"
- #include "DFRobotDFPlayerMini.h"
- int pin = 13; // On Trinket or Gemma, suggest changing this to 1 gpio13 D7
- int numPixels = 60; // 灯珠 数量
- int pixelFormat = NEO_GRB + NEO_KHZ800;
- Adafruit_NeoPixel pixels(numPixels, pin, pixelFormat);
- /**
- * 点灯科技开发文档地址
- * https://diandeng.tech/doc/getting-start-8266
- */
- #define BLINKER_WIFI
- #include <Blinker.h>
- SoftwareSerial mySoftwareSerial(4, 5); // RX, TX //实例化软串口设置通讯用的RX和TX引脚 这是8266的引脚
- DFRobotDFPlayerMini myDFPlayer; //实例化库
- void printDetail(uint8_t type, int value);//定义一个方法用来打印错误信息
- char auth[] = "918e677327c9";
- char ssid[] = "z";
- char pswd[] = "00000000";
- uint8_t is_run = 0;//是否按顺序播放 停止或继续播放用
- uint8_t playInSequence = 0;//播放循序 记录现在是向上播放还是向下播放 默认下一首
- uint8_t i=5;
- // 新建组件对象
- BlinkerRGB RGB1("col-aab");//这里输入替换你的点灯设备组件颜色拾取的键值
- //BlinkerRGB RGB2("btn-cs5");//这里输入替换你的点灯设备组件颜色拾取的键值
- //char auth[] = "eac744d3f392";//这里输入你的点灯设备密钥
- //char ssid[] = "z";//这里输入你家的wifi账号
- //char pswd[] = "00000000";//这里输入你家的wifi密码
- int color1 = 120; //红色
- int color2 = 0; //绿色
- int color3 = 0; //蓝色
- // 新建组件对象
- BlinkerButton Button1("btn-abc");
- BlinkerButton Button2("btn-j8m");
- BlinkerButton Button3("btn-23f");
- BlinkerButton Button4("btn-h5h");
- BlinkerButton Button5("btn-a3o");
- BlinkerButton Button6("btn-0k8");
- BlinkerButton Button7("btn-o4j");
- // 按下button1按键即会执行该函数
- void button1_callback(const String & state) {
- BLINKER_LOG("get button1 state: ", state);
- digitalWrite(2, !digitalRead(LED_BUILTIN));
- myDFPlayer.previous();//上一首
- playInSequence = 1;//并将顺序改为向上播放
- }
- // 按下button2按键即会执行该函数
- void button2_callback(const String & state) {
- BLINKER_LOG("get button2 state: ", state);
- digitalWrite(2, !digitalRead(LED_BUILTIN));
- myDFPlayer.next();//下一首
- playInSequence = 0;//并将顺序改为向下播放
- }
- // 按下button3按键即会执行该函数
- void button3_callback(const String & state) {
- is_run = !is_run;
- }
- void button4_callback(const String & state) {
- myDFPlayer.volume(0);
- }
- void button5_callback(const String & state) {
- myDFPlayer.volume(5);
- }
- void button6_callback(const String & state) {
- myDFPlayer.volume(20);
- }
- void button7_callback(const String & state) {
- myDFPlayer.volume(30);
- }
- //颜色组件回调函数
- void rgb1_callback(uint8_t r_value, uint8_t g_value, uint8_t b_value, uint8_t bright_value)
- {
- digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
- BLINKER_LOG("R value: ", r_value);
- BLINKER_LOG("G value: ", g_value);
- BLINKER_LOG("B value: ", b_value);
- Serial.println(g_value);
- color1 = r_value;
- color2 = g_value;
- color3 = b_value;
- BLINKER_LOG("Rrightness value: ", bright_value);
- pixels.setBrightness(bright_value);//调节亮度
- }
- void setup() {
- // put your setup code here, to run once:
- mySoftwareSerial.begin(9600);
- Serial.begin(115200);
- pixels.begin(); // INITIALIZE NeoPixel pixels object (REQUIRED)
- pixels.show();
- BLINKER_DEBUG.stream(Serial);
- Blinker.begin(auth, ssid, pswd);
- RGB1.attach(rgb1_callback);//绑定RGB1的回调函数
- delay(3000);
- Serial.println();
- Serial.println(F("DFRobot DFPlayer Mini Demo"));//库demo
- Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));// 正在初始化DFPlayer 可能需要3-5秒钟
-
- if (!myDFPlayer.begin(mySoftwareSerial)) { //使用softwareSerial与mp3通信。
- Serial.println(F("Unable to begin:")); //无法开始
- Serial.println(F("1.Please recheck the connection!"));//请重新检查连接 也就是我们接的线路
- Serial.println(F("2.Please insert the SD card!")); //请插入SD卡!
- // while(true);
- }
- Serial.println(F("DFPlayer Mini online."));//走到这里就说明设备在线可以继续操作
- myDFPlayer.play(1); //播放第一个MP3 第一首歌曲
- //调试输出
- BLINKER_DEBUG.stream(Serial);
-
- // 初始化有LED的IO
- pinMode(2, OUTPUT);
- digitalWrite(2, HIGH);
- // 初始化blinker
- Blinker.begin(auth, ssid, pswd);
- Button1.attach(button1_callback);//绑定button1的回调函数
- Button2.attach(button2_callback);//绑定button2的回调函数
- Button3.attach(button3_callback);//绑定button2的回调函数
- Button4.attach(button4_callback);//绑定button4的回调函数
- Button5.attach(button5_callback);//绑定button5的回调函数
- Button6.attach(button6_callback);//绑定button6的回调函数
- Button7.attach(button7_callback);//绑定button7的回调函数
- }
-
- void loop() {
-
- Blinker.run();
- delay(1);
- middleWATER();
-
- }
-
- //中间流水灯函数
- void middleWATER(){
- pixels.clear();
- for(int j=0; j<numPixels; j++){
- if(j>=0 && j<30){ //0-29 执行这个条件 //比如灯珠数量60/2 30对 numPixels表示灯珠数量 执行点亮
- //29-0位顺序 灯珠亮 29. 28. 27. 26. 25. ...0 从右至左 29-0
- pixels.setPixelColor((numPixels/2-1-j), pixels.Color(color1, color2, color3));
- //30-59位顺序灯珠亮 30. 31. 32. 33. 34. ...59 从左至右 30-59
- pixels.setPixelColor((numPixels/2+j), pixels.Color(color1, color2, color3));
-
- }else{ //30-59 执行这个条件 执行熄灭
- //0-29位灯珠顺序灭 0位 灯珠灭 1位灯珠灭 0. 1 。。。。。29 从左至右 0-29
- pixels.setPixelColor((j-(numPixels)/2), pixels.Color(0, 0, 0));
- //59-30位灯珠 59灯珠灭. 58灯珠灭. 59. 58 。。。。。30 从右至左 59-30
- pixels.setPixelColor((numPixels-1-(j-(numPixels/2))), pixels.Color(0, 0, 0));
- }
- pixels.show();//执行设置
- delay(20);
- }
- }
-
- //顺序流水灯
- void orderWATER(){
- pixels.clear();
- //点亮所有灯珠
- for(int j=0; j<numPixels; j++){
- pixels.setPixelColor(j, pixels.Color(color1, color2, color3));
- pixels.show();//执行
- delay(20);
- }
- delay(20);
- //熄灭
- for(int j=numPixels-1; j>=0; j--){
- pixels.setPixelColor(j, pixels.Color(0, 0, 0));
- pixels.show();//执行
- delay(20);
- }
- }
- void printDetail(uint8_t type, int value){
- switch (type) {
- case TimeOut:
- Serial.println(F("Time Out!")); //时间到!
- break;
- case WrongStack:
- Serial.println(F("Stack Wrong!")); //堆栈错误!
- break;
- case DFPlayerCardInserted:
- Serial.println(F("Card Inserted!")); //卡已插入!
- break;
- case DFPlayerCardRemoved:
- Serial.println(F("Card Removed!")); //卡片已删除!
- break;
- case DFPlayerCardOnline:
- Serial.println(F("Card Online!")); //卡在线!
- break;
- case DFPlayerPlayFinished:
- Serial.print(F("Number:"));
- Serial.print(value);
- Serial.println(F(" Play Finished!")); //播放完毕!
- break;
- case DFPlayerError:
- Serial.print(F("DFPlayerError:"));
- switch (value) {
- case Busy:
- Serial.println(F("Card not found"));
- break;
- case Sleeping:
- Serial.println(F("Sleeping"));
- break;
- case SerialWrongStack:
- Serial.println(F("Get Wrong Stack")); //获取错误堆栈
- break;
- case CheckSumNotMatch:
- Serial.println(F("Check Sum Not Match")); //校验和不匹配
- break;
- case FileIndexOut:
- Serial.println(F("File Index Out of Bound")); //文件索引超出范围
- break;
- case FileMismatch:
- Serial.println(F("Cannot Find File")); //无法找到文件
- break;
- case Advertise:
- Serial.println(F("In Advertise")); //在广告中
- break;
- default:
- break;
- }
- break;
- default:
- break;
- }
- }
通过ESP8266微控制器实现一个智能家居的灯光和音频控制系统。代码结合了一些硬件组件和第三方库,提供了丰富的功能,如远程控制灯带颜色、亮度和播放音频文件。
1. 硬件初始化和配置:
2. 远程控制接口:
3. 回调函数:
4.主循环:
Blinker.run()
,保持与Blinker平台的连接和正常通信。middleWATER()
,实现特定的灯光效果。5. 自定义灯光效果函数:
6. 错误处理:
通过ESP8266微控制器和Blinker平台,实现了远程控制灯带颜色和亮度,并结合DFPlayer Mini MP3播放器提供了音频播放功能。代码结构清晰,通过回调函数实现了对各种控制命令的响应,并在主循环中保持与远程平台的通信和执行灯光效果。通过组合使用多个第三方库,代码实现了智能家居系统的主要功能,提供了良好的用户体验和可扩展性。
Keil uVision5 是一款广泛使用的集成开发环境(IDE),专门用于开发基于 ARM、Cortex-M、8051、C166 和其他微控制器的嵌入式系统。它由 Arm 公司提供,支持多种编程语言,主要是 C 和汇编语言。uVision5 提供了一整套的工具,包括代码编辑器、编译器、调试器以及项目管理工具,使开发者能够高效地进行嵌入式应用的开发。
uVision5 提供了直观易用的用户界面,使得项目创建和管理变得方便。支持语法高亮、代码完成、代码折叠等功能,提高了开发效率。内置 C/C++ 编译器,支持多种优化选项,生成高效的可执行代码。支持多种调试器,包括仿真器和硬件调试器,提供断点设置、变量监视、实时跟踪等功能,帮助开发者快速排查问题。
Arduino Integrated Development Environment(Arduino IDE)是一个专为编写、编译和上传代码到Arduino板子而设计的开发环境。它支持Windows、macOS和Linux操作系统,提供了简洁直观的用户界面,包含代码编辑器、编译器和上传工具,适合初学者和经验丰富的开发者使用。Arduino IDE内置库管理器,提供丰富的内置库,用户可以方便地导入和使用各种功能库,同时支持第三方硬件和库的安装,以扩展Arduino的功能。
它还内置串行监视器,用于调试和监控Arduino板子与计算机之间的串行通信。IDE提供大量示例代码,帮助用户快速上手和理解各种功能的实现。主要组件包括菜单栏、工具栏、代码编辑器、消息区和串行监视器。安装Arduino IDE后,用户可以通过USB线将Arduino板子连接到计算机,选择正确的板子类型和端口,在代码编辑器中编写Arduino程序,通常包含setup()函数和loop()函数。用户可以点击工具栏中的校验按钮进行代码编译,如果没有错误,会生成二进制文件,然后点击上传按钮将编译后的代码上传到Arduino板子。IDE还可以使用串行监视器查看和调试Arduino板子输出的串行数据。Arduino IDE简化了开发、调试和部署Arduino项目的过程,使得从简单的LED控制到复杂的物联网应用都变得非常简单和高效。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。