智能大棚监控系统

摘要:本文讲述如何实现一个智能农业大棚系统,该系统需要采集光照强度、二氧化碳浓度、温湿度等等各类参数,且可以通过微信小程序查看各类传感器采集的数据,并可通过小程序控制水泵、排气扇和光照灯营造适合农作物生长的环境。

一、本系统主要用到的元器件:

STC12C5A60S2单片机

ESP8266-01S

DHT11温湿度传感器

SGP30二氧化碳传感器

BH1750光照强度传感器

土壤温湿度传感器

OLED显示模块

蜂鸣器

AMS1117降压芯片

三极管

电阻、电容等

二、本系统的实现流程

1、传感器的数据采集

传感器是本系统的重要组成之一,传感器的数据采集关乎着整个系统运转。通过传感器,我们可以获取大棚内部的二氧化碳浓度、光照强度、温湿度、土壤湿度等数据参数,通过分析获得的数据参数有利于我们对大棚的实时管理。

比如土壤湿度传感器,其是一种常用的农业传感器,用于检测土壤中的水分含量。其工作原理基于土壤中水分对电阻的影响。当土壤中含有水分时,电阻会相应地发生变化,从而可以通过测量电阻来确定土壤的湿度。但是土壤湿度传感器的一边检测到的结果为模拟量,本文用到的主控模块为STC12C5A60S2单片机,该单片机自带ADC转换器,可以将土壤湿度传感器采集的模拟量转换成数据量。

2、微信小程序设计

在本系统中,我们选用微信小程序作为整个系统的上位机,可以将采集到的数据更好的展现给用户,可供用户随时随地查看大棚内部的环境参数。因此本节主要讲解如何实现微信小程序的UI界面设计和微信小程序与巴法云平台的交互。

微信小程序的UI界面设计,主要为小程序界面设置、显示字体的样式和大小设置、获取数据的显示位置和背景图的设计等。下面是本系统的UI界面展示:

        

微信小程序与巴法云交互需要的条件有:巴法云控制台的用户秘钥(详见巴法云用户手册)、连接巴法云提供的服务器(详见巴法云用户手册)、与之交互的执行函数等等。

3、自动化控制实现

除了上述两点,实现自动化控制也是本系统的重点,本系统有三个执行模块,分别为光照灯、水泵和排气扇。这三个模块可通过微信小程序发送指令进行控制,亦可通过判断大棚内部环境是否符合设置的范围内启动调节。

总的来说,本系统的实现流程可以概括为:传感器采集数据,将数据发送到微信小程序中进行显示和控制,根据预设条件自动化地控制大棚内部的设备,实现对大棚内部环境的实时监控和控制。

主控模块的部分代码:

#include "STC12C5A60S2.H"
#include "delay.h"
#include "dht11.h"
#include "sgp30.h"
#include "bh1750.h"
#include "oled.h"
#include "init.h"
#include "uart.h"
#include "main.h"
#include "string.h"
#include "soil.h"
#include "alarm.h"

uchar flag;
uchar s_flag;

uchar dis_data;


void main()
{		
		beep = 0;
		timer0Init(); //定时器初始化
		Uart_Init();  //串口初始化
		CO2_Init();	  //SGP30模块初始化
		OLED_Init();//OLED初始化
		OLED_Clear();//清屏
		OLED_show();	//显示
		esp8266_connect();	//发送指令连接手机热点,同时订阅巴法云主题
		while(1)
		{
						SendOutDH11Str();//读取dht11的值
						CO2_get();//读取CO2的值						
						dis_data_get();//获取光照强度的值
						soil_get();//读取土壤湿度的值
						All_oled_show();//显示数据
						judge();
						esp8266_send();//WiFi上传数据函数
		
			if(s_flag == 1)
			{
				  prints("cmd=0&msg=ping"); //发送心跳
					s_flag = 0;
			}						
		}
}


//连接巴法云
void esp8266_connect()
{
	/*模块作为服务器,模块设置为server模式,手机连接模块*/
	prints("AT+CWJAP=\"HONOR\",\"12345678\"\r\n");  
	delay_ms(6000);
	delay_ms(2000);	
	prints("AT+CIPMODE=1\r\n"); //进入透传模式
	delay_ms(200);	
	prints("AT+CIPSTART=\"TCP\",\"bemfa.com\",8344\r\n"); //连接巴法云的服务器
	delay_ms(200);
	prints("AT+CIPSEND\r\n"); //开始透传
	delay_ms(200);
	prints("cmd=1&uid=xxxxx&topic=led\r\n"); //订阅巴法云的主题	
	delay_ms(200);
	prints("cmd=1&uid=xxxxx&topic=fan\r\n"); 	
	delay_ms(200);
	prints("cmd=1&uid=xxxxx&topic=pump\r\n"); 	
	delay_ms(200);
	prints("cmd=1&uid=xxxxx&topic=test\r\n"); 	
	delay_ms(200);
}

//通过esp8266上传数据
void esp8266_send()
{
	    prints("cmd=2&uid=xxxxx&topic=test&msg=#");
		PutNum(RH);//发送湿度数据
		putchar('#');
	    PutNum(TH);//发送温度数据
		putchar('#');
		PutNum(CO2);//发送二氧化碳浓度数据
		putchar('#');
		PutNum(dis_data);//发送光照强度数据
		putchar('#');
		PutNum(resl);//发送土壤湿度数据
		prints("\r\n");
		delay_ms(2000);
}

//显示函数
void All_oled_show()
{
		OLED_ShowNum(40,0,TH/10, 1, 16);
		OLED_ShowNum(50,0,TH%10, 1, 16);
	
		OLED_ShowNum(110,0,(RH)/10, 1, 16);
		OLED_ShowNum(120,0,(RH)%10, 1, 16);
	
	    OLED_ShowNum(40,2,dis_data/1000, 1, 16);
		OLED_ShowNum(50,2,dis_data/100, 1, 16);
		OLED_ShowNum(60,2,dis_data/10, 1, 16);
		OLED_ShowNum(70,2,dis_data%10, 1, 16);
	
		OLED_ShowNum(40,4,resl/10, 1, 16);
		OLED_ShowNum(50,4,resl%10, 1, 16);
 	
	    OLED_ShowNum(40,6,CO2/1000, 1, 16);
	    OLED_ShowNum(50,6,CO2/100, 1, 16);
	    OLED_ShowNum(60,6,CO2/10, 1, 16);
		OLED_ShowNum(70,6,CO2%10, 1, 16);

}

 微信小程序的部分代码:

data: {

    //需要修改的地方
    uid:"xxxxxxx",//用户密钥,巴法云控制台获取
    ledtopic:"led",//控制led的主题,创客云控制台创建
    dhttopic:"test",//传输温湿度的主题,创客云控制台创建
    fantopic:"fan",//控制风扇的主题
    pumptopic:"pump",//控制水泵的主题
    dataTime:"", //记录数据上传的时间
    wendu:"",//温度值,默认为空
    shidu:"",//湿度值,默认为空
    co2  :"",//二氧化碳浓度
    guangzhao:"",//光照强度
    tudi:"",//土壤湿度
    client: null,//mqtt客户端,默认为空
    adcode:'',
    city:'',//城市
    humidity:'',//湿度
    province:'',//省份
    reporttime:'',//发布时间
    temperature:'',//实时温度 
    weather:'',//天气
    winddirection:'',//风向
    windpower:'',//风力
  },

仅供参考,有不正之处勿喷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值