网站推荐男生正能量2021/seo推广一个月见效

网站推荐男生正能量2021,seo推广一个月见效,网站公司介绍模板,自建网站的优缺点目录 项目概述 实物图 演示视频 概述 硬件模块 原理图以及PCB 0.96寸OLED屏幕(SSD1306) CubeMX配置 初始化代码 MQ-2烟雾传感器 CubeMX配置 初始化代码 DHT11温湿度模块 驱动代码 HC-05蓝牙模块 CubeMX配置 ​编辑 空闲中断回调函数 有…

目录

项目概述

实物图

演示视频

概述

硬件模块

原理图以及PCB

 0.96寸OLED屏幕(SSD1306)

CubeMX配置

初始化代码

MQ-2烟雾传感器

CubeMX配置

初始化代码

DHT11温湿度模块

驱动代码

HC-05蓝牙模块

CubeMX配置

​编辑

空闲中断回调函数

有源蜂鸣器和TB6612电机驱动模块

CubeMX配置

核心代码

使用AI2Offline制作蓝牙APP

UI界面设计

逻辑界面设计


项目概述

实物图

演示视频

概述

        主控为stm32f103c8t6。使用DHT11温湿度传感器和MQ-2烟雾传感器,读取并实时刷新在0.96寸OLED屏幕上,同时通过蓝牙模块HC-05使用串口通信将数据上传到上位机(自制蓝牙APP)。可手动控制蜂鸣器以及电机作为报警器和风扇;在自动预警模式下,监测到温度高出设定的阈值后打开风扇降温;当监测到烟雾浓度高出设定阈值后将关闭风扇防止火情蔓延,并开启蜂鸣器报警,上位机同步更新报警状态。


硬件模块

stm32f103c8t6最小系统板0.96寸OLED屏幕
MQ-2烟雾传感器(5V)DHT11温湿度传感器
有源蜂鸣器HC-05蓝牙模块(5V)

TB6612电机驱动模块(5V)

直流电机(5V)
面包板

排母若干


原理图以及PCB

原理图:

PCB:


 0.96寸OLED屏幕(SSD1306)

        见我上传的资源:OLED驱动代码,设置成免费下载了。

CubeMX配置

        勾选I2C1,设置为快速模式即可。

初始化代码

//oled初始化
HAL_Delay(20);
//屏幕启动比stm32要慢,上电延时20ms
OLED_Init();

MQ-2烟雾传感器

        使用ADC的连续转换模式,可参考这篇博客:HAL库教程。

CubeMX配置

        记得配置Continuous Conversion ModeEnabled,这样就开启了ADC的连续转换模式。

初始化代码

//烟雾传感器初始化
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);

DHT11温湿度模块

        由于该模块是单数据线,需要在代码里不断改变引脚状态,因此不需要在CubeMX里配置,我这里用的是PA2引脚。

驱动代码

dht11.c:

#include "dht11.h"uint8_t datas[5];//空气温湿度数据void delay_us(uint16_t cnt)
{uint8_t i;while(cnt){for (i = 0; i < 10; i++){}	cnt--;}
}void DHT_GPIO_Init(uint32_t Mode)
{GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_2;GPIO_InitStruct.Mode = Mode;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}void DHT11_Start(void)
{DHT_GPIO_Init(GPIO_MODE_OUTPUT_PP);DHT_HIGHT;DHT_LOW;HAL_Delay(30);DHT_HIGHT;DHT_GPIO_Init(GPIO_MODE_INPUT);while(DHT_VALUE);while(!DHT_VALUE);while(DHT_VALUE);
}void Read_Data_From_DHT(void)
{int i;//轮int j;//每一轮读多少次char tmp;char flag;DHT11_Start();DHT_GPIO_Init(GPIO_MODE_INPUT);for(i= 0;i < 5;i++){for(j=0;j<8;j++){while(!DHT_VALUE);//等待卡g点delay_us(40);if(DHT_VALUE == 1){flag = 1;while(DHT_VALUE);}else{flag = 0;}tmp = tmp << 1;tmp |= flag;}datas[i] = tmp;}
}

dht11.h:

#ifndef __DHT11_H__
#define __DHT11_H__#include "main.h"#define DHT_HIGHT HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET)
#define DHT_LOW HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET)
#define DHT_VALUE HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)extern uint8_t datas[5];void Read_Data_From_DHT(void);#endif

        后续直接调用Read_Data_From_DHT函数读取数据就好了,数据会存放在datas数组里:datas[0]是湿度的整数数据、datas[1]是湿度的小数数据、datas[2]是温度的整数数据、datas[3]是温度的小数数据、datas[5]是校验数据。


HC-05蓝牙模块

        使用串口收发数据,借助蓝牙APP,可以把这个模块当作平常用的CH340模块来用。

CubeMX配置

        使用串口1收发数据,波特率为115200,由于我们需要接收不定长数据,因此还要用到串口空闲中断,不妨使用DMA模式下的空闲中断:

        点开DMA设置,为接收和发送都创建DMA通道(默认即可),并确保打开了串口中断:

空闲中断回调函数

//串口接收buffer
#define RX_BUF_SIZE 50
uint8_t receiveData[RX_BUF_SIZE] = "";void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{//每次进入回调函数之前判断是哪个串口触发的中断if(huart == &huart1){	HAL_UARTEx_ReceiveToIdle_DMA(&huart1, (uint8_t *)receiveData, sizeof(receiveData));__HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);}
}

有源蜂鸣器和TB6612电机驱动模块

        全部设置为推挽输出即可,不需要对电机进行调速。

CubeMX配置

        PA3为蜂鸣器引脚,PA4~6分别为TB6612的PWMA、AIN2、AIN1。电机驱动模块主要操作的是AIN2和AIN1引脚,要让电机旋转只需要随便拉低一个引脚即可,蜂鸣器也是低电平触发。


核心代码

/* 头文件包含 */
#include "main.h"        // HAL库主头文件
#include "adc.h"         // ADC驱动
#include "dma.h"         // DMA驱动
#include "i2c.h"         // I2C驱动(用于OLED)
#include "usart.h"       // 串口驱动
#include "gpio.h"        // GPIO驱动
#include "dht11.h"       // DHT11温湿度传感器驱动
#include "oled.h"        // OLED显示驱动
#include <stdio.h>       // 标准输入输出(用于printf)
#include <string.h>      // 字符串操作/* 系统状态宏定义 */
#define OFF 0            // 关闭状态
#define ON  1            // 开启状态/* 蜂鸣器控制宏 */
#define BUZZER_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET)  // PA3低电平触发蜂鸣器
#define BUZZER_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET)   // PA3高电平关闭蜂鸣器/* 全局变量声明 */
float smoke = 0.0;       // 烟雾浓度值(百分比)#define RX_BUF_SIZE 50   // 串口接收缓冲区大小
uint8_t receiveData[RX_BUF_SIZE] = ""; // 串口接收缓冲区// 设备状态标志
uint8_t Buzzer_State = OFF;    // 蜂鸣器状态
uint8_t Fan_State = OFF;       // 风扇状态
uint8_t Auto_Alarm_State = OFF;// 自动报警模式状态// 状态显示字符串(OLED用)
char State_String[2][5] = {"OFF", "ON"}; /* 自定义printf输出重定向 */
int fputc(int ch, FILE *f)
{      HAL_UART_Transmit(&huart1, (const uint8_t *)&ch, 1, HAL_MAX_DELAY);  return ch;
}/* 串口接收完成回调函数 */
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{char buffer[50] = "";memcpy(buffer, receiveData, sizeof(receiveData)); // 复制接收数据到临时缓冲区if(huart == &huart1){    buffer[Size] = '\0'; // 添加字符串终止符/* 自动报警模式控制 */if(strcmp(buffer, "Auto_On\r\n") == 0) {Auto_Alarm_State = ON;HAL_UART_Transmit_DMA(&huart1, (uint8_t *)buffer, Size);}else if(strcmp(buffer, "Auto_Off\r\n") == 0) {// 关闭所有输出设备HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 风扇IN1HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); // 风扇IN2BUZZER_OFF;// 更新状态标志Buzzer_State = OFF;Fan_State = OFF;Auto_Alarm_State = OFF;        // 返回确认信息printf("Buzzer_Off\r\nFan_Off\r\nAuto_Off\r\n");}/* 手动控制模式处理 */if(Auto_Alarm_State == OFF) {// 风扇控制if(strcmp(buffer, "Fan_On\r\n") == 0) {HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // IN1=0HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);   // IN2=1(正转)Fan_State = ON;HAL_UART_Transmit_DMA(&huart1, (uint8_t *)buffer, Size);}else if(strcmp(buffer, "Fan_Off\r\n") == 0) {HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);   // IN1=1HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);   // IN2=1(刹车)Fan_State = OFF;HAL_UART_Transmit_DMA(&huart1, (uint8_t *)buffer, Size);}// 蜂鸣器控制else if(strcmp(buffer, "Buzzer_On\r\n") == 0) {BUZZER_ON;Buzzer_State = ON;HAL_UART_Transmit_DMA(&huart1, (uint8_t *)buffer, Size);}else if(strcmp(buffer, "Buzzer_Off\r\n") == 0) {BUZZER_OFF;Buzzer_State = OFF;HAL_UART_Transmit_DMA(&huart1, (uint8_t *)buffer, Size);}}// 重新启动DMA接收HAL_UARTEx_ReceiveToIdle_DMA(&huart1, receiveData, sizeof(receiveData));__HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT); // 禁用传输过半中断}
}/* 自动报警处理函数 */
void Auto_Alarm(void)
{/* 烟雾浓度报警(阈值60%) */if(smoke > 60) {BUZZER_ON;if(Buzzer_State == OFF) { // 状态变更时上报Buzzer_State = ON;printf("Buzzer_On\r\n");}} else {BUZZER_OFF;if(Buzzer_State == ON) {Buzzer_State = OFF;printf("Buzzer_Off\r\n");}}/* 温度控制逻辑(阈值30℃) */if(datas[2] >= 30 && smoke < 60) { // 温度高且无烟雾危险时开启风扇HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // 正转HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);if(Fan_State == OFF) {printf("Fan_On\r\n");Fan_State = ON;}} else { // 关闭风扇HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);        if(Fan_State == ON) {printf("Fan_Off\r\n");Fan_State = OFF;}}
}/* 主函数 */
int main(void)
{// 硬件初始化HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_DMA_Init();MX_USART1_UART_Init();MX_I2C1_Init();MX_ADC1_Init();/* 外设初始化 */HAL_Delay(20); // 等待硬件稳定OLED_Init();   // OLED显示屏初始化// ADC校准和启动HAL_ADCEx_Calibration_Start(&hadc1);HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);// 启动串口DMA接收HAL_UARTEx_ReceiveToIdle_DMA(&huart1, receiveData, sizeof(receiveData));__HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);/* 主循环 */while (1){OLED_NewFrame(); // 准备新显示帧// 传感器数据读取Read_Data_From_DHT(); // 获取温湿度数据smoke = (HAL_ADC_GetValue(&hadc1) / 4095.0) * 100.0; // 计算烟雾浓度// 自动报警模式处理if(Auto_Alarm_State == ON) {Auto_Alarm();}/* OLED显示内容格式化 */char Tem_mes[10], Hum_mes[10], Smo_mes[10], Sta_mes[20], BlueTooth_mes[30];sprintf(Tem_mes, "Tem:%d.%d", datas[2], datas[3]);    // 温度显示sprintf(Hum_mes, "Hum:%d.%d%%", datas[0], datas[1]);  // 湿度显示sprintf(Smo_mes, "Smoke:%.1f%%", smoke);              // 烟雾浓度sprintf(Sta_mes, "A:%s B:%s F:%s",                   // 状态显示State_String[Auto_Alarm_State], State_String[Buzzer_State], State_String[Fan_State]);sprintf(BlueTooth_mes, "NULL;%d.%d;%d.%d;%.1f;NULL\r\n", // 蓝牙数据格式datas[2], datas[3], datas[0], datas[1], smoke);/* OLED显示更新 */OLED_PrintASCIIString(0, 0, Tem_mes, &afont16x8, OLED_COLOR_NORMAL);OLED_PrintString(65, 0, "℃", &font16x16, OLED_COLOR_NORMAL);OLED_PrintASCIIString(0, 17, Hum_mes, &afont16x8, OLED_COLOR_NORMAL);OLED_PrintASCIIString(0, 33, Smo_mes, &afont16x8, OLED_COLOR_NORMAL);OLED_PrintASCIIString(0, 49, Sta_mes, &afont12x6, OLED_COLOR_NORMAL);OLED_ShowFrame(); // 刷新显示/* 蓝牙数据传输 */HAL_UART_Transmit_DMA(&huart1, (uint8_t *)BlueTooth_mes, strlen(BlueTooth_mes));HAL_Delay(1000); // 主循环周期1秒}
}/* 注意事项:
1. GPIO分配:- PA3: 蜂鸣器控制- PA5/PA6: TB6612电机驱动控制引脚(IN1/IN2)- 确保实际硬件连接与代码一致2. 传感器数据格式:- datas数组来自DHT11驱动,索引:0: 湿度整数部分1: 湿度小数部分 2: 温度整数部分3: 温度小数部分3. 蓝牙数据协议:"NULL;温度;湿度;烟雾;NULL\r\n" 格式示例:"NULL;25.5;60.0;30.5;NULL\r\n"4. 改进建议:- 增加传感器数据校验- 添加看门狗防止死机- 使用RTOS进行任务管理- 添加EEPROM存储报警阈值
*/

使用AI2Offline制作蓝牙APP

UI界面设计

控件如下:

逻辑界面设计

蓝牙连接逻辑:

按键发送逻辑:

接收数据逻辑:


需要实物或者完整源码的可以私信我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/896907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux离线安装ollama并部署deepseek-r1模型 指南

这篇文章主要分为两部分&#xff1a; (1)离线环境下如何部署Ollama&#xff1b; (2)在离线环境下如何配置大模型&#xff0c;其中这一步又分为&#xff1a;  1)部署完整的deepseek大模型&#xff0c;如&#xff1a;deepseek-r1:32B;  2)部署蒸馏版模型&#xff0c;如&#xf…

坐标变换介绍与机器人九点标定的原理

【备注】本文的C#代码在下面链接中可以下载:Opencv的C#九点标定代码资源-CSDN文库 https://download.csdn.net/download/qq_34047402/90452336 一、坐标变换的介绍 1.绕原点旋转的坐标变换 一个点(x,y)绕原点旋转u度,其旋转后的坐标(x1,y1)如何计算? 2.绕任意点的坐标变…

FPGA学习(一)——DE2-115开发板编程入级

FPGA学习&#xff08;一&#xff09;——DE2-115开发板编程入级 一、实验目的 通过 1 位全加器的详细设计&#xff0c;深入掌握原理图输入以及 Verilog 的两种设计方法&#xff0c;熟悉 Quartus II 13.0 软件的使用流程&#xff0c;以及在 Intel DE2-115 开发板上的硬件测试过…

集成方案 | Docusign 能与哪些应用程序集成?

如何实现 Docusign 与多种系统平台之间的高效集成&#xff1f; 在企业跨境签约场景中&#xff0c;员工常常需要在电子签系统与办公应用&#xff08;如钉钉、企业微信&#xff09;、CRM、ERP 等系统之间来回切换&#xff0c;手动上传合同、下载签署文件并同步数据。这种繁琐的操…

广域互联网关键技术详解(GRE/LSTP/IPsec/NAT/SAC/SPR)

《广域互联网关键技术详解》属于博主的“广域网”专栏&#xff0c;若想成为HCIE&#xff0c;对于广域网相关的知识需要非常了解&#xff0c;更多关于广域网的内容博主会更新在“广域网”专栏里&#xff0c;请持续关注&#xff01; 一.前言 广域互联技术纷杂多样&#xff0c;不…

Docker 学习(三)——数据管理

容器中的管理数据主要有两种方式&#xff1a; 数据卷 &#xff08;Data Volumes&#xff09;&#xff1a; 容器内数据直接映射到本地主机环境&#xff1b; 数据 卷容器&#xff08; Data Volume Containers&#xff09;&#xff1a; 使用特定容器维护数据卷 1.数据卷 数据卷…

基于SSM+Vue+uniapp的考研交流(带商城)小程序+LW示例参考

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

2025-03-04 学习记录--C/C++-PTA 练习5-3 字符金字塔

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、解题步骤 ⭐️ 第1步、把字符和一个空格看作整体&#xff0c;即"G_"&#xff1b; 第2步、外…

DeepSeek集成到VScode工具,让编程更高效

DeepSeek与VScode的强强联合&#xff0c;为编程效率树立了新标杆。 DeepSeek&#xff0c;一款卓越的代码搜索引擎&#xff0c;以其精准的索引和高速的检索能力&#xff0c;助力开发者在浩瀚的代码海洋中迅速定位关键信息。 集成至VScode后&#xff0c;开发者无需离开熟悉的编辑…

前端-css(预编译器sass)

1.sass(scss->sass第三代) Sass3 -> Scss(Sassy CSS),SCSS(Sassy CSS) 是 CSS 语法的扩展. 2.scss注释 Sass 支持标准的 CSS 多行注释 /* */&#xff0c;以及单行注释 //&#xff0c;前者会 被完整输出到编译后的 CSS 文件中&#xff0c;而后者则不会 3.scss定义变量 …

【计算机网络入门】初学计算机网络(十一)重要

目录 1. CIDR无分类编址 1.1 CIDR的子网划分 1.1.1 定长子网划分 1.1.2 变长子网划分 2. 路由聚合 2.1 最长前缀匹配原则 3. 网络地址转换NAT 3.1 端口号 3.2 IP地址不够用&#xff1f; 3.3 公网IP和内网IP 3.4 NAT作用 4. ARP协议 4.1 如何利用IP地址找到MAC地址…

Android 获取jks的SHA1值:java.io.IOException: Invalid keystore format

命令生成 keytool -list -v -keystore 全路径.jks -alias 别名 -storepass 密码 -keypass 密码 1、遇到 的问题&#xff1a; 通过快捷键 ‘win r’ 启动的小黑框运行上面的命令会出现下面这个错误keytool 错误: java.io.IOException: Invalid keystore format 2、解决问题 …

LLM 对话框组件 | 字节青训营前端开发项目

系统介绍 LLM对话框项目系统介绍 一、项目概述 选题背景随着人工智能技术的飞速发展,自然语言处理(NLP)领域取得了显著进展,其中对话系统(Dialog System)作为NLP的重要应用方向,正逐渐渗透到人们的日常生活中。从智能客服到语音助手,从智能家居到在线教育,对话系统以…

k8s命名空间和资源配额

在现代的云计算环境中&#xff0c;容器化技术已成为主流。而 Kubernetes&#xff08;简称 k8s&#xff09;作为一项开源的容器编排系统&#xff0c;广泛应用于各类场景。本文将详细介绍关于 k8s 中的命名空间和资源配额&#xff0c;帮助你更好地理解和管理你的集群资源。 k8s …

AI赋能企业协作4-NL2Sql技术路线

1.1 对话即服务的一点思考 在数智化转型的过程中&#xff0c;基于即时通信&#xff08;IM&#xff09;的协作平台正悄然成为企业智能化转型的“新基建”。协作平台天然具备高频交互、实时协同和场景化落地的特性&#xff0c;仿佛是为对话式AI量身定制的试验场——员工在熟悉的聊…

批量提取 Word 文档中的页面

如何将 Word 文档中的页面提取出来形成一个新的文档呢&#xff1f;比如将 Word 文档中的第一页提取出来、将 Word 文档中的最后一页提取出来、再或者将 Word 文档中的中间几页提取出来等等。人工的处理肯定非常的麻烦&#xff0c;需要新建 Word 文档&#xff0c;然后将内容复制…

Sqlserver安全篇之_启用TLS即配置SQL Server 数据库引擎以加密连接

官方文档 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/configure-sql-server-encryption?viewsql-server-ver16 https://learn.microsoft.com/zh-cn/sql/database-engine/configure-windows/manage-certificates?viewsql-server-ver15&pre…

多镜头视频生成、机器人抓取、扩散模型个性化 | Big Model weekly第58期

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 01 GLM-4-Voice: Towards Intelligent and Human-Like End-to-End Spoken Chatbot 本文介绍了一种名为GLM-4-Voice的智能且类人化的端到端语音聊天机器人。它支持中文和英文&#xff0c;能够进行实时语音对话&a…

MOM成功实施分享(七)电力电容制造MOM工艺分析与解决方案(第一部分)

声明&#xff1a;文章仅用于交流学习&#xff0c;不用于商业项目实施&#xff0c;图片来源于网络&#xff0c;如有侵犯权利&#xff0c;请联系作者及时删除。 本方案旨在对电力电容&#xff08;PEC和PQM型号&#xff09;制造工艺深度分析&#xff0c;结合管理要求设计MOM相关功…

JavaWeb后端基础(3)

原打算把Mysql操作数据库的一些知识写进去&#xff0c;但是感觉没必要&#xff0c;要是现在会的都是简单的增删改查&#xff0c;所以&#xff0c;这一篇&#xff0c;我直接从java操作数据库开始写&#xff0c;所以这一篇大致就是记一下JDBC、MyBatis、以及SpringBoot的配置文件…