基于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 系统初始化

c 复制代码
#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();         // 初始化OLED
    USART1_Init(115200); // 串口初始化,连接WiFi模块
    ADC_Init_Config();   // 初始化ADC,用于湿度采集
    Relay_Init();        // 初始化继电器控制IO
    Key_Init();          // 初始化按键
    Wifi_Init();         // 初始化WiFi模块
    OLED_ShowString(0,0,"Soil Humidity:");
}

3.2 湿度检测模块

c 复制代码
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显示模块

c 复制代码
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通信模块

c 复制代码
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 自动控制模块

c 复制代码
#define HUMIDITY_MIN 40
#define HUMIDITY_MAX 70

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

3.6 继电器驱动模块

c 复制代码
void Pump_Control(void){
    if(pumpState == 1) Relay_ON();
    else Relay_OFF();
}

3.7 按键处理模块

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

3.8 主控程序

c 复制代码
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物联网平台,成功实现了 土壤湿度监测与智能灌溉控制。系统不仅能在本地通过按键实现手动与自动控制,还能通过云平台实现远程操作与监控,极大地提高了农业灌溉的自动化和智能化水平。

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

相关推荐
贾亚超3 小时前
【STM32外设】ADC
stm32·单片机·嵌入式硬件
2006yu3 小时前
从零开始学习单片机18
单片机·嵌入式硬件·学习
意法半导体STM325 小时前
STM32 USBx Device MSC standalone 移植示例 LAT1488
单片机·嵌入式硬件·device·msc·standalone·usbx
云望无线图传模块7 小时前
突破视界的边界:16公里远距离无人机图传模块全面解析
网络·物联网·无人机
曼彻斯特的海边10 小时前
物联网(IoT)中常用的通信协议
物联网·iot
神一样的老师10 小时前
面向 6G 网络的 LLM 赋能物联网:架构、挑战与解决方案
网络·物联网·架构
学不动CV了10 小时前
嵌入式硬件电路分析---AD采集电路
arm开发·stm32·单片机·嵌入式硬件·51单片机
leo__52014 小时前
STM32的RTC模块及其应用场景
stm32·嵌入式硬件·实时音视频
一袋米扛几楼9814 小时前
【物联网】BLE 系统架构全景图
python·物联网·aws