提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
毕业设计:基于STM32+ESP8266的厨房预警系统
前言
提示:这里可以添加本文要记录的大概内容:
随着当今社会家庭式安全事故的频繁发生,以此为背景设计了一款家庭式火灾预警设备,主要交互采用32+ESP8266与服务器交互的手段来进行实现。
提示:以下是本篇文章正文内容,下面案例可供参考
一、设计大纲
1:系统整体设计思路
1.1:硬件设计思路
1.2:嵌入式软件设计思路
1.3:上位机软件设计思路
2:硬件部分
3:嵌入式软件部分
4:上位机软件部分
总结
一、设计大纲
1:系统整体设计思路
主控制器开始工作后,所控外设开始采集环境数据,无线网络模块也开始工作,将主控制器处理的数据上传至服务器,在上位机软件中通过调用相应语句将实际数据进行提取解析,根据所编写的逻辑程序进行命令执行。
1.1:硬件设计思路
系统上电后,主控制器工作,此时温湿度传感器和气体传感器开始采集环境数据,并将数据传输给主控制器进行处理。同时,无线网络模块也开始工作,将主控制器处理的数据上传至服务器。系统硬件结构包括STM32控制器、传感器、无线网模块、声光报警、执行器和显示模块,共同组成了整个系统。系统硬件构成如下图“图所示。

1.2:嵌入式软件设计思路
本次嵌入式系统的软件设计,主要从嵌入式软件外设的初始化进行介绍其中温湿度检测、气体浓度检测、MQTT服务器订阅、声光报警、时间计时等方面的嵌入式软件功能会着重说明,从中分析本次设计的基础逻辑和功能实现。本次系统总体框架按照当下主流的自主物联网开发框架结构设计,因此此次系统实际设计中主要从三个层面来进行划分:数据层、网络层、用户层。系统的总体框架示意图如“下图所示”。通过数据层、网络层和用户层三层间的交互来完成整体控系统的设计。
1.3:上位机软件设计思路
本章结合系统嵌入式软件设计内容,主要对用户层程序进行分析,其中主要从上位微信小程序的模板结构、风格样式、行为逻辑进行分析。实际使用中遵循嵌入式软件所要实现的功能进行实际分析做出相应的逻辑操作页面,以应对在实际使用中上位机软件的适配性。

2:硬件部分
硬件设计时主要用到了STM32控制器、AHT20温湿度传感器、ESP8266网络模块、LED报警、风扇和OLED模块,功能底板共同组成了整个系统。(在实际使用中可以根据自身的学习程度绘制集成化的板子,可以不再受限于模块插接的方式来进行实现)功能底板如下:

实物如下:

3:嵌入式软件部分
本章对=系统整体软件功能进行了分析,将每个功能模块的嵌入式软件进行了分析,其中主要包括了传感器数据的采集和无线数据传输程序,良好的编程思路可以使整个系统运行更加可靠,迅速。该部分软件采用Keil进行设计。下代码块是主程序部分部分代码:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "ds1302.h"
#include "Printf.h"
#include "oled.h"
#include "AHT.h"
#include "MQ.h"
#include "Key.h"
#include "RGB.h"
#include "esp8266.h"
#include "onenet.h"
#include "MqttKit.h"
extern u8 final;
u16 speed = 500;
u8 ft;
u8 Flag;
char Pub_Buff[256];//上传数据的存储数组
const char *devSubTopics[] = {"/iot/1938/chufangsub"}; //需要改动,需要订阅提前设置好的TOPICS
const char devPubTopics[] = {"/iot/1938/chufangpub"};
float Temp = 0;
float Wetness = 0;
int gas = 0;
int main(void)
{
unsigned short timeCount = 0; //发送间隔变量
unsigned char *dataPtr = NULL;
RCC_DeInit();
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
delay_init(); //延时函数初始化
Usart1_Init(115200);
printf("Usart1 init OK\r\n"); //串口初始化
Usart2_Init(115200);
printf("Usart2 init OK\r\n"); //串口初始化
ESP8266_Init();
printf("ESP8266 init OK\r\n");
ADC_Configuration();
printf("MQ-2 init OK\r\n");
ds1302_gpio_init();
printf("DS1302 init OK\r\n");
OLED_Init();
printf("OLED init OK\r\n");
AHT20_GPIO_Init();
printf("AHT20 init OK\r\n");
KEY_Init();
RGB_Init();
printf("RGB init OK\r\n");
OLED_Clear();
while(OneNet_DevLink()) //接入OneNET
delay_ms(500);
printf("接入OneNET成功");
OneNet_Subscribe(devSubTopics, 1);//订阅设置上的数据上行Topic
while(1)
{
if(timeCount % 2== 0)
{
AHT20_Wokr();
ADC_Trans();
ds1032_read_realTime();
printf("%d\r\n",gas);//把AD值转换成百分比0~99
printf("temp:%f,Hum:%f", Temp,Wetness);
}
OLED_time_dispaly();
OLED_AHT20_display();
oled_Noxiousgas();
// Set_n();
if(++timeCount >= 8)
{
UsartPrintf(USART_DEBUG, "OneNet_Publish\r\n");
sprintf(Pub_Buff, "{\"Temp\":%.1f,\"Hum\":%.1f,\"gas\":%d}", Temp, Wetness, gas);//发送相应的数据
OneNet_Publish("/iot/1938/chufangpub", Pub_Buff);//订阅的上传消息的topic,发送的消息
timeCount = 0;
ESP8266_Clear();
}
dataPtr = ESP8266_GetIPD(3);//15ms获取平台返回的数据
if(dataPtr != NULL)
OneNet_RevPro(dataPtr);
delay_ms(10);
}
}
4:上位机软件部分
上位机使用微信小程序开发者工具进行开发,实际使用中涉及到网络传输等问题,下面是网络连接的部分代码可供参考:
connectmqtt:function(e){
// 网络连接
var that = this
const options={
connectTimeout:4000,
clientId:'lhj'+Math.ceil(Math.random()*10),
port:8084,
username:'c4775c60ebb6f4f6eff6b21659bbecf4',
password:'189466330'
}
client = mqtt.connect('wxs://t.yoyolife.fun/mqtt',options)
client.on('connect',(e)=>{
console.log('连接成功')
client.subscribe('/iot/1938/chufangpub' , { qos: 0 }, function (err){
if (!err) {
// client.publish('123', 'Hello mqtt')
console.log("订阅成功")
}
})
})
// 信息监听事件
client.on('message',function(topic,message){
let tem={}
tem = JSON.parse(message)
that.setData({
temp:tem.Temp,
hum:tem.Hum,
gas:tem.gas
})
console.log(tem)
console.log('收到'+message.toString())
})
client.on('reconnect',function(error){
console.log('重连')
})
client.on('error',function(error){
console.log('失败')
})
本次设计仅供参考,在设计中出现类似的问题可以向我提问,除此也可以访问以下链接去向此人进行提问。点击跳转

5458

被折叠的 条评论
为什么被折叠?



