智慧灌溉平台

1.知识百科

  智慧灌溉是运用物联网、云计算、大数据等新一代信息技术,结合农业生产的实际需求,通过传感器采集土壤温湿度、光照强度等信息,利用无线传感网络传输到中央控制系统进行智能控制。智慧灌溉系统由传感器(水位传感器)、无线通信模块(GPRS/CDMA/WLAN/蓝牙)和计算机组成;在农业生产中,通过自动感知环境信息(温度、湿度),实时监控作物生长状况并做出判断和决策。

智慧灌溉

2.开发环境

  本次智慧灌溉平台包含有硬件和软件两部分。其中硬件部分有 基于STM32的主控制器,USB接口水泵、稻田模型、水位监测传感器,硬件配置如下所所示:

  • 主控制器
    主控制器
  • 稻田模型
      稻田模型中添加了水位监测传感器设备。
    在这里插入图片描述
  • 水泵
    在这里插入图片描述
  • 应用APP
    在这里插入图片描述

3.硬件设计

在这里插入图片描述

4.软件设计

  本次硬件主控MCU选择的是ST公司的基于Cortex-M3架构的STM32F103C8T6,供电部分是12V转5V,采用MP2359实现,5V转3.3V则采用AMS1117-3.3实现。软件设计通过HAL库+KEIL软件。

主控MCU: STM32F103C8T6
通信设备: ESP8266WIFI
传感器设备: 水位检测传感器
水泵: USB接口3W水泵
其他: RGB工作状态指示、串口调试接口、ST_Link下载口

4.1 ESP8266WIFI驱动

  ESP8266系列无线模块是一个经济高效的WIFI SOC模块,支持标准IEEE802.11b/g/n协议,内置完整的TCP/IP协议栈。 用户可以使用此系列模块向现有设备添加网络功能,也可以构建独立的网络控制器。

  • 支持STA、AP、STA+AP动作模式;
  • 体积非常小的802.11b/g/n WiFi SOC模块
  • 内置10bit高精度ADC采用低功率32位CPU,兼作应用程序处理器
  • 支持USART、GPIO、IIC、PWM、ADC、SPI等接口时钟频率最大为160MHz
  • 支持smart config、AirKiss一键网络支持多个休眠模式,深休眠电流低到20uA
  • 嵌入式LWIP协议栈
  • 支持SDK二次开发
  • 通用AT指令可以快速使用支持串行本地升级和远程固件升级( FOTA )

  本次采用通用AT指令开发,串口通信,波特率为115200,配置模式为AP+TCP服务器。

/*****************ESP8266初始化*****************
**形参:u8 *wifi_name      -- 热点名称
**			u8 *wifi_password  -- 密码
**			u16 port           -- 端口号
**
**返回:0--成功,其他值 -- 失败
const char *AP_TCPSERVER[]=
{"AT\r\n",//测试指令"ATE0\r\n",//关闭回显"AT+CWMODE=2\r\n",//--设置为AP(热点)模式"AT+RST\r\n",//模块重启"ATE0\r\n",//关闭回显"AT+CWSAP=\"EPS8266_123\",\"01234567\",1,4\r\n", //--设置wifi信息"AT+CIPMUX=1\r\n",//设置多连接"AT+CIPSERVER=1,10\r\n", //--设置TCP服务器模式,端口号(0~65535)"AT+CIFSR\r\n"//查询IP地址
};
************************************************/
u8 Esp8266_AP_TcpServer_Init(u8 *wifi_name,u8 *wifi_password,u16 port)
{char buff[100];char *p=NULL;u8 i=0;printf("1.发送测试指令\r\n");if(Esp8266_SendCmdCheckStat("AT\r\n","OK\r\n"))return 1;printf("2.关回显\r\n");if(Esp8266_SendCmdCheckStat("ATE0\r\n","OK\r\n"))return 2;printf("3.设置模式\r\n");if(Esp8266_SendCmdCheckStat("AT+CWMODE=2\r\n","OK\r\n"))return 3;	printf("4.模块复位\r\n");if(Esp8266_SendCmdCheckStat("AT+RST\r\n","OK\r\n"))return 4;	Delay_Ms(1000);Delay_Ms(1000);printf("5.关回显\r\n");if(Esp8266_SendCmdCheckStat("ATE0\r\n","OK\r\n"))return 5;	//字符串拼接snprintf(buff,sizeof(buff),"AT+CWSAP=\"%s\",\"%s\",1,4\r\n",wifi_name,wifi_password);printf("buff:%s",buff);printf("6.设置热点信息\r\n");if(Esp8266_SendCmdCheckStat(buff,"OK\r\n"))return 6;	printf("7.设置多连接\r\n");if(Esp8266_SendCmdCheckStat("AT+CIPMUX=1\r\n","OK\r\n"))return 7;	printf("8.设置端口号\r\n");snprintf(buff,sizeof(buff),"AT+CIPSERVER=1,%d\r\n",port);if(Esp8266_SendCmdCheckStat(buff,"OK\r\n"))return 8;	printf("9.查询IP地址\r\n");if(Esp8266_SendCmdCheckStat("AT+CIFSR\r\n","OK\r\n"))return 9;/*****提取IP地址信息*//*usart3:+CIFSR:APIP,"192.168.4.1"+CIFSR:APMAC,"86:f3:eb:a6:be:f9"OK*/p=strstr((char *)usart3_rx_buff,"APIP");if(p!=NULL){p+=6;while((*p!='"') && (*p!='\0')){buff[i]=*p;p++;i++;}}buff[i]='\0';printf("buff:%s\r\n",buff);strcpy((char *)esp8266_info.esp8266_ip,buff);//IP地址strcpy((char *)esp8266_info.esp8266_name,(char *)wifi_name);//wifi名称strcpy((char *)esp8266_info.esp8266_key,(char *)wifi_password);//wifi密码esp8266_info.esp8266_prot=port;return 0;
}

4.2 水位监测传感器

在这里插入图片描述
  本模块工作电压为5V,采用ADC方式采集液位值,原理为印刷电路板侵入水中,阻值会改变,通过测量阻值的变化来测量水位。

在这里插入图片描述
在这里插入图片描述

  • 获取水位值示例
u16 Get_Regular_Channelx(u16 ch)
{ADC_ChannelConfTypeDef sConfig = {0};sConfig.Channel=ch;//通道号sConfig.SamplingTime=ADC_SAMPLETIME_239CYCLES_5;//采样周期if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)//ADC通道初始化{Error_Handler();}	HAL_ADC_Start(&hadc1);//开启ADCHAL_ADC_PollForConversion(&hadc1,20);//等待规则通道转换完成return HAL_ADC_GetValue(&hadc1);
}
//采集AD值,多次测量求平均值
int Get_WeatherVal()
{u16 buffer[10];u32 count=0;int i=0,j=0;u16 temp;for(i=0;i<10;i++){buffer[i]=Get_Regular_Channelx(ADC_CHANNEL_8);//100ms采集一次水位值Delay_Ms(2);}for(i=0;i<10-1;i++){for(j=0;j<10-1-i;j++){if(buffer[j]>buffer[j+1]){temp=buffer[j];buffer[j]=buffer[j+1];buffer[j+1]=temp;}}}for(j=2;j<8;j++){count+=buffer[j];}return (count/6);
}

4.3 水泵驱动

  本次水泵选择的是3W USB接口抽水电机,通过继电器控制水泵启动和关闭,配合上位机软件和水位传感器实时监测水位值实现电机自动启动和停止工作。低电平启动水泵工作,高电平停止水泵工作。

#define moto_ctl_start() HAL_GPIO_WritePin(moto_clt_GPIO_Port,moto_clt_Pin,GPIO_PIN_RESET)
#define moto_ctl_stop()  HAL_GPIO_WritePin(moto_clt_GPIO_Port,moto_clt_Pin,GPIO_PIN_SET)

4.4 核心控制功能

  设备上电初始化WIFI,等待app连接。水位传感器实时检测当前水位状态,通过APP启动水泵抽水,当前水位值超过设定是阈值,则水泵自动停止工作。
  板载RGB状态指示灯。硬件电源检测正常位红色,WIFI工作工作则红灯闪烁,APP连接成功则白灯闪烁,电机工作则绿灯闪烁。通过RGB灯光状态即可得知当前设备工作状态。

  while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if(usart1_flag){usart1_rx_buff[usart1_cnt]='\0';printf("rx1=%s,%d\r\n",usart1_rx_buff,usart1_cnt);usart1_cnt=0;usart1_flag=0;}if(usart3_flag){usart3_rx_buff[usart3_cnt]='\0';printf("rx3=%s,%d\r\n",usart3_rx_buff,usart3_cnt);if(strstr((char *)usart3_rx_buff,"0,CONNECT")){wifi_stat=1;//连接成功time=0;stat=0;RGB_Ctl(0,0,0);snprintf(buff,sizeof(buff),"#%d,%d,%d",0,0,threshold_val%101);Esp8266_SendData(0,(u8*)buff);//发松数据到客户端}else if(strstr((char *)usart3_rx_buff,"0,CLOSED")){wifi_stat=0;//断开连接time=0;stat=0;RGB_Ctl(0,0,0);moto_ctl_stop();}else if(strstr((char *)usart3_rx_buff,"motor:1")){wifi_stat=2;//启动工作time=0;stat=0;RGB_Ctl(0,0,0);moto_ctl_start();motor_stat=1;}else if(strstr((char *)usart3_rx_buff,"motor:0")){wifi_stat=1;//停止工作time=0;stat=0;RGB_Ctl(0,0,0);moto_ctl_stop();motor_stat=0;}else if(strstr((char *)usart3_rx_buff,"max:"))//水位阈值{//+IPD,0,6:max:97,17p=strstr((char *)usart3_rx_buff,"max:");p+=strlen("max:");threshold_val=atoi(p);//printf("threshold_val=%d\r\n",threshold_val);}usart3_cnt=0;usart3_flag=0;}time++;time2++;time3++;Delay_Ms(1);if(wifi_stat==0 && time>=500)//应用app未连接(红灯闪烁){time=0;stat=!stat;if(stat)RGB_Ctl(200,0,0);elseRGB_Ctl(0,0,0);}if(wifi_stat==1 && time>=500)//应用app连接成功(白灯闪烁){time=0;stat=!stat;if(stat)RGB_Ctl(255,253,85);elseRGB_Ctl(0,0,0);}else if(wifi_stat==2 && time>=500)//电机工作(绿灯闪烁){time=0;stat=!stat;if(stat)RGB_Ctl(0,255,0);elseRGB_Ctl(0,0,0);}if(time3>=100){time3=0;data=Get_WeatherVal();temp=data/3900.00*100;//printf("data=%.2f.%d\r\n",temp,data);if((temp)>=threshold_val)//当前水位值超过设定阈值,则停止电机工作{if(motor_stat==1){time=0;stat=0;RGB_Ctl(0,0,0);moto_ctl_stop();motor_stat=0;//关闭电机wifi_stat=1;snprintf(buff,sizeof(buff),"#%d,%d,%d",motor_stat,threshold_val,threshold_val);Esp8266_SendData(0,(u8*)buff);//发松数据到客户端time2=0;}}}if(time2>=1000 && motor_stat==1 && wifi_stat>=1)//1s上报一次当前水位状态,且需要再电机工作时进行上报{time2=0;snprintf(buff,sizeof(buff),"#%d,%d,%d",motor_stat,((int)temp)%101,threshold_val%101);//printf("buff=%s\r\n",buff);Esp8266_SendData(0,(u8*)buff);//发松数据到客户端}}/* USER CODE END 3 */
}

5.工程示例

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

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

相关文章

YOLOv5优化:独家创新(SC_C_Detect)检测头结构创新,实现涨点 | 检测头新颖创新系列

💡💡💡本文独家改进:独家创新(SC_C_Detect)检测头结构创新,适合科研创新度十足,强烈推荐 SC_C_Detect | 亲测在多个数据集能够实现大幅涨点 目录 1. SC_C_Detect介绍 2. SC_C_Detect加入YOLOv5 2.1 新建models/head_improve.py

基础课15——语音标注

语音数据标注是对语音数据进行处理和分析的过程&#xff0c;目的是让人工智能系统能够理解和识别语音中的信息。这个过程包括了对语音信号的预处理、特征提取、标注等步骤。 在语音数据标注中&#xff0c;标注员需要对语音数据进行分类、切分、转写等操作&#xff0c;让人工智…

京东平台数据分析:2023年9月京东扫地机器人行业品牌销售排行榜

鲸参谋监测的京东平台9月份扫地机器人市场销售数据已出炉&#xff01; 根据鲸参谋平台的数据显示&#xff0c;9月份&#xff0c;京东平台扫地机器人的销量近14万&#xff0c;环比增长约2%&#xff0c;同比降低约4%&#xff1b;销售额为2.9亿&#xff0c;环比降低约4%&#xff0…

GORM:在Go中轻松管理数据库

GORM综合介绍 - Go对象关系映射库 在现代软件开发中&#xff0c;高效的数据库管理对于构建强大的应用程序至关重要。GORM是Go开发人员寻求与数据库进行交互的简化方式的宝贵工具。GORM是Go对象关系映射的缩写&#xff0c;它为Go的面向对象世界与数据库的关系世界之间提供了桥梁…

获取Webshell方法

CMS系统指的是内容管理系统。已经有别人开发好了整个网站的前后端&#xff0c;使用者只需要部署cms&#xff0c;然后通过后台添加数据&#xff0c;修改图片等工作&#xff0c;就能搭建好一个的WEB系统。 CMS获取Webshell方法 WordPress后台拿Webshell phpcms拿Webshell 非CMS…

FedAT:异步更新联邦学习方法

文章链接&#xff1a;FedAT: A Communication-Efficient Federated Learning Method with Asynchronous Tiers under Non-IID Data 发表会议: SC’21 (International Conference for High Performance Computing, Networking, Storage, and Analysis) 高性能计算&#xff0c;体…

【Cocos新手进阶】使用cocos 的预制体创建动态的滚动框组件。

本篇文章主要讲解&#xff0c;使用cocos 游戏引擎制作动态生成的滚动框实例教程。 日期&#xff1a;2023年11月1日 作者&#xff1a;任聪聪 引擎版本&#xff1a;2.4.3 至 2.4.11 关于预制体的说明和概念 cocos中的预制体的作用是能够让你使用数据的形式进行控制界面的变化&am…

Python web开发中的单元测试自动化技巧!

Python作为一种广泛使用的编程语言&#xff0c;在web开发中也扮演着重要的角色。在进行web开发时&#xff0c;单元测试是一个不可或缺的环节。单元测试可以确保代码的正确性&#xff0c;并且能够在开发过程中快速发现问题&#xff0c;有助于提高代码质量和开发效率。 在Python…

黑芝麻智能助力亿咖通·天穹Pro行泊一体智能驾驶计算平台正式量产

11月1日&#xff0c;亿咖通科技旗下首款智能驾驶计算平台——亿咖通天穹Pro行泊一体智能驾驶平台已向客户开始正式量产交付。亿咖通天穹行泊一体智能驾驶计算平台是亿咖通科技基于黑芝麻智能华山二号A1000&#xff0c;由双方合作研发并推出的具备行泊一体能力的智能驾驶解决方案…

【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入

引言 在上一篇中我们介绍了MySQL ALTER命令及序列使用&#xff1b;在开发中&#xff0c;对MySQL重复数据的处理是十分重要的。这一篇我们使用命令行方式来帮助读者掌握MySQL中重复数据的操作。 上一篇链接&#xff1a;【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令…

Http代理与socks5代理有何区别?如何选择?(二)

上篇文章我们基本分别了解了http代理与socks5代理的定义与优缺点&#xff0c;接下来我们继续来了解http代理与socks5代理之间的比较与区别。 一、两者的比较 1、功能比较 HTTP代理专门用于Web流量&#xff0c;并在处理HTTP和HTTPS协议方面非常高效。它们可以修改正在传输的数据…

网络层协议【IP协议】

全文目录 基本概念IP协议IPv4 协议头格式&#xff1a;分片发送方进行分片&#xff1a;识别IP分片&#xff1a;组装IP分片&#xff1a; 网段划分DHCP技术IP分类 私有IP和共有IP1. 私有IP地址&#xff08;Private IP Address&#xff09;&#xff1a;2. 公网IP地址&#xff08;Pu…

408操作系统笔记

一操作系统概述 1.操作系统的概念 操作系统&#xff1a;是控制和管理整个计算机系统 的硬件和软件资源 &#xff0c;合理地组织&#xff0c;调度计算机的工作和资源的分配&#xff0c;为用户和其他软件提供方便接口和环境的程序集合&#xff0c;是计算机系统中最基本的系统软…

UE5 日记(人物连招:蒙太奇动画通知(含视频链接))

教程https://www.youtube.com/watch?vsWpENaVGj2M&listPLiSlOaRBfgkcPAhYpGps16PT_9f28amXi&index10&ppiAQB 相关蓝图 连招逻辑 动画通知类 逻辑分析 1.用户输入 已搭载战斗系统模块,可以收到输入指令 2.连击 第一次攻击&#xff1a; 第一次攻击&#xff0c;…

windows使用FindWindow函数查找窗口句柄

理解什么是句柄&#xff1f; 对于“句柄”&#xff0c;之前一直停留在一知半解的认识层面&#xff0c;也说不清具体概念&#xff0c;只知道它是一个标识符&#xff0c;用来标记对象或者说某个东西的。只知其名不知其意。目前学习windows编程&#xff0c;对“句柄”做一个完整的…

2.Docker的安装

1.认识Docker的基本架构 下面这张图是docker官网上的&#xff0c;介绍了整个Docker的基础架构&#xff0c;我们根据这张图来学习一下docker的涉及到的一些相关概念。 1.1 Docker的架构组成 Docker架构是由Client(客户端)、Docker Host(服务端)、Registry(远程仓库)组成。 …

图扑 HT for Web 手机端运维管理系统

随着信息技术的快速发展&#xff0c;网络技术的应用涉及到人们生活的方方面面。其中&#xff0c;手机运维管理系统可提供数字化、智能化的方式&#xff0c;帮助企业和组织管理监控企业的 IT 环境&#xff0c;提高运维效率、降低维护成本、增强安全性、提升服务质量&#xff0c;…

我在Vscode学OpenCV 初步接触

OpenCV是一个开源的计算机视觉库&#xff0c;可以处理图像和视频数据。它包含了超过2500个优化过的算法&#xff0c;用于对图像和视频进行处理&#xff0c;包括目标识别、面部识别、运动跟踪、立体视觉等。OpenCV支持多种编程语言&#xff0c;包括C、Python、Java等&#xff0c…

利用两个栈s1,s2模拟一个队列时,如何用栈的运算来实现该队列的运算?写出模拟队列插入和删除的函数。一个栈s1用于插入元素,另一个栈s2用于删除元素

利用两个栈s1&#xff0c;s2模拟一个队列时&#xff0c;如何用栈的运算来实现该队列的运算&#xff1f;写出模拟队列插入和删除的函数。一个栈s1用于插入元素&#xff0c;另一个栈s2用于删除元素。 前置知识点&#xff08;栈定义&#xff0c;及出栈入栈函数&#xff09; #def…

【小白专用】Mysql的安装配置教程(详细)

首先简单概述分为几个步骤&#xff1a; 一、下载Mysql 二、安装Mysql 三、验证Mysql安装是否成功 四、 配置环境变量 五、验证配置环境变量是否成功 一、下载Mysql 要在Windows或Mac上安装MySQL&#xff0c;首先从MySQL官方网站下载最新的MySQL Community Server版本&…