我是靠谱客的博主 爱笑皮卡丘,最近开发中收集的这篇文章主要介绍0343基于STM32单片机的茶园大棚环境土壤湿度光强WiFi监测系统proteus仿真原理图PCB,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
功能介绍:
0.本系统采用STM32F103RCT6作为单片机
1.采用的LCD1602液晶实时显示当前光强土壤湿度等参数信息
2.当土壤湿度超过设定的阈值,蜂鸣器报警,同时控制水泵工作状态
3.按键可更改环境参数的阈值
4.通过WiFi模块可以和手机端进行数据通信
5.温度传感器和光强传感器均采用高精度数字类传感器
原理图:
PCB:
主程序:
#define __MIAN_C
#include "main.h"
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "bsp_gpio.h"
#include "bsp_clkconfig.h"
#include "bsp_delay.h"
#include "bsp_lcd1602.h"
#include "bsp_key.h"
#include "bsp_GeneralTim.h"
#include "bsp_adc.h"
#include "bsp_18b20.h"
#include "bsp_bh1750.h"
#include "bsp_usart.h"
// 局部变量,用于保存转换计算后的电压值
CreatByte Flag;
enum _MODE_DF_ dispMode;
char dis[16];
char dis1[16];
u32 humidity = 0;
volatile uint16_t hmMin= 25;
volatile uint16_t hmMax= 35;
uint16_t tempBuf = 0;
volatile uint16_t tempMin = 25;
volatile uint16_t tempMax = 40;
float f_temp = 0;
int lightBuf;
float f_light;
volatile uint16_t lightMin = 30;
volatile uint16_t lightMax = 1000;
u8 volatile setIndex = 0;
int main(void)
{
// 使用HSI,SYSCLK = 4M * RCC_PLLMul_x, x:[2,3,...16],最高是64MH
HSI_SetSysClock(RCC_PLLMul_2); //使用内部8MHz晶振,并设置PLL输出为8MHz
// 端口初始化
GPIO_Config();
GENERAL_TIM_Init();
USART_Config();
DelayMs(1000);
printf("AT+CIPMUX=1rn"); //打开多连接
DelayMs(1000);
printf("AT+CIPSERVER=1,8080rn"); //建立服务 端口号为8080
DelayMs(1000);
Key_GPIO_Config();
DelayMs(200);
DS18B20_GPIO_Init();
BH1750_GPIO_Init();
Init_BH1750();
LCD_GPIO_Init();
LCD_Init();
LCD_Clear();
DelayMs(200);
ADCx_Init();
while (1)
{
if (refreshFlag == 1)
{
refreshFlag = 0;
RefreshData();
if (humidity <= hmMax && humidity >= hmMin
&& f_temp <= tempMax && f_temp >= tempMin
&& f_light <= lightMax && f_light >= lightMin) //在范围内
{
BUZZER_OFF;
}
else
{
BUZZER_ON;
}
if (humidity < hmMin) //土壤湿度低时,开启水泵
{
RELAY_ON;
}
else
{
RELAY_OFF;
}
if (dispMode == NORMAL)
{
DispNormal();
}
}
if (sendFlag == 1)
{
sendFlag = 0;
TIM_ITConfig(GENERAL_TIM2, TIM_IT_Update, DISABLE);
SendData();
TIM_ITConfig(GENERAL_TIM2, TIM_IT_Update, ENABLE);
}
KeyProcess();
}
}
void RefreshData(void)
{
u8 i;
for (i = 0; i < 20; i++)
{
humidity = humidity + ADC_ConvertedValue[i];
}
humidity = humidity / 20; //取20次平均
humidity = 100 - humidity * 100 / 4096; //读取土壤湿度信息
DS18B20_GetTemp(&tempBuf); //采集温度
f_temp = tempBuf * 0.0625; //温度转换
Single_Write_BH1750(0x01); // power on
Single_Write_BH1750(0x10); // H- resolution mode
Multiple_Read_BH1750(); //连续读出数据,存储在BUF中
lightBuf=BUF[0];
lightBuf=(lightBuf<<8)+BUF[1];//合成数据,即光照数据
f_light=(float)lightBuf/1.2; //计算光照数据
}
void SendData(void)
{
printf("AT+CIPSEND=0,34rn"); //发送32位数据
DelayMs(100);
printf("Hm:%2d%% T:%5.1f'CrnLight:%8.1flxrn", humidity, f_temp, f_light); //串口发送
DelayMs(100);
}
void DispNormal(void)
{
sprintf(dis, "Hm:%2d%% T:%5.1f", humidity, f_temp);
LCD_DispStr(0, 0, dis);
LCD_DispOneChar(14, 0, 0xdf);
LCD_DispOneChar(15, 0, 'C');
sprintf(dis, "Light:%8.1flx", f_light);
LCD_DispStr(0, 1, dis);
}
void DispSetHm(u8 setIndex)
{
LCD_DispStr(0, 0, " Set Humidity ");
sprintf(dis, " H:%2d%% L:%2d%% ", hmMax, hmMin);
LCD_DispStr(0, 1, dis);
switch (setIndex)
{
case 1: LCD_SetCursor(6, 1, 1); break;
case 2: LCD_SetCursor(12, 1, 1); break;
default:;
}
}
void DispSetTemp(u8 setIndex)
{
LCD_DispStr(0, 0, "Set Temperature ");
sprintf(dis, " H:%3d L:%3d ", tempMax, tempMin);
LCD_DispStr(0, 1, dis);
switch (setIndex)
{
case 1: LCD_SetCursor(7, 1, 1); break;
case 2: LCD_SetCursor(13, 1, 1); break;
default:;
}
}
void DispSetLight(u8 setIndex)
{
LCD_DispStr(0, 0, " Set LightLimit ");
sprintf(dis, "H:%5d L:%5d", lightMax, lightMin);
LCD_DispStr(0, 1, dis);
switch (setIndex)
{
case 1: LCD_SetCursor(6, 1, 1); break;
case 2: LCD_SetCursor(15, 1, 1); break;
default:;
}
}
/*********************************************END OF FILE**********************/
实物演示视频:
https://www.bilibili.com/video/BV1ou411r75L/
最后
以上就是爱笑皮卡丘为你收集整理的0343基于STM32单片机的茶园大棚环境土壤湿度光强WiFi监测系统proteus仿真原理图PCB的全部内容,希望文章能够帮你解决0343基于STM32单片机的茶园大棚环境土壤湿度光强WiFi监测系统proteus仿真原理图PCB所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复