当前位置: 首页 > news >正文

基于STM32单片机的OneNet物联网云平台农业土壤湿度控制系统

1 系统功能介绍

本设计为 基于STM32单片机的OneNet物联网云平台农业土壤湿度控制系统。系统以STM32F103C8T6单片机作为核心控制器,结合土壤湿度传感器、OLED液晶显示模块、WiFi模块、继电器驱动电路以及按键电路,实现了土壤湿度的实时采集、显示与远程控制。系统不仅能在本地自动或手动控制水泵,还能通过OneNet物联网平台实现远程监控与控制,具备较强的智能化和实用性。

系统主要功能如下:

  1. 实时数据采集与上传:利用土壤湿度传感器采集数据,并通过WiFi模块上传至中国移动OneNet云平台。

  2. 模式切换:系统支持自动模式和手动模式。

    • 自动模式:根据用户设置的湿度上下阈值进行自动灌溉控制。
    • 手动模式:可通过按键或云平台远程命令控制水泵开关。
  3. 远程控制:用户可通过云平台下发指令控制系统:

    • auto:自动模式
    • manual:手动模式
    • open:开启水泵
    • close:关闭水泵
  4. 本地显示:OLED液晶显示实时土壤湿度、模式状态以及水泵运行情况。

  5. 安全可靠:通过继电器控制水泵,保证电气隔离和安全运行。

该系统结合了物联网与农业智能控制的应用,能够显著提升农业灌溉的智能化程度,减少人力投入并提高水资源利用率。


2 系统电路设计

本系统电路主要由 STM32最小系统电路、土壤湿度检测电路、OLED显示电路、WiFi通信电路、继电器控制电路、按键电路、电源电路 组成。

2.1 STM32单片机最小系统

  • 核心芯片:STM32F103C8T6,基于ARM Cortex-M3内核,主频72MHz,资源丰富,适合实时控制与通信任务。
  • 晶振电路:外部8MHz晶振提供系统时钟,确保系统运行稳定。
  • 复位电路:上电复位与按键复位结合,保证系统在异常情况下能正常重启。
  • 供电电路:系统供电为3.3V,通过稳压电路由5V电源转换而来。

2.2 土壤湿度检测电路

  • 传感器:采用电容式土壤湿度传感器,输出模拟电压信号,避免了电极腐蚀问题。
  • 接口:传感器信号通过ADC接口接入STM32,单片机对采样数据进行处理。
  • 校准与转换:通过软件将采集到的电压值转换为百分比湿度值(0%~100%)。

2.3 OLED显示电路

  • 屏幕规格:0.96英寸OLED,分辨率128×64,通信接口为I2C。
  • 显示内容:土壤湿度数值、模式状态(水泵开关状态)、报警信息等。
  • 电路接口:SCL、SDA分别连接到STM32的I2C引脚。

2.4 WiFi通信电路

  • 模块选择:ESP8266 WiFi模块,串口通信方式与STM32连接。

  • 功能实现

    1. 建立与OneNet物联网平台的MQTT连接。
    2. 定时上传湿度数据。
    3. 接收平台下发的远程控制命令。

2.5 继电器控制电路

  • 继电器模块:通过光耦隔离,输入信号由STM32的GPIO输出控制。
  • 负载控制:继电器输出端可直接控制水泵的开关。
  • 安全设计:继电器电路与单片机电路电气隔离,保证系统运行安全。

2.6 按键电路

  • 按键功能

    1. 模式切换键:在自动与手动模式间切换。
    2. 水泵开关键:手动模式下,直接控制水泵开关。
  • 消抖处理:通过软件延时消抖,提高可靠性。

2.7 电源电路

  • 电源模块:系统统一采用5V电源,STM32与传感器模块使用3.3V稳压供电,继电器与OLED使用5V供电。
  • 电源滤波:在关键电源引脚加入电容滤波,防止电源波动影响系统运行。

3 程序设计

系统软件部分采用C语言编程,基于STM32标准外设库开发。程序结构主要包括 初始化模块、湿度检测模块、OLED显示模块、WiFi通信模块、模式控制模块、继电器驱动模块、按键处理模块、主控程序

3.1 系统初始化

#include "stm32f10x.h"
#include "oled.h"
#include "usart.h"
#include "adc.h"
#include "relay.h"
#include "key.h"
#include "wifi.h"uint16_t humidity = 0;   // 湿度值
uint8_t mode = 0;        // 0-手动模式 1-自动模式
uint8_t pumpState = 0;   // 水泵状态 0-关闭 1-打开void System_Init(void){OLED_Init();         // 初始化OLEDUSART1_Init(115200); // 串口初始化,连接WiFi模块ADC_Init_Config();   // 初始化ADC,用于湿度采集Relay_Init();        // 初始化继电器控制IOKey_Init();          // 初始化按键Wifi_Init();         // 初始化WiFi模块OLED_ShowString(0,0,"Soil Humidity:");
}

3.2 湿度检测模块

uint16_t Get_Humidity(void){uint16_t adc_value = ADC_GetValue(ADC_Channel_1); uint16_t humidity = (adc_value * 100) / 4095; // 转换为百分比return humidity;
}

3.3 OLED显示模块

void Display_Data(void){OLED_ShowNum(0,2,humidity,3,16);   // 显示湿度值if(mode == 0){OLED_ShowString(0,4,"Mode:Manual");} else {OLED_ShowString(0,4,"Mode:Auto  ");}if(pumpState == 1){OLED_ShowString(0,6,"Pump:ON ");} else {OLED_ShowString(0,6,"Pump:OFF");}
}

3.4 WiFi通信模块

void Wifi_Process(void){char recvCmd[20];if(Wifi_ReceiveCmd(recvCmd)){if(strcmp(recvCmd,"auto") == 0) mode = 1;else if(strcmp(recvCmd,"manual") == 0) mode = 0;else if(strcmp(recvCmd,"open") == 0) pumpState = 1;else if(strcmp(recvCmd,"close") == 0) pumpState = 0;}Wifi_SendData(humidity); // 上传湿度数据
}

3.5 自动控制模块

#define HUMIDITY_MIN 40
#define HUMIDITY_MAX 70void Auto_Control(void){if(mode == 1){if(humidity < HUMIDITY_MIN){pumpState = 1;  // 开启水泵} else if(humidity > HUMIDITY_MAX){pumpState = 0;  // 关闭水泵}}
}

3.6 继电器驱动模块

void Pump_Control(void){if(pumpState == 1) Relay_ON();else Relay_OFF();
}

3.7 按键处理模块

void Key_Process(void){if(Key_Scan() == KEY1_PRES){   // 模式切换mode = !mode;}if(Key_Scan() == KEY2_PRES && mode == 0){ // 手动控制pumpState = !pumpState;}
}

3.8 主控程序

int main(void){System_Init();while(1){humidity = Get_Humidity();   // 采集湿度Key_Process();               // 按键处理Wifi_Process();              // 处理云平台数据Auto_Control();              // 自动模式控制Pump_Control();              // 控制继电器Display_Data();              // OLED显示delay_ms(500);               // 延时}
}

4 总结

本设计基于STM32单片机,结合WiFi模块与OneNet物联网平台,成功实现了 土壤湿度监测与智能灌溉控制。系统不仅能在本地通过按键实现手动与自动控制,还能通过云平台实现远程操作与监控,极大地提高了农业灌溉的自动化和智能化水平。

通过本设计,可以更高效地利用水资源,减少人工劳动,同时为智能农业的发展提供了一种可行的方案,具有良好的推广和应用价值。

http://www.dtcms.com/a/358609.html

相关文章:

  • 【lua】模块基础及应用
  • 无网络安装来自 GitHub 的 Python 包
  • DETR:用Transformer革新目标检测的新范式
  • REST-assured 接口测试编写指南
  • 平衡树的左旋
  • 在 WSL2-NVIDIA-Workbench 中安装Anaconda、CUDA 13.0、cuDNN 9.12 及 PyTorch(含完整环境验证)
  • 第二十六天-ADC基本原理
  • 学习大模型,还有必要学习机器学习,深度学习和数学吗
  • 苍穹外卖项目笔记day02
  • 嵌入式学习笔记--LINUX系统编程--DAY03进程控制
  • 在 .NET Core 中实现基于策略和基于角色的授权
  • 【系列10】端侧AI:构建与部署高效的本地化AI模型 第9章:移动端部署实战 - iOS
  • SpringAI应用开发面试剧本与技术知识全解析:RAG、向量数据库、多租户与企业落地场景
  • 【工具类】ssh使用案例
  • 26届秋招开始啦
  • UE5多人MOBA+GAS 56、WSL + Docker 编排 Linux 服务器与 Windows 客户端
  • 【PCIE系列】1---PCIE系统拓扑结构分析
  • 基于TCN-BiLSTM-SelfAttention神经网络的多输入单输出回归预测【MATLAB】
  • 得物25年春招-安卓部分编程题
  • Odoo与Django 的区别是什么?
  • Ztero文献管理工具插件设置——亲测有效
  • Python实现点云AABB和OBB包围盒
  • 合金电阻选型7大原则-华年商城
  • 趣味学RUST基础篇(结构体方法)
  • 软考中级习题与解答——第一章_数据结构与算法基础(2)
  • 线性代数理论——状态空间
  • uniapp开发 移动端使用字符串替换注意事项
  • CrystalDiskInfo 9.0 最新版安装步骤详解(从下载到查看硬盘状态)​
  • 三重积分的对称性
  • React前端开发_Day6-Day9_极客园项目