1 系统功能介绍
本设计为 基于 STM32 单片机的无线 ZigBee 智能大棚土壤湿度光照检测系统,系统由 主机端和从机端 两部分组成,通过 CC2530 ZigBee 模块 实现无线通信。该系统主要应用于农业大棚智能环境监测,能够实时采集温度、光照和土壤湿度信息,并通过无线方式传输到从机端,再通过液晶显示屏进行显示。
系统功能总结如下:
主机功能:
- 基于 STM32F103C8T6 单片机,负责采集传感器数据。
- 包含 DS18B20 温度传感器,检测环境温度。
- 包含 光照传感器,采集光照强度并进行量化(0~100)。
- 包含 土壤湿度传感器,采集湿度信息并量化(0~100)。
- 使用 ZigBee 模块 CC2530 将采集数据无线传输到从机。
从机功能:
- 基于 STM32F103C8T6 单片机,负责接收 ZigBee 数据。
- 通过 LCD1602 液晶 实时显示温度、光照和土壤湿度。
- 具备 断链检测,当主机停止发送数据时,从机液晶显示“xx”提示数据无效。
该系统在农业智能化控制中具有广泛的应用价值,能够减少人工检测,提高大棚环境监控的实时性与智能化水平。
2 系统电路设计
2.1 主机电路设计
2.1.1 STM32F103C8T6 单片机最小系统
主机以 STM32F103C8T6 为核心,负责数据采集和 ZigBee 通信。
主要功能:
- 控制各传感器的采样与数据处理。
- 数据打包并通过串口发送到 ZigBee 模块。
设计要点:
- 采用 8MHz 外部晶振,配合 PLL 提升系统频率至 72MHz。
- 提供稳定的电源和复位电路,保证系统可靠运行。
2.1.2 温度传感器 DS18B20
原理:单总线数字温度传感器,测量精度高。
设计特点:
- DQ 端口与 STM32 的 GPIO 口相连,并加上拉电阻。
- 单片机通过时序操作获取温度值。
作用:采集环境温度,结果通过主机发送到从机端显示。
2.1.3 光照传感器模块
原理:采用光敏电阻或光照强度模块,将光照强度转换为电压信号。
设计要点:
- 模拟信号接入 STM32 的 ADC 通道,经过采样转换得到 0~100 的光照等级。
- 光照阈值可用于辅助环境调节。
2.1.4 土壤湿度传感器模块
原理:通过电导率检测土壤含水量,将其转换为电压信号。
设计要点:
- 模拟信号输入 STM32 的 ADC 通道。
- 单片机将其换算为 0~100 的湿度等级。
2.1.5 ZigBee 通信模块(CC2530)
功能:主机将采集到的数据通过 UART 串口发送给 ZigBee 模块,ZigBee 以无线方式发送给从机端。
设计要点:
- 波特率匹配 STM32 串口配置。
- 供电为 3.3V,需要保证电源稳定。
2.2 从机电路设计
2.2.1 STM32F103C8T6 单片机最小系统
从机端同样以 STM32F103C8T6 为核心。
功能:
- 接收 ZigBee 模块发来的串口数据;
- 对接收到的数据进行解析;
- 驱动 LCD1602 显示器进行实时刷新;
- 进行通信检测,若超过一定时间未接收到数据,则显示“xx”。
2.2.2 ZigBee 接收模块
- 功能:无线接收主机端发来的数据,并通过串口传输给 STM32。
- 要求:通信稳定、无干扰,波特率匹配。
2.2.3 LCD1602 液晶显示模块
功能:实时显示温度、光照、湿度数据。
设计细节:
数据线 D0~D7 与 STM32 I/O 相连,使用 8 位并口模式。
第一行显示系统标题,第二行显示实时数据,例如:
T:25C L:75 H:60
当通信中断时,数据显示为:
T:xx L:xx H:xx
3 程序设计
3.1 主程序框架
#include "stm32f10x.h"
#include "lcd1602.h"
#include "ds18b20.h"
#include "zigbee.h"
#include "adc.h"
float temperature;
uint16_t light, humidity;
int main(void)
{
SystemInit();
DS18B20_Init();
ADC_Config();
ZigBee_Init();
while(1)
{
temperature = DS18B20_Read();
light = ADC_ReadChannel(0); // 光照
humidity = ADC_ReadChannel(1); // 湿度
ZigBee_SendData(temperature, light, humidity);
Delay_ms(1000); // 每秒发送一次
}
}
3.2 DS18B20 温度读取程序
float DS18B20_Read(void)
{
uint16_t temp;
float value;
DS18B20_Start();
temp = DS18B20_GetData();
value = temp * 0.0625; // 分辨率 0.0625℃
return value;
}
3.3 ADC 模拟量采集程序
uint16_t ADC_ReadChannel(uint8_t channel)
{
ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_55Cycles5);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
return ADC_GetConversionValue(ADC1) / 40; // 转换为0-100
}
3.4 ZigBee 通信程序
void ZigBee_SendData(float temp, uint16_t light, uint16_t hum)
{
char buffer[32];
sprintf(buffer,"T=%.1f;L=%d;H=%d\r\n", temp, light, hum);
USART_SendString(USART1, buffer);
}
3.5 从机接收与显示程序
#include "stm32f10x.h"
#include "lcd1602.h"
#include "zigbee.h"
float temperature;
uint16_t light, humidity;
uint32_t lastTime;
int main(void)
{
SystemInit();
LCD1602_Init();
ZigBee_Init();
LCD_ShowString(0,0,"Smart Greenhouse");
while(1)
{
if(ZigBee_ReceiveData(&temperature, &light, &humidity))
{
lastTime = millis();
LCD_SetCursor(0,1);
LCD_Printf("T:%.1f L:%d H:%d", temperature, light, humidity);
}
else if(millis() - lastTime > 5000) // 5秒未收到数据
{
LCD_SetCursor(0,1);
LCD_ShowString(0,1,"T:xx L:xx H:xx");
}
}
}
4 总结
本系统基于 STM32F103C8T6 单片机 和 ZigBee 无线通信技术,实现了智能农业大棚环境参数监测。其主要特点如下:
- 多参数采集:温度、光照、湿度数据实时获取。
- 无线传输:利用 CC2530 ZigBee 模块实现主机与从机的数据通信。
- 实时显示:LCD1602 液晶模块直观显示检测结果。
- 链路检测:当主机停止工作或信号丢失时,从机自动显示“xx”,保证用户能及时获知系统状态。
该系统结构清晰、扩展性强,适合在农业物联网应用中推广,为大棚自动化和智慧农业提供有力支持。