当前位置: 首页 > news >正文

【stm32项目】多功能智能家居室内灯光控制系统设计与实现(完整工程资料源码)

多功能智能家居室内灯光控制系统设计与实现

目录:

目录:

前言:

一、项目背景与目标

二、国内外研究现状:

2.1 国内研究现状:

 2.2 国外研究现状:

2.3 发展趋势

三、硬件电路设计

3.1 总体概述

3.2 硬件连接总结

3.3 主控单元

3.3.1 STM32单片机

3.3.2 DS18B20 温度传感器 

3.3.3 光传感器

3.3.4 蓝牙模块

3.3.4 LED 灯模块

3.3.5 电机模块

3.3.6 OLED 显示模块

3.4 远程灯控单元

3.4.1 ESP8266 主控板

3.4.2 Adafruit NeoPixel LED 带

 3.4.3 DFRobot DFPlayer Mini MP3 播放器

3.5 语音模块单元

3.5.1 DHT11 温湿度传感器

 3.5.2 LU-ASR01鹿小班智能语音识别模块

3.6 实物展示:

四、软件设计

4.1 STM32_Bluetooth 控制端

4.2 ESP8266 部分-WiFi 控制端

4.3 语音控制端

4.4 软件设计概要

4.5 STM32核心源码

4.6 esp8266核心源码:

五、开发环境:

5.1 Keil uVision5 

5.2 Arduino IDE

详细资料源码:毕设&课设&项目&竞赛-多功能智能家居室内灯光控制系统设计与实现(完整工程资料源码).zip资源-CSDN文库

详细资料:

esp8266部分-wifi端源码

stm32部分-控温控光系列(C语言)源码 

蓝牙端APP-STM32_Bluetooth

使用手册


前言:

随着现代科技的迅猛发展,智能家居系统在我们的日常生活中扮演着越来越重要的角色。通过智能化技术提升家居环境的舒适度和安全性,已经成为当前技术创新的重要方向之一。在大数据、物联网(IoT)和人工智能(AI)技术的推动下,智能家居系统的功能越来越丰富,操作越来越简便,兼容性和扩展性也显著提升。灯光控制作为智能家居系统中的重要组成部分,对于营造家居氛围、提高能源利用效率和提升生活质量具有重要意义。

本项目旨在设计并实现一个多功能智能家居室内灯光控制系统,通过整合多种先进的传感器和控制模块,实现对室内灯光的智能控制。系统主要由三个控制端组成:STM32_Bluetooth控制端、ESP8266 WiFi控制端和语音控制端。通过这三个控制端,用户可以实现对灯光的远程控制、语音控制以及基于环境数据的自动控制。

本项目集成了光敏电阻传感器、HC-05蓝牙模块、DS18B20数字温度传感器、LED灯、风扇叶、130直流电机、TB6612直流电机驱动模块、STM32最小系统板(STM32F103C8T6芯片)、OLED显示板、智能语音识别模块、扬声器、ESP8266模块、DC-DC可调电源模块和继电器模块等多种硬件元件。通过这些元件的协同工作,系统能够高效、稳定地实现对室内灯光的智能控制。

一、项目背景与目标

随着科技的不断进步和生活水平的提高,智能家居技术逐渐成为现代家庭生活的重要组成部分。智能家居系统通过物联网技术将家庭中的各种设备联结在一起,实现相互通信与协作,提升家居环境的舒适性、安全性和便利性。其中,智能灯光控制系统作为智能家居系统中的核心模块之一,具有广泛的应用前景。

在传统的家居环境中,灯光控制主要依赖于手动开关,操作繁琐且缺乏灵活性。随着人们对生活质量要求的不断提升,如何实现更加便捷、高效和智能的灯光控制,成为了智能家居技术研究的重要方向。此外,通过智能控制技术优化灯光的使用,可以有效减少能源浪费,提升能源利用效率,符合现代社会提倡的绿色环保理念。

本项目旨在设计和实现一个多功能智能家居室内灯光控制系统,通过整合多种传感器和控制模块,实现对室内灯光的智能化控制。系统不仅支持传统的手动控制,还能通过蓝牙、WiFi和语音等多种方式进行远程和自动控制,极大地提升了灯光控制的便捷性和灵活性。

图1-1 智能家居设计

本项目的主要目标是设计并实现一个多功能智能家居室内灯光控制系统,通过先进的传感器和控制技术,实现对灯光的智能化控制,提升家居生活的质量和舒适度。具体目标包括:

1. 蓝牙控制

  • 通过蓝牙APP实现对LED灯的开关控制和亮度调节。
  • 通过蓝牙APP实现对风扇的开关控制、转速调节和方向调节。
  • 系统能够根据实时光照强度自动调节灯光亮度。
  • 系统能够根据实时温度自动控制风扇进行降温。

2. WiFi控制

  • 通过WiFi实现对彩灯灯带颜色和亮度的远程控制。
  • 提供当前位置定位功能。
  • 提供相关调试界面,方便用户进行系统配置和监测。

3. 语音控制

  • 通过语音命令实现对灯光、彩灯和风扇的控制。
  • 提供故事模式和诗歌模式,通过语音命令启动相应模式并播放预先录入的故事和诗歌。
  • 通过语音命令获取当前环境的温湿度数据。

4. 硬件集成

  • 设计并实现包含光敏电阻传感器、HC-05蓝牙模块、DS18B20数字温度传感器、LED灯、风扇叶、130直流电机、TB6612直流电机驱动模块、STM32最小系统板(STM32F103C8T6芯片)、OLED显示板、智能语音识别模块、扬声器、ESP8266模块、DC-DC可调电源模块和继电器模块等多种硬件元件的集成系统。
  • 通过硬件元件的协同工作,实现系统的高效、稳定运行。

5. 用户体验提升

  • 提供多种灯光控制方式,提升用户的操作便捷性和系统灵活性。
  • 通过智能化控制技术,提升家居环境的舒适性和能源利用效率。

通过实现上述目标,本项目不仅展示了智能家居技术的实际应用,还为智能灯光控制系统的发展提供了有益的参考和实践经验。希望通过本项目的研究与实现,能够为人们的日常生活带来更多的便利和舒适,推动智能家居技术的进一步发展。

二、国内外研究现状:

2.1 国内研究现状:

随着智能家居技术的不断发展,国内的智能家居市场也在迅速扩大。近年来,许多高校和研究机构在智能家居系统的研究与应用方面取得了显著的进展。其中,智能灯光控制系统作为智能家居的重要组成部分,得到了广泛关注和研究。

1. 高校和研究机构

  • 清华大学等高校的研究团队在物联网和智能控制技术方面拥有丰富的研究经验,开发了基于物联网的智能家居控制系统,能够实现对家居环境的智能监测和控制。
  • 浙江大学的研究人员开发了基于嵌入式系统的智能灯光控制系统,通过传感器集成,实现了自动调节灯光亮度和颜色的功能。

2. 企业应用

  • 华为小米等知名企业也纷纷进入智能家居市场,推出了自己的智能灯光控制产品。这些产品通常集成了WiFi、蓝牙等通信模块,支持远程控制和语音控制,并且能够与其他智能设备实现联动控制。
  • 涂鸦智能是一家专注于智能家居解决方案的公司,通过其平台,开发者可以快速开发和部署智能灯光控制系统,实现远程控制、定时控制和场景联动等功能。

3. 标准化与互联互通

  • 国内智能家居领域逐渐重视标准化建设,如国家标准《智能家居系统通用技术要求》为智能家居系统的设计和实施提供了指导。
  • 阿里巴巴京东等互联网巨头也在推动智能家居生态系统的建设,通过开放平台,促进不同品牌和设备之间的互联互通。

 2.2 国外研究现状:

国外在智能家居技术的研究和应用方面起步较早,技术相对成熟,市场也较为广泛。智能灯光控制系统作为智能家居的重要组成部分,得到了广泛的研究和应用。

1. 学术研究

  • 麻省理工学院(MIT)等世界知名高校在物联网、人工智能和智能控制技术方面拥有丰富的研究经验,开发了许多创新的智能家居控制系统。这些系统通常集成了机器学习算法,能够根据用户的行为习惯和环境变化,自动调节灯光和其他家居设备。
  • 斯坦福大学的研究人员开发了一种基于深度学习的智能灯光控制系统,通过对环境光照和用户行为的实时监测,实现了高度智能化的灯光控制。

2. 企业应用

  • Google的Nest智能家居产品在全球范围内广受欢迎,其智能灯光控制系统能够与Google Assistant无缝集成,实现语音控制和场景联动。
  • Amazon的Echo系列产品通过集成Alexa语音助手,实现了对灯光、温度和其他家居设备的智能控制,用户可以通过简单的语音命令实现对家居环境的调节。
  • Philips的Hue智能灯光系统在市场上享有很高的声誉,其产品支持丰富的灯光调节功能,通过手机APP、语音助手和自动化规则实现个性化的灯光控制。

3. 标准化与互联互通

  • 国外智能家居领域的标准化建设较为成熟,如Zigbee、Z-Wave等协议在全球范围内得到广泛应用,促进了不同品牌和设备之间的互联互通。
  • 苹果的HomeKit平台通过严格的认证和标准,确保了智能家居设备的兼容性和安全性,用户可以通过iOS设备实现对家居设备的统一管理和控制。

国内外在智能灯光控制系统的研究与应用方面均取得了显著的进展。国内研究更加注重系统的集成和应用创新,国外则在技术创新和标准化建设方面具有优势。本项目希望通过借鉴国内外的研究成果,设计并实现一个多功能智能家居室内灯光控制系统,为用户提供更加便捷、高效和智能的家居体验。

2.3 发展趋势

随着科技的不断进步和消费者对高品质生活需求的提升,智能家居室内灯光控制系统正朝着更加智能化、个性化和集成化的方向发展。

  • 人工智能(AI)技术的融合:通过引入机器学习和深度学习算法,系统能够更好地理解用户的行为习惯和偏好,实现更加精准和个性化的灯光控制。例如,系统可以根据用户的作息时间自动调节灯光亮度和色温,或者根据用户的情绪状态调整灯光颜色。
  • 环境感知能力的增强:集成更多的传感器(如人体红外传感器、温湿度传感器等),系统能够实时监测环境变化,并自动调整灯光设置,以适应不同的使用场景和需求。
  • 场景模式的多样化:系统支持更多的预设场景模式,如阅读模式、聚会模式、睡眠模式等,用户可以根据不同的活动需求快速切换灯光设置。
  • 用户交互体验的优化:通过改进用户界面和交互设计,提供更加直观和便捷的操作体验。例如,通过手势控制、语音控制或移动设备APP实现更加自然的交互方式。
  • 设备间的协同工作:系统能够与其他智能家居设备(如智能窗帘、智能空调等)实现联动控制,提供更加综合和一体化的家居环境管理。
  • 开放平台和标准化的推广:通过采用开放的通信协议和标准化的接口,促进不同品牌和设备之间的互联互通,构建更加开放和兼容的智能家居生态系统。

三、硬件电路设计

3.1 总体概述

本项目是一个集成了多种先进传感器和控制模块的智能家居控制系统,旨在提供便捷的灯光、风扇、环境温湿度等设备的智能控制功能。系统分为三个主要控制端: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 电路设计图 

3.2 硬件连接总结

光敏电阻传感器连接到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口。

3.3 主控单元

3.3.1 STM32单片机

STM32单片机在智能宠物喂养设备中担任核心控制器的角色。它负责实时处理来自各类传感器的数据,执行相应的控制逻辑,并与用户界面进行交互。STM32的多种接口(如GPIO、ADC、I2C、SPI等)使其能够灵活地连接温湿度传感器、红外测温传感器、水位传感器等外设,确保系统能够准确获取环境信息。此外,STM32还能够根据传感器的数据做出及时反应,如控制水泵的开关、发出警报信号以及更新OLED显示屏的信息。这种高效的处理能力和灵活的接口设计,使得STM32单片机成为智能宠物喂养设备的理想选择。

图3-2 STM32F103C8T6 实物图

  • PA0:DS18B20温度传感器的数据引脚
  • PA1:光传感器的模拟输入引脚
  • PA2:蓝牙模块的TX引脚连接到STM32的RX引脚
  • PA3:蓝牙模块的RX引脚连接到STM32的TX引脚
  • PA5:LED PWM控制引脚
  • PA6:电机PWM控制引脚
  • PA7:电机方向控制引脚

3.3.2 DS18B20 温度传感器 

将DS18B20温度传感器的数据引脚连接到STM32的PA0引脚,电源和地分别连接到3.3V和GND。如果使用的是单总线模式,需要一个上拉电阻(通常为4.7kΩ)连接在数据引脚和电源之间。

图3-3 DS18B20 温度传感器实物图 

3.3.3 光传感器

光传感器的模拟输出引脚连接到STM32的PA1引脚,电源和地分别连接到3.3V和GND。

图3-4 光传感器实物图

3.3.4 蓝牙模块

蓝牙模块(如HC-05或HC-06)的TX引脚连接到STM32的PA3(RX)引脚,RX引脚连接到PA2(TX)引脚。电源和地分别连接到3.3V和GND。

图3-5 HC-05实物图

3.3.4 LED 灯模块

LED灯的控制通过STM32的PA5引脚(PWM输出),LED的正极连接到电源(3.3V或5V,取决于LED的额定电压),负极通过限流电阻连接到PA5引脚。

3.3.5 电机模块

电机连接到L298N电机驱动模块:

  • ENA(使能引脚)连接到STM32的PA6引脚(PWM控制电机转速)
  • IN1IN2连接到STM32的PA7引脚,用于控制电机的转向

 

图3-6 DRV8833电机驱动板模块实物图

电机驱动模块的VCC和GND分别连接到电源(通常是12V)和地。

3.3.6 OLED 显示模块

OLED模块(如128x64 I2C OLED)的SDA和SCL引脚分别连接到STM32的I2C引脚(通常是PB7和PB6)。电源和地分别连接到3.3V和GND。

图3-7 OLED模块实物图 

以上连接方式:

STM32 引脚模块模块引脚连接说明
PA0DS18B20Data数据引脚
3.3VDS18B20VCC电源
GNDDS18B20GND
PA1光传感器Analog Out模拟输出
3.3V光传感器VCC电源
GND光传感器GND
PA2蓝牙模块RX蓝牙模块接收
PA3蓝牙模块TX蓝牙模块发送
3.3V蓝牙模块VCC电源
GND蓝牙模块GND
PA5LED灯(-)通过限流电阻连接到负极
3.3VLED灯(+)正极
PA6电机驱动模块ENA电机使能引脚
PA7电机驱动模块IN1/IN2电机方向控制
GND电机驱动模块GND
PB7OLEDSDAI2C 数据线
PB6OLEDSCLI2C 时钟线
3.3VOLEDVCC电源
GNDOLEDGND

3.4 远程灯控单元

3.4.1 ESP8266 主控板

ESP8266 是一个集成 WiFi 功能的微控制器,广泛用于物联网项目。

图3-8 ESP8266实物图 

3.4.2 Adafruit NeoPixel LED 带

  • 引脚: 使用 GPIO13(D7) 连接到 NeoPixel LED 带的输入。
  • 数量: NeoPixel LED 带上有 60 个 LED。
  • 功率: 所有 LED 满载时可能需要一个外部电源(例如 5V 3A 电源),因为 ESP8266 无法提供足够的电流。
  • 连接:
    • DIN 连接到 GPIO13(D7)
    • VCC 连接到外部 5V 电源
    • GND 连接到外部电源的 GND 和 ESP8266 的 GND

图3-9 LED 灯带实物图  

 3.4.3 DFRobot DFPlayer Mini MP3 播放器

  • 引脚: 使用软件串口通过 GPIO4(D2)和 GPIO5(D1) 进行通信。
  • 连接:
    • RX 连接到 GPIO5(D1)
    • TX 连接到 GPIO4(D2)
    • VCC 连接到 5V
    • GND 连接到 GND

图3-10 Mini MP3 播放器实物图  

 以上连接方式:

图3-11 esp8266与灯带详细连接

模块引脚连接到说明
NeoPixel LED 带DINGPIO13 (D7)数据输入
VCC外部 5V电源
GNDGND
DFPlayer MiniRXGPIO5 (D1)串口通信
TXGPIO4 (D2)串口通信
VCC5V电源
GNDGND
ESP8266GPIO2外部 LED控制状态指示 LED
3.3V外部电源电源
GNDGND

3.5 语音模块单元

3.5.1 DHT11 温湿度传感器

  • 引脚: 使用 GPIO9(D9)读取温湿度数据。
  • 功能: 提供当前环境的温度和湿度数据。

图3-12 esp8266与灯带详细连接 

 3.5.2 LU-ASR01鹿小班智能语音识别模块

LU-ASR01鹿小班是一个智能语音识别模块,具备高度集成的语音识别和处理能力,适用于多种物联网和智能家居应用。该模块支持多种语音命令的识别,可以实现复杂的语音控制功能。LU-ASR01内置先进的语音识别算法,能够在嘈杂的环境下准确识别用户的语音指令。它还支持多种唤醒词和命令词的自定义,用户可以根据实际需求自由设置。模块通过串口与主控板通信,提供简单易用的接口,方便各种开发板和微控制器进行集成。

图3-13 鹿小班语音模块  

另外,LU-ASR01还具备实时语音反馈功能,通过内置或外接的扬声器可以及时响应用户的指令。该模块广泛应用于智能音箱、语音助手、语音控制家电等领域,帮助实现更为智能化和人性化的交互体验。LU-ASR01设计紧凑,功耗低,适合各种嵌入式系统和便携设备的应用,是开发语音交互产品的理想选择。 

3.6 实物展示:

四、软件设计

4.1 STM32_Bluetooth 控制端

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温度传感器检测环境温度。

        通过读取温度值,并根据设定的阈值自动控制风扇的开关和转速。

4.2 ESP8266 部分-WiFi 控制端

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界面设计

4.3 语音控制端

1. 通过“智能管家”命令启动语音模块:

        使用路小班智能语音识别模块进行语音命令识别。

        通过USART接口将语音识别结果传输到STM32进行处理。

2. 通过“打开灯光”命令打开灯光、通过“关闭灯光”命令关闭灯光:

        解析语音命令,识别“打开灯光”或“关闭灯光”。

        控制STM32的GPIO引脚实现LED灯的开关。

3. 通过“打开彩灯”命令打开灯带、通过“关闭彩灯”命令关闭灯带:

        解析语音命令,识别“打开彩灯”或“关闭彩灯”。

        通过ESP8266发送控制指令到灯带,实现灯带的开关。

4. 通过“故事模式”命令启动故事模式:

        解析语音命令,识别“故事模式”。

        通过STM32控制扬声器播放预录的故事音频。

5. 通过“诗歌模式”命令启动诗歌模式:

        解析语音命令,识别“诗歌模式”。

        通过STM32控制扬声器播放预录的诗歌音频。

6. 通过“房间温湿度”命令得到当前环境温湿度总体概述:

        解析语音命令,识别“房间温湿度”。

        读取DS18B20温度传感器的数据,并通过扬声器播报当前温湿度概述。

4.4 软件设计概要

1. STM32固件:

        初始化各个外设(ADC、PWM、USART、I2C等)。

        通过中断或定时器定期读取传感器数据。

        接收并解析蓝牙和语音模块的命令,控制相应的外设。

        通过USART与ESP8266通信,实现WiFi控制。

2. ESP8266固件:

        初始化WiFi连接,连接到指定的网络。

        提供HTTP或MQTT接口,接收远程控制指令。

        控制彩灯灯带的颜色和亮度。

        实现定位功能并上传定位数据。

3. 移动App或Web界面:

        提供用户友好的界面,控制LED灯、风扇和彩灯灯带。

        通过蓝牙或WiFi与STM32和ESP8266通信。

        显示实时传感器数据和系统状态。

通过以上设计和实现,可以构建一个功能丰富、智能化的多功能智能家居室内灯光控制系统,满足用户的多种需求。

4.5 STM32核心源码

#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上显示温度和亮度:
    • 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):根据接收到的指令执行相应操作。
      • 控制LED灯亮度。
      • 控制风扇转速和方向。
      • 开启或关闭光控和温控模块。
      • 设置标准亮度和温度。
  • 根据标志位执行光控和温控:
    • if (LFlag):如果光控标志位为1,执行光控模块。
    • if (TFlag):如果温控标志位为1,执行温控模块。

该程序通过蓝牙接收控制指令,根据指令控制LED灯和风扇,并实时显示温度和亮度。同时,程序支持自动光控和温控功能,可以根据设定的标准亮度和温度自动调节LED灯和风扇。

4.6 esp8266核心源码:

#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"));//库demoSerial.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的IOpinMode(2, OUTPUT);digitalWrite(2, HIGH);// 初始化blinkerBlinker.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-0pixels.setPixelColor((numPixels/2-1-j), pixels.Color(color1, color2, color3));//30-59位顺序灯珠亮 30. 31. 32. 33. 34. ...59            从左至右 30-59pixels.setPixelColor((numPixels/2+j), pixels.Color(color1, color2, color3));}else{ //30-59 执行这个条件 执行熄灭//0-29位灯珠顺序灭 0位 灯珠灭 1位灯珠灭 0.  1  。。。。。29  从左至右 0-29pixels.setPixelColor((j-(numPixels)/2), pixels.Color(0, 0, 0));//59-30位灯珠 59灯珠灭. 58灯珠灭.      59. 58 。。。。。30  从右至左 59-30pixels.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. 硬件初始化和配置:

  • NeoPixel灯带:使用Adafruit NeoPixel库控制灯带的颜色和亮度。灯带的数据引脚连接到ESP8266的GPIO引脚。初始化时,设置灯带的数量和像素格式。
  • DFPlayer Mini MP3播放器:使用DFRobotDFPlayerMini库控制MP3播放器,通过软件串口与ESP8266通信。需要初始化播放器并检查是否正确连接和插入SD卡。
  • Blinker平台:使用Blinker库实现远程控制。需要提供Blinker平台的授权码和WiFi网络的SSID和密码。

2. 远程控制接口:

  • Blinker组件:定义了一些按钮和RGB颜色拾取器,分别用于控制灯带的颜色和音频播放。每个组件都有对应的回调函数,当用户在Blinker应用中触发这些组件时,会调用相应的回调函数。
    • 按钮控制:按钮用于控制音频的播放顺序(上一首、下一首)、播放状态(播放/暂停)、音量调节(不同的音量级别)。
    • RGB颜色拾取器:用于远程设置灯带的颜色和亮度。

3. 回调函数:

  • 按钮回调函数:每个按钮对应一个回调函数,当按钮被按下时,执行特定的操作,如播放上一首或下一首歌曲、调节音量等。
  • RGB颜色回调函数:当用户在Blinker应用中选择颜色时,回调函数会更新灯带的颜色和亮度。

4.主循环:

  • Blinker运行:在主循环中调用Blinker.run(),保持与Blinker平台的连接和正常通信。
  • 灯光效果:在主循环中调用自定义的灯光效果函数,如middleWATER(),实现特定的灯光效果。

5. 自定义灯光效果函数:

  • 中间流水灯效果:通过控制灯带的像素颜色,创建一个从中间向两侧扩展的流水效果。依次点亮和熄灭灯珠,实现动态效果。
  • 顺序流水灯效果:灯带的像素依次点亮和熄灭,创建顺序流水的效果。

6. 错误处理:

  • DFPlayer错误处理:定义一个函数处理DFPlayer Mini MP3播放器的错误信息,通过串口打印错误详情,方便调试和排除故障。

通过ESP8266微控制器和Blinker平台,实现了远程控制灯带颜色和亮度,并结合DFPlayer Mini MP3播放器提供了音频播放功能。代码结构清晰,通过回调函数实现了对各种控制命令的响应,并在主循环中保持与远程平台的通信和执行灯光效果。通过组合使用多个第三方库,代码实现了智能家居系统的主要功能,提供了良好的用户体验和可扩展性。

五、开发环境:

5.1 Keil uVision5 

Keil uVision5 是一款广泛使用的集成开发环境(IDE),专门用于开发基于 ARM、Cortex-M、8051、C166 和其他微控制器的嵌入式系统。它由 Arm 公司提供,支持多种编程语言,主要是 C 和汇编语言。uVision5 提供了一整套的工具,包括代码编辑器、编译器、调试器以及项目管理工具,使开发者能够高效地进行嵌入式应用的开发。

uVision5 提供了直观易用的用户界面,使得项目创建和管理变得方便。支持语法高亮、代码完成、代码折叠等功能,提高了开发效率。内置 C/C++ 编译器,支持多种优化选项,生成高效的可执行代码。支持多种调试器,包括仿真器和硬件调试器,提供断点设置、变量监视、实时跟踪等功能,帮助开发者快速排查问题。

5.2 Arduino IDE

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控制到复杂的物联网应用都变得非常简单和高效。

详细资料源码:毕设&amp;课设&amp;项目&amp;竞赛-多功能智能家居室内灯光控制系统设计与实现(完整工程资料源码).zip资源-CSDN文库

详细资料:

esp8266部分-wifi端源码

stm32部分-控温控光系列(C语言)源码 

蓝牙端APP-STM32_Bluetooth

使用手册

相关文章:

【stm32项目】多功能智能家居室内灯光控制系统设计与实现(完整工程资料源码)

多功能智能家居室内灯光控制系统设计与实现 目录&#xff1a; 目录&#xff1a; 前言&#xff1a; 一、项目背景与目标 二、国内外研究现状&#xff1a; 2.1 国内研究现状&#xff1a; 2.2 国外研究现状&#xff1a; 2.3 发展趋势 三、硬件电路设计 3.1 总体概述 3.2 硬件连接总…...

xss靶场详解

目录 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 8.第八题 1.第一题 在源码script标签里边&#xff0c;innerhtml是用于访问或修改 HTML 元素内的 HTML 内容的&#xff0c;这里是访问spaghet这个元素的&#xff0c;并通过括号里面的东西搜索当前…...

华为的流程管理

华为建设流程体系始于2000年&#xff0c;那时华为公司面临着快速扩张和全球化发展的挑战&#xff0c;意识到传统的管理模式已经无法满足业务发展的需求。为了提高公司的管理效率和竞争优势&#xff0c;华为决定启动流程体系的建设。在建设过程中&#xff0c;华为借鉴了业界最佳…...

操作系统Linux

1.Linux命令 ls&#xff1a;查看当前目录下所有目录和文件ps&#xff1a;查看所有正在运行的进程top&#xff1a;显示当前系统中占用资源最多的一些进程&#xff0c;shiftm按照内存查看大小netstat&#xff1a;查看端口的命令vi&#xff1a;查看文件的命令rm&#xff1a;删除文…...

1、.Net UI框架:MAUI - .Net宣传系列文章

.NET MAUI(Multi-platform App UI)是一个跨平台的UI框架&#xff0c;它是.NET统一应用模型的一部分&#xff0c;允许开发者使用C#和.NET来创建适用于iOS、Android、macOS和Windows的应用程序。MAUI继承了Xamarin.Forms的一些概念&#xff0c;但提供了更多的原生平台集成和改进的…...

Spring boot 使用 jSerialComm 对串口使用发送信息并接收

什么是 jSerialComm&#xff1f; jSerialComm 是一个 Java 库&#xff0c;旨在提供一种独立于平台的方式来访问标准串行端口&#xff0c;而无需外部库、本机代码或任何其他工具。它旨在替代 RxTx 和&#xff08;已弃用的&#xff09;Java Communications API&#xff0c;具有更…...

江协科技STM32学习笔记(第10章 SPI通信)

第10章 SPI通信 10.1 SPI通信协议 10.1.1 SPI通信 SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线&#xff1b; 串行外设接口&#xff1b; I2C无论是软件还是软件电路&#xff0c;设计的都还是比较复杂的&#xff0c;硬件…...

力扣热题100_回溯_22_括号生成

文章目录 题目链接解题思路解题代码 题目链接 22. 括号生成 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[“((()))”,“(()())”,“(())()…...

【k8s】ubuntu24.04 containerd 手动从1.7.15 换为1.7.20

24.04的这个应该是apt 安装的1.7.20-1 root@k8s-master-pfsrv:~# sudo apt update && sudo apt install containerd.io -y 命中:1 http://mirrors.aliyun.com/docker-ce/linux/ubuntu noble InRelease 命中:2 https://dl.google.com/linux/chrome/deb stable InRelease…...

Java二十三种设计模式-备忘录模式(19/23)

本文深入探讨了备忘录模式&#xff0c;从定义、组成、实现到使用场景、优缺点、与其他模式的比较&#xff0c;以及最佳实践和替代方案&#xff0c;全面解析了如何在软件开发中有效地保存和恢复对象状态&#xff0c;以支持复杂的撤销操作和历史状态管理。 备忘录模式&#xff1a…...

js一些杂乱理解

js 的值类型和引用类型 引用类型:object,array,function值类型:诸如number,stringboolean,null,Undefined,Symbol js使用变量访问对象属性示例 var myDog "Hunter"; var dogs { Fido: "Mutt", Hunter: "Doberman", Snoopie: "Beagle&q…...

机器学习 之 线性回归算法

目录 线性回归&#xff1a;理解与应用 什么是线性回归&#xff1f; 一元线性回归 正态分布的重要性 多元线性回归 实例讲解 数据准备 数据分析 构建模型 训练模型 验证模型 应用模型 代码实现 线性回归&#xff1a;理解与应用 线性回归是一种广泛使用的统计方法&…...

ThreadLoad如何防止内存溢出

优质博文&#xff1a;IT-BLOG-CN 从 ThreadLocalMap看 ThreadLocal使用不当的内存泄漏问题 【1】基础概念 &#xff1a; 首先我们先看看ThreadLocalMap的类图&#xff0c;我们知道 ThreadLocal只是一个工具类&#xff0c;他为用户提供get、set、remove接口操作实际存放本地变…...

2024.8.19 学习记录 —— 作业

一、TCP机械臂测试 #include <myhead.h>#define SER_PORT 8888 // 与服务器保持一致 #define SER_IP "192.168.0.114" // 服务器ip地址int main(int argc, const char *argv[]) {// 创建文件描述符打开键盘文件int fd open("/dev/input/event1…...

Java 阿里云视频直播开发流程

首先来看一下直播效果 推流工具有很多种&#xff08;例如OBS、阿里云直播Demo推流、等等&#xff0c;我用的是芯象导播&#xff09;阿里播放器地址 一、直播基础服务概述 官方文档说明 二、直播域名配置需要两个域名&#xff08;推流域名、播流域名&#xff09; 官方文档说…...

SQLite 轻量级的嵌入式关系型数据库的替代软件

SQLite 是一个轻量级的嵌入式关系型数据库&#xff0c;由于其简单易用和跨平台的特性&#xff0c;被广泛应用于各种应用程序中。以下是一些可作为SQLite替代品的数据库软件或可视化管理工具&#xff1a; 1. **SQLiteStudio**&#xff1a;这是一个免费、开源的跨平台SQLite数据…...

Flutter-自适用高度PageView

需求 在 Flutter 中&#xff0c;PageView 是一个非常常用的组件&#xff0c;能够实现多个页面的滑动切换。然而&#xff0c;默认的 PageView 高度是固定的&#xff0c;这在展示不同高度的页面时&#xff0c;可能会导致不必要的空白或内容裁剪问题。为了使 PageView 能够根据每…...

群晖NAS本地搭建可远程交互的大型语言模型LLM聊天机器人

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…...

TypeScript 构建工具之 webpack

在实际开发中&#xff0c;直接使用TypeScript 编译器的情况不多。 在项目中&#xff0c;需要使用构建工具对代码进行打包&#xff0c;不可能脱离项目使用TypeScript 编译器单独打包TypeScript 。 那如何将 webpack 和 TypeScript 进行集成&#xff1f; 参考文档&#xff1a; w…...

conda环境下在pycharm中调试scrapy项目

前提条件 已经创建好了conda环境已经安装好了scrapy框架项目初始化完成 编写一个爬虫脚本 import scrapyclass StackOverflowSpider(scrapy.Spider):name stackoverflowstart_urls [http://stackoverflow.com/questions?sortvotes]def parse(self, response):print("…...

contenteditable=“true“的标签限制字数的时候修改光标位置

contenteditable"true"的标签限制字数的时候修改光标位置 有时候input和textarea并不能完全满足ui需求&#xff0c;这个时候我们就用contenteditable"true"来将别的标签修改为可编辑状态&#xff0c;但当我们通过js修改了内容之后光标的位置就是一个问题&…...

51单片机-LED灯蜂鸣器数码管按键DS18B20温度传感器

LDE灯的相关程序 LED灯闪烁 LED流水灯 方法1 方法二&#xff1a; 因为P1口可以直接控制P1^0~P1^7的8个led灯&#xff0c;利用一个8位的二进制数字来进行控制即可。如果要点亮P1^0 只需要给P1口传递 1111 1110即可。 蜂鸣器的使用 什么是蜂鸣器&#xff1f; 蜂鸣器是一种一…...

笔记本一线品牌有哪些

笔记本电脑的一线品牌通常指的是在市场上具有较高市场份额、良好口碑、较强的技术实力和服务能力的品牌。根据目前的信息&#xff0c;笔记本电脑市场的一线品牌主要包括以下几个&#xff1a; 联想 (Lenovo)&#xff1a;联想在全球笔记本市场上的占有率较高&#xff0c;其产品线…...

mysql聚合函数和分组

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…...

ubuntu20.04+RealSenseD455

ubuntu20.04安装驱动双目相机RealSenseD455 安装环境安装RealSense SDK 2.0ROS包安装启动Realsense摄像头存在的 bugD455标定安装环境 系统:Ubuntu20.04 ROS:Noetic 视觉传感器:Intel RealSense D455 安装RealSense SDK 2.0 该安装有两种方式,一个是用命令安装,另一个是…...

WAF绕过技巧

WAF绕过技巧 WAF&#xff08;Web Application Firewall&#xff09;是一种安全系统&#xff0c;旨在监控和控制网络流量&#xff0c;以防止攻击&#xff0c;如SQL 注入、跨站脚本&#xff08;XSS&#xff09;和拒绝服务&#xff08;DoS&#xff09;。 WAF 可以通过多种方式绕过…...

HarmonyOS应用三之组件生命周期和参数传递

目录&#xff1a; 1、生命周期的执行顺序2、页面数据传递3、图片的读取4、数据的备份和恢复5、轮播图6、页面布局图 1、生命周期的执行顺序 /** Copyright (c) 2023 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* yo…...

[Qt][Qt 网络][上]详细讲解

目录 0.概述1.UDP Socket1.核心API概览2.回显服务器3.回显客户端 0.概述 要使用Qt中有关网络编程的API&#xff0c;需要添加network模块 1.UDP Socket 1.核心API概览 主要的类有两个&#xff1a;QUdpSocket和QNetworkDatagramQUdpSocket表⽰⼀个UDP的socket⽂件 bind(const …...

读零信任网络:在不可信网络中构建安全系统21读后总结与感想兼导读

1. 基本信息 零信任网络&#xff1a;在不可信网络中构建安全系统 道格巴斯&#xff08;Doug Barth&#xff09; 著 人民邮电出版社,2019年8月出版 1.1. 读薄率 书籍总字数252千字&#xff0c;笔记总字数73194字。 读薄率73194252000≈29.5% 这个读薄率是最高的吧&#x…...

Java基础——注释

在开发中注释是必不可少的&#xff0c;帮助我们更好的标记阅读代码&#xff0c;下面介绍几种常用的注释方式。 一、注释种类 1. 单行注释 使用//一行代码来进行注释&#xff0c;只能注释一行内容 2. 多行注释 使用斜杠星号的方式 /*注释多行代码*/&#xff0c;注释多行代…...

Redis未授权访问漏洞利用合集

一、基本信息 靶机&#xff1a;IP:192.168.100.40 攻击机&#xff1a;IP:192.168.100.60 二、漏洞 & 过程 Redis 未授权访问漏洞利用无口令远程登录靶机 靶机 cd redis-4.0.8/src./redis-server ../redis.conf 攻击机 ./redis-cli -h 192.168.100.40 Redis 未授权访问…...

基于asp.net的在线考试系统、基于c#的在线考试管理系统

摘 要 伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着网络飞速的发展&#xff0c;管理系统这一名词已不陌生&#xff0c;越来越多的学校、公司等机构都会定制一款属于自己个…...

将 hugo 博客搬迁到服务器

1. 说明 在 Ubuntu 22.04 上使用 root 账号&#xff0c;创建普通账号&#xff0c;并赋予 root 权限。 演示站点&#xff1a;https://woniu336.github.io/ 魔改hugo主题: https://github.com/woniu336/hugo-magic 2. 服务器配置 建立 git 用户 adduser git安装 git sudo apt …...

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向笔记 Task04 RAG模型 人话八股文Bakwaan_Buddy项目创空间部署

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向笔记 Task04 RAG模型 人话八股文Bakwaan_Buddy项目创空间部署 什么是RAG&#xff1a; 我能把这个过程理解为Kimi.ai每次都能列出的一大堆网页参考资料吗&#xff1f;Kimi学了这些资料以后&#xff0c;根据这里面的信息综…...

CTF密码学小结

感觉没啥好总结的啊 基础的永远是RSA、流密码、哈希、对称密码、古典密码那一套&#xff08;密码学上过课都会&#xff09;&#xff0c;其他的就是数论的一些技巧 似乎格密码也很流行&#xff0c;以及一些奇奇怪怪的性质利用也很多 1、random设置种子后随机的性质&#xff1a…...

Vue快速入门(七)——Vue3 状态管理 - Pinia(二)

目录 六、核心概念——Getter 1、基本操作 定义getter 访问getter 2、访问其他 getter 3、向 getter 传递参数 4、访问其他 store 的 getter 使用 setup() 时的用法 使用选项式 API 的用法 使用 setup() 不使用 setup() 七、核心概念——Action 1、基本操作 定义a…...

ZooKeeper集群环境部署

1. ZooKeeper安装部署 1.1 系统要求 1.1.1 支持的平台 ZooKeeper 由多个组件组成。一些组件得到广泛支持&#xff0c;而另一些组件仅在较小的一组平台上得到支持。 客户端是 Java 客户端库&#xff0c;由应用程序用于连接到 ZooKeeper 集群。 服务器是在 ZooKeeper 集群节点…...

10 个 C# 关键字和功能

在 Stack Overflow 调查中&#xff0c;C# 语言是排名第 5 位的编程语言。它广泛用于创建各种应用程序&#xff0c;范围从桌面到移动设备再到云原生。由于有如此多的语言关键字和功能&#xff0c;对于开发人员来说&#xff0c;要跟上新功能发布的最新信息将是一项艰巨的任务。本…...

贪心算法之重叠区间问题

以下四个题都是重叠区间问题 452. 用最少数量的箭引爆气球 为了让气球尽可能重叠&#xff0c;先按照气球起始位置由大到小排序tips&#xff1a;sort默认就可以实现以上排序&#xff0c;不需要写cmp重点&#xff1a;当下一个气球的左边界不小于上一个气球的右边界时(即有重叠的…...

Python爬虫入门教程(非常详细)适合零基础小白

一、什么是爬虫&#xff1f; 1.简单介绍爬虫 爬虫的全称为网络爬虫&#xff0c;简称爬虫&#xff0c;别名有网络机器人&#xff0c;网络蜘蛛等等。 网络爬虫是一种自动获取网页内容的程序&#xff0c;为搜索引擎提供了重要的数据支撑。搜索引擎通过网络爬虫技术&#xff0c;将…...

ArcGIS Pro基础:软件的常用设置:中文语言、自动保存、默认底图

上图所示&#xff0c;在【选项】&#xff08;Options&#xff09;里找到【语言】设置&#xff0c;将语言切换为中文选项&#xff0c;记得在安装软件时&#xff0c;需要提前安装好ArcGIS语言包。 上图所示&#xff0c;在【选项】里找到【编辑】设置&#xff0c;可以更改软件默认…...

依赖注入+中央事件总线:Vue 3组件通信新玩法

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vue篇专栏内容:Vue-依赖注入-中央事件总线 目录 中央事件总线使用 依赖注入使用 总结 中央事件总线 依赖注入…...

EasyCVR视频汇聚平台构建远程安防监控:5大亮点解析,助力安防无死角

随着科技的飞速发展&#xff0c;远程安防监控系统已经成为现代社会中不可或缺的一部分&#xff0c;无论是在小区、公共场所还是工业领域&#xff0c;安防监控都发挥着至关重要的作用。而EasyCVR作为一款功能强大的视频监控综合管理平台&#xff0c;其在构建远程安防监控系统方面…...

fastadmin安装插件报500的错误

项目场景&#xff1a; 项目新建后&#xff0c;想在本地项目中安装相关的插件&#xff0c;但是在插件管理页面点击安装的时候一直报500的错误。 问题描述 我们将项目中的调试打开&#xff0c;在application/config.php里修改 app_debug&#xff0c;将false改为true&#xff0c…...

速盾:为什么需要服务器和cdn?

在互联网时代&#xff0c;服务器和CDN&#xff08;内容分发网络&#xff09;起着非常重要的作用。它们是实现高效、稳定和可靠网络服务的关键组成部分。下面我将详细阐述为什么需要服务器和CDN。 首先&#xff0c;服务器是互联网上存储、处理和传输数据的中心枢纽。当我们在浏…...

十四、模拟实现 list 类

Ⅰ . list 基本框架的实现 01 结点的建立 为了实现链表&#xff0c;我们首先要做的应该是建立结点 为了和真正的 list 进行区分&#xff0c;我们仍然在自己的命名空间内实现 代码实现&#xff1a; namespace yxt {// 建立结点template<class T>struct ListNode{T _d…...

JavaScript简介之引入方式

JavaScript 引入方式 提问&#xff1a;CSS的引入方式&#xff1f;在学习 JavaScript 语法之前&#xff0c;我们首先要知道在哪里写 JavaScript 才行。想要在 HTML 中引入 JavaScript&#xff0c;一般有 3 种方式。 外部 JavaScript 内部 JavaScript 元素事件 JavaScript&#…...

同一台电脑上安装不同版本的nodejs(搭配VSCode)

今天拉取了一个前后端分离的项目&#xff0c;运行前端的时候&#xff0c;出现node版本不匹配的情况。 本文章将从安装node.js开始到VSCode使用进行讲解 1、去官网下载node版本 以16版本为例&#xff0c;需要哪个版本&#xff0c;就在网址上把版本号替换即可 https://nodejs.o…...

python小游戏之摇骰子猜大小

最近学习Python的随机数&#xff0c;逻辑判断&#xff0c;循环的用法&#xff0c;就想找一些练习题&#xff0c;比如小游戏猜大小&#xff0c;程序思路如下&#xff1a; 附上源代码如下&#xff1a; 摇骰子的函数&#xff0c;这个函数其实并不需要传任何参数&#xff0c;调用后…...

C++入门——12继承

1.继承 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的层次结构&#xff0c;体现了由简…...