基于STM32F103RC的OneNET云端智能家居环境控制系统

整体描述

项目基于STM32F103RC开发板,软件使用keil5实现系统程序开发,实现一套具有一定交互水平的云端智能家居环境控制系统,通过传感器采集温湿度、光照强度、环境分贝数据上传OneNET云端,实现用户友好的平台GUI并设计用户控制及自动控制功能。实现扩展包括分贝检测、web端控制下发,可视化界面等功能。

视频介绍链接:https://www.bilibili.com/video/BV1LL4y1P7wR
代码链接:https://download.csdn.net/download/S_igh_/85764326

设计内容

a) 测量温湿度和光照强度等家庭环境数据,并显示在OLED显示屏上;
b) 可实时监测相应温湿度、光照强度数据;
c) 通过wifi模块联网,将数据上传云端,实现计算机端显示;
d) 通过网络回传控制参数。
e) 实现光照、湿度自动控制
f) 实现光照、湿度WEB端控制

设计框图

visio设计框图

硬件采购

  1. STM32F103RCT6魔女开发板
  2. 正点原子ESP8266模块
  3. OLED串口显示屏
  4. BH1750FVI光强模块
  5. DHT11温湿度模块
  6. 雾化器模块
  7. LM386声音采集模块

主函数解释

//单片机头文件
#include "stm32f10x.h"

//网络协议层
#include "onenet.h"

//网络设备
#include "esp8266.h"

//硬件驱动
#include "delay.h"
#include "usart.h"
#include "bsp_BH1750.h"
#include "dht11.h"
#include "bsp_led.h"
#include "oled.h"
#include "i2c.h"
#include "adc.h"
#include "ws2812.h"
//C库
#include <string.h>
#include <math.h>
float light = 0.0;                // parameter saving intensity of light
float dB = 0.0;										// parameter saving db of voice
int t_h_sta = 0;									// dht11 work state
u8 humidityH;
u8 humidityL;
u8 temperatureH;
u8 temperatureL;
char OLEDBUF[20];
char PUBBUF[256];
/*
************************************************************
*	函数名称:	Hardware_Init
*
*	函数功能:	硬件初始化
*
*	入口参数:	无
*
*	返回参数:	无
*
*	说明:		初始化单片机功能以及外接设备
************************************************************
*/
void Hardware_Init(void)
{	
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);			//中断控制器分组设置

	Delay_Init();																				//systick初始化
	
	Usart1_Init(14400);					//串口1,打印信息用
	
	Usart2_Init(172800);				//串口2,驱动ESP8266用
	
	UsartPrintf(USART_DEBUG, " Hardware init Start\r\n");
	
	Led_Init();                                         // LED 初始化
	
	ADCx_Init();																					// ADC初始化

  BH1750_Init();                                      // BH1750模块初始化 
	
	OLED_Init();																				// OLED
	
	OLED_Clear(); 
	

	
	UsartPrintf(USART_DEBUG, " Hardware init OK\r\n");
	
}

/*
************************************************************
*	函数名称:	main
*
*	函数功能:	
*
*	入口参数:	无
*
*	返回参数:	0
*
*	说明:		
************************************************************
*/
u16 voice;
int main(void)
{
	
	const char *devSubTopic[] = {"Temp","Humi","Light"};
	
	unsigned short timeCount = 0;	//发送间隔变量
	
	unsigned char *dataPtr = NULL;
	
	Hardware_Init();				//初始化外围硬件
	OLED_Clear();
	sprintf(OLEDBUF,"WELCOME TO SIGH");
	OLED_ShowString(0,0,(u8*)OLEDBUF);
	sprintf(OLEDBUF,"ENVIRONMENT");
	OLED_ShowString(16,2,(u8*)OLEDBUF);
	sprintf(OLEDBUF,"PARAMATERS");
	OLED_ShowString(20,4,(u8*)OLEDBUF);
	sprintf(OLEDBUF,"CONTROL SYSTEM");
	OLED_ShowString(8,6,(u8*)OLEDBUF);
	
	DelayXms(5000);

	ESP8266_Init();					//初始化ESP8266

	DHT11_Init();
	
		Ws2812_Init();
	t_h_sta=DHT11_GetData(&humidityH,&temperatureH);  //judge work state of dht11	
	UsartPrintf(USART_DEBUG,"dht11 state:%d\r\n",t_h_sta);							//show dht11 work state		
	
	while(OneNet_DevLink())			//接入OneNET
		DelayXms(500);

	OneNet_Subscribe(devSubTopic, 3);
      
	while(1)
	{
		if(timeCount % 20 == 0)                                  // refresh delay 1200ms
		{
			OLED_Clear();
			LED_RED_TOGGLE;                                 // red led alternatively shining
			t_h_sta=DHT11_GetData(&humidityH,&temperatureH);  //judge work state of dht11
			dB = sqrt((float)(abs(voice-2048))/2048)*80+10;														// read data from LM386 ADC
			light = BH1750_GetData();                       // read data from BH1750
			UsartPrintf(USART_DEBUG,"BH1750 intensity:%4.1f\r\n", light);   // show light intensity
			UsartPrintf(USART_DEBUG,"LM386 intensity:%4.1f\r\n", dB);   // show light intensity
			UsartPrintf(USART_DEBUG,"dht11 state:%d\r\n",t_h_sta);							//show dht11 work state
			UsartPrintf(USART_DEBUG,"humidity %d.%d%\r\n",humidityH,humidityL);   // show humidity
			UsartPrintf(USART_DEBUG,"temperature %d.%d\r\n",temperatureH,temperatureL);   // show temperature
			
			//lighting oled up
			OLED_ShowString(8,0,(u8*)"ENV PARAMETERS");  
			sprintf(OLEDBUF,"voice:%4.1fdB",dB);
			OLED_ShowString(16,2,(u8*)OLEDBUF);
			sprintf(OLEDBUF,"ints:%4.1f lx",light);
			OLED_ShowString(16,4,(u8*)OLEDBUF); 
			sprintf(OLEDBUF,"tem:%d'C",temperatureH);
			OLED_ShowString(0,6,(u8*)OLEDBUF);  
			sprintf(OLEDBUF,";hum:%d%%",humidityH);
			OLED_ShowString(64,6,(u8*)OLEDBUF);  		
		}
		if(++timeCount >= 100)									//发送间隔5s(不准确,自己估算的)
		{
			if(t_h_sta==1&&humidityH < 60) HUMI_CTRL_ON;
			if(t_h_sta==1&&humidityH > 80) HUMI_CTRL_OFF;
			if(light < 30.0) LED_BLUE_ON;
			if(light > 100.0) LED_BLUE_OFF; 
			timeCount = 0;
			OneNet_SendData();									//发送数据
			ESP8266_Clear();
		}
		
		dataPtr = ESP8266_GetIPD(3);
		if(dataPtr != NULL)
			OneNet_RevPro(dataPtr);
		
		DelayXms(5);
	
	}

}

WEB端界面

WEB端界面设计
以下部分对WEB端接收数据方法及控制下发方法进行解释:
A. 在设备管理界面创建数据源,本项目包含三个数据源,分别为湿度数据、温度数据以及光照强度数据,以此数据源为基础创建数据源模板。
B. 在数据可视化界面创建可视化项目,此处无法绑定产品或设备,只需数据源绑定为对应设备的数据源即可。
C. 在界面设计中设计折线图,绑定数据源分别为湿度数据源模板、温度数据源模板以及光照强度数据源模板,设置私有滤波器,x轴设为数据解包中的AT,即时间节点,y轴设为数据解包中的value,即数据大小。
D. 在界面设计中设计旋钮接口,绑定数据源同上,滤波器配置中,需将数据调整为百分比情况,以数据阈值为封顶。故而当旋钮值达到100%的时候需要进行控制。
E. 在界面设计中设计开关按钮和命令下发框,绑定数据源同上,命令机构设置为键值对的CJSON格式,基本格式如下:{“LED_SW”:,“HUMI_SW”:}

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S_igh_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值