基于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.pswp.cn/web/95068.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95068.shtml

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

相关文章

GooglePlay提审问题记录

1、debug签名问题 原因&#xff1a; 为应用签名 | Android Studio | Android Developers 从 IDE 中运行或调试您的项目时&#xff0c;Android Studio 会自动使用由 Android SDK 工具生成的调试证书为您的应用签名。当您首次在 Android Studio 中运行或调试项目时&#xff…

使用Rag 命中用户feedback提升triage agent 准确率

简述使用 RAG&#xff08;Retrieval-Augmented Generation&#xff09;&#xff0c;提升 Triage Agent 对用户反馈的处理准确率。这个方案的背景源于当前系统服务多个租户&#xff0c;各租户在业务场景、问题描述方式、术语使用习惯等方面存在极大差异&#xff0c;导致通用模型…

项目管理方法论有哪些流派

项目管理方法论的主要流派包括&#xff1a;瀑布式方法论、敏捷方法论、Scrum方法论、看板方法论、关键路径法&#xff08;CPM&#xff09;、计划评审技术&#xff08;PERT&#xff09;、挣值管理&#xff08;EVM&#xff09;、精益项目管理、六西格玛、PRINCE2方法论。瀑布式方…

Python远程文件管理高并发处理与负载均衡实战

《Python远程文件管理高并发处理与负载均衡实战》 引言 在5G网络和物联网时代,单台服务器每秒处理上万并发请求已成为基本要求。本文基于Python异步编程框架和分布式架构,深入探讨如何构建支持10万+并发连接的远程文件管理系统。通过实战案例演示,系统在某省级政务云平台实…

第十七章 Java基础-常用API-System

文章目录 package zsk.第十三章常用API.a02system;public

uniapp开发 移动端使用字符串替换注意事项

1. uniapp开发 移动端使用replace注意事项uniapp replaceAll方式在手机失效是因为安卓环境下不支持replaceAll方法。在uniapp开发中&#xff0c;如果在安卓环境下使用replaceAll方法&#xff0c;可能会导致页面无法渲染&#xff0c;并且控制台不会反馈错误信息。为了解决这个问…

【动态规划 矩阵快速幂】P10528 [XJTUPC 2024] 崩坏:星穹铁道|普及+

本文涉及知识点 C动态规划 【矩阵快速幂】封装类及测试用例及样例 P10528 [XJTUPC 2024] 崩坏&#xff1a;星穹铁道 题目背景 Corycle 喜欢玩一个由米哈游自主研发的一款回合制战斗游戏------《崩坏&#xff1a;星穹铁道》。这片银河中有名为「星神」的存在&#xff0c;他们…

捡捡java——2、基础07

Maven项目管理工具 maven项目->本地仓库->判断配置文件->没指定->远程仓库-》本地仓库 ->指定了->镜像仓库-》本地仓库 GroupId&#xff1a;一般是逆向公司域名 ArtifactId&#xff1a;一般是项目jar名 Version&#xff1a;版本号 maven目录里面conf&…

蜂窝通信模组OpenCPU的介绍

一、名词解释 OpenCPU 方案在软件功能上&#xff0c;需要将原来在 MCU 上运行的固件功能&#xff0c;放在 Cat.1 模组的 SoC 芯片上运行。同时&#xff0c;原来通过串口协议交互完成的功能&#xff0c;也变成通过 OpenAPI 调用的方式来完成。软件开发、编译及烧录方面&#xff…

沃丰科技出海客服系统对接沃尔玛全球电商平台,赋能中企出海

经济全球化的当下&#xff0c;中国企业出海步伐不断加快&#xff0c;沃尔玛全球电商平台作为全球极具影响力的零售渠道&#xff0c;成为众多中企开拓国际市场的重要选择。然而&#xff0c;跨境服务的复杂性、多语言沟通障碍、文化差异以及各行业的独特需求&#xff0c;始终是中…

Spring Boot 整合 SSE, http长连接

1. 什么是 SSE&#xff1f; (30秒)SSE (Server-Sent Events) 是一种允许服务器通过 HTTP 连接主动向客户端发送实时更新的技术。特点&#xff1a;基于 HTTP&#xff0c;使用简单&#xff0c;单向通信&#xff08;服务器 -> 客户端&#xff09;&#xff0c;自动重连。对比 We…

类和反射的机制

一、类1.类的生命周期1. 类的编译&#xff1a;通过 javac 命令将 .java 源文件编译成 .class 字节码文件。 2. 类的加载&#xff1a;类加载器&#xff08;ClassLoader&#xff09;将 .class 文件从硬盘加载到内存&#xff0c;形成“类对象”&#xff0c;包括加载、链接、初始化…

【论文笔记】VGGT-从2D感知3D:pose估计+稠密重建+点跟踪

VGG组联合Meta改进了dust3r&#xff0c;输入图片&#xff0c;输出对应的一系列3D属性&#xff0c;被CVPR2025收录&#xff01;1.abstract我们提出了VGGT&#xff0c;一种前馈神经网络&#xff0c;能够直接从场景的一个、几个或数百个视角推断出所有关键的3D属性&#xff0c;包括…

idea2025.2中maven编译中文乱码

问题描述&#xff1a;使用idea2025.2编译器中maven编译java文件后中文出现乱码情况解决方案&#xff1a;添加指令&#xff1a; JAVA_TOOL_OPTIONS-Dfile.encodingUTF-8 在下图位置注意&#xff1a;再次编译时&#xff0c;可以在原本文件中小范围修改一点内容&#xff08;打个…

【适度精简】Windows 7 旗舰版-emmy精简系统

Windows 7旗舰版曾是非常受欢迎的操作系统&#xff0c;但随着时间推移和技术发展&#xff0c;其在一些场景下暴露出了诸多问题&#xff0c;适度精简的Windows 7旗舰版正是为解决这些问题而出现&#xff0c;以下是从用户软件痛点角度对其背景和作用的分析。 添加图片注释&#x…

数据分析编程第七步:分析与预测

7.1 销售趋势分析利用历史销售数据统计月销售额&#xff0c;计算季节化因子&#xff0c;获取去季节化销售数据&#xff0c;然后进行线性拟合&#xff0c;最后预测接下来的某个月的销售额。第一步&#xff1a;读数&#xff0c;统计月销售额A1file(“sales.csv”).importtc(order…

【web3】十分钟了解web3是什么?

十分钟了解web3是什么?Web3的核心概念区块链与去中心化智能合约加密货币与代币去中心化应用&#xff08;DApps&#xff09;钱包与身份验证DAO&#xff08;去中心化自治组织&#xff09;Web3 国内产品Web3 国际产品Web3 基础设施Web3 应用场景技术实现特点挑战与未来Web3的核心…

联合体和枚举——嵌入式学习笔记

目录 前言 一、联合体&#xff08;共用体&#xff09; 1、基本概念 2、初始化和引用 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09;引用 二、枚举 前言 在C语言的编程世界中&#xff0c;我们早已熟悉了结构体struct这种能将不同数据类型捆绑在一起的“打包…

SRE命令行兵器谱之思想篇:像SRE一样思考——命令行不只是工具,更是你的战友

SRE命令行兵器谱之思想篇:像SRE一样思考——命令行不只是工具,更是你的战友 欢迎来到《SRE命令行兵器谱》系列。在深入研究 grep, lsof, tcpdump 这些强大“兵器”的细节之前,我们必须先回答一个更重要的问题: 一个SRE(网站可靠性工程师)在黑色的终端窗口前,脑子里想的…

STL库——list(类模拟实现)

ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;C语言&#xff1b; 文章目录 前言 一、基本框架 二、构造函数 三、析构函数 四、赋值重载 五、增删查改 5.1、push_front/pus…