基于STM32单片机的OneNet物联网云平台农业土壤湿度控制系统
基于STM32单片机的OneNet物联网云平台农业土壤湿度控制系统
1 功能介绍
随着农业现代化的发展,传统的人工灌溉方式已经难以满足精准农业的需求。本设计基于STM32单片机,结合土壤湿度检测模块、OLED显示模块、WiFi通信模块和继电器控制电路,构建了一个智能化的农业土壤湿度控制系统。该系统能够实时采集土壤湿度数据并上传至中国移动的OneNet物联网云平台,用户可通过平台远程监控与控制灌溉设备,实现智能化农业灌溉管理。
本系统的主要功能如下:
-
数据采集与上传:通过土壤湿度传感器实时采集湿度数据,STM32单片机进行处理后,通过ESP8266 WiFi模块上传至OneNet云平台。
-
显示功能:OLED显示屏实时显示湿度值、当前工作模式以及水泵状态,方便用户在本地查看系统运行情况。
-
双模式运行:
- 自动模式:系统根据设定的湿度阈值自动开启或关闭水泵,当湿度高于上限时关闭水泵,低于下限时开启水泵。
- 手动模式:用户可通过按键或云平台发送指令手动控制水泵的启停。
-
远程控制:通过OneNet云平台发送控制命令(如“auto”、“manual”、“open”、“close”),实现远程控制与模式切换。
-
报警与保护:在检测到数据异常或网络中断时,可提示用户检查系统运行状态,保证农业生产的可靠性。
2 系统电路设计
本系统硬件由STM32单片机核心板及外围电路构成,主要包括土壤湿度检测电路、OLED显示电路、WiFi通信电路、继电器控制电路、按键电路和电源电路。
2.1 单片机核心电路
系统采用STM32F103C8T6作为控制核心,该芯片基于ARM Cortex-M3内核,具备如下优势:
- 主频高达72MHz,能满足实时数据采集与处理需求。
- 丰富的GPIO接口,方便连接各类传感器与外设。
- 内置USART、I2C、SPI等通信接口,便于与OLED、WiFi模块进行数据交互。
- 拥有低功耗特性,适用于长时间农业环境监控。
单片机主要任务是采集土壤湿度信号、进行数据处理、控制继电器开关、刷新OLED显示,并与WiFi模块进行通信。
2.2 土壤湿度检测电路
土壤湿度检测模块一般由电阻式传感器或电容式传感器组成。本设计选用电容式土壤湿度传感器,具有以下优点:
- 输出为模拟电压信号,反映土壤湿度的大小。
- 受土壤盐分影响小,抗干扰能力强。
- 通过STM32内部ADC模块将模拟信号转换为数字信号,供后续处理与显示使用。
STM32通过定时采样将湿度数据存储,并在OLED显示和OneNet上传时调用。
2.3 OLED显示电路
OLED显示模块采用I2C通信方式,分辨率为128×64像素。主要显示内容包括:
- 当前土壤湿度值。
- 系统运行模式(自动/手动)。
- 水泵当前状态(开启/关闭)。
- WiFi连接状态提示。
OLED的低功耗与高对比度特性使其适合在室外农业场景中使用。
2.4 WiFi通信电路
WiFi通信模块采用ESP8266,连接至中国移动OneNet物联网平台。其作用包括:
- 将采集到的湿度数据上传至云端。
- 接收来自云平台的控制命令,解析并执行。
- 维持稳定的MQTT连接,保证数据交互的实时性。
STM32通过USART接口与ESP8266进行通信,采用AT指令或透传模式实现数据上传与下发。
2.5 继电器控制电路
继电器电路用于驱动水泵,实现灌溉控制。设计中采用5V驱动继电器,配合三极管放大电路进行控制,特点如下:
- 继电器常开触点用于控制水泵电源的通断。
- 通过单片机输出高低电平驱动三极管,从而实现对继电器的控制。
- 在水泵开启或关闭时,OLED显示与云平台状态保持同步。
2.6 按键电路
系统设计了多个独立按键,主要功能如下:
- 模式切换键:在手动与自动模式之间切换。
- 启动/停止键:在手动模式下用于控制水泵开关。
- 设置键:可用于修改湿度阈值,满足不同作物的灌溉需求。
按键采用下拉电阻设计,保证输入电平的稳定性。
2.7 电源电路
系统电源部分采用DC 12V输入,经过降压模块提供5V给继电器与OLED,再通过AMS1117-3.3稳压芯片提供3.3V电压给STM32和ESP8266。电源电路设计中增加了电容滤波和稳压模块,以保证在水泵启动瞬间不会引起系统电压波动。
3 程序设计
系统软件设计采用模块化结构,主要分为主程序、土壤湿度检测程序、OLED显示程序、WiFi通信程序、继电器控制程序和按键扫描程序。
3.1 主程序设计
主程序负责系统初始化、模式管理、任务调度与数据交互。主要流程为:初始化外设 → 循环检测按键 → 采集湿度 → 上传数据 → 判断模式与阈值 → 控制水泵 → 刷新显示。
int main(void)
{
SystemInit();
OLED_Init();
USART_Init(115200);
WIFI_Init();
ADC_Init();
Relay_Init();
Key_Init();
while(1)
{
uint16_t soil = Get_Soil_Humidity();
OLED_ShowNum(0,0,soil,4,16);
WIFI_Upload(soil);
Mode_Process(soil);
Key_Scan();
}
}
3.2 土壤湿度检测程序
通过STM32 ADC模块采集传感器输出电压,并换算为湿度百分比。
uint16_t Get_Soil_Humidity(void)
{
uint16_t adc_value = ADC_GetConversionValue(ADC1);
uint16_t humidity = (adc_value * 100) / 4095; // 转换为百分比
return humidity;
}
3.3 OLED显示程序
OLED模块用于显示湿度、模式与水泵状态。
void OLED_Display(uint16_t humidity, uint8_t mode, uint8_t pump)
{
OLED_ShowString(0,0,"Soil:");
OLED_ShowNum(40,0,humidity,3,16);
OLED_ShowString(0,2, mode ? "Auto" : "Manual");
OLED_ShowString(0,4, pump ? "Pump ON" : "Pump OFF");
}
3.4 WiFi通信程序
WiFi通信模块通过MQTT协议与OneNet云平台交互,支持数据上传与命令接收。
void WIFI_Upload(uint16_t humidity)
{
char data[50];
sprintf(data,"{\"soil\":%d}",humidity);
ESP8266_SendData(data);
}
void WIFI_ReceiveCmd(char *cmd)
{
if(strcmp(cmd,"auto")==0) system_mode = 1;
else if(strcmp(cmd,"manual")==0) system_mode = 0;
else if(strcmp(cmd,"open")==0) Relay_On();
else if(strcmp(cmd,"close")==0) Relay_Off();
}
3.5 继电器控制程序
根据湿度值与模式状态,自动或手动控制水泵开关。
void Mode_Process(uint16_t humidity)
{
if(system_mode) // 自动模式
{
if(humidity < min_threshold) Relay_On();
else if(humidity > max_threshold) Relay_Off();
}
}
3.6 按键扫描程序
通过按键进行模式切换和水泵控制。
void Key_Scan(void)
{
if(KEY_MODE == 0)
{
delay_ms(20);
if(KEY_MODE == 0)
{
system_mode = !system_mode;
}
}
if(KEY_CTRL == 0 && !system_mode)
{
delay_ms(20);
if(KEY_CTRL == 0)
{
pump_state = !pump_state;
if(pump_state) Relay_On();
else Relay_Off();
}
}
}
4 总结
本设计基于STM32单片机,结合土壤湿度检测、OLED显示、WiFi通信与继电器驱动,成功实现了农业土壤湿度的智能化控制。通过接入OneNet物联网云平台,用户能够实时获取土壤湿度数据,并进行远程操作,满足农业生产对智能灌溉的需求。
系统的主要特点如下:
- 采用自动与手动双模式,提高了灵活性与可靠性。
- 支持云平台远程控制,便于大规模农业场景管理。
- 硬件电路设计简洁,模块化程度高,便于扩展。
- 程序设计结构清晰,具有良好的可移植性和可维护性。
本系统不仅能应用于农业灌溉,还可以扩展到园林绿化、温室大棚等领域,具有广阔的应用前景。
更多推荐
所有评论(0)