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

基于STM32的多功能温室大棚环境监测系统:实时显示、远程监控与智能调节温湿度

基于stm32多路温室大棚监测 容易制作 主要功能: [1]OLED屏可以实时显示四路温湿度数据 [2]手机APP可以远程监控四路温湿度数据 [3]温度湿度阈值均可手动通过按键设置 温度或者湿度超过阈值上限打开排气扇 温度低于阈值打开加热器 湿度低于阈值打开加湿器 原理图pcb使用立创eda 软件Keil5 主控芯片是stm32f103c8t6 WIFI模块使用 esp 8266 云平台使用阿里云

搞个温室大棚监测系统其实没想象中难,咱们今天就拿STM32F103C8T6这个性价比之王来折腾。先看硬件清单:四个DHT11温湿度探头(别买成DHT22,引脚不通用)、0.96寸OLED屏、ESP8266-01S模组,外加几个按键和继电器模块。原理图用立创EDA画特别方便,记得给8266单独供电,这货耗电跟小饿狼似的。

先上核心代码——温湿度采集部分:

// 四路传感器GPIO定义 #define DHT1_PORT GPIOB #define DHT1_PIN GPIO_Pin_12 //...其他三路类似 void Read_DHTs(float temp[4], float humi[4]){ for(int i=0; i<4; i++){ DHT_Read(&dht[i]); // 自定义的DHT驱动 temp[i] = dht[i].temperature; humi[i] = dht[i].humidity; Delay_ms(50); // 防止连续读取冲突 } }

这个循环读取要注意间隔时间,我之前连续读取导致数据漂移,后来加了50ms延时稳如老狗。OLED显示用硬件I2C驱动,注意把四路数据排版好看点,别挤成一坨。

阈值设置才是精髓,用按键控制:

// 按键状态机处理 if(set_mode){ switch(current_param){ case TEMP_HIGH: temp_high += (key_up)?1:-1; break; //...其他三个参数类似 } Save_Thresholds(); // 写入Flash保存 }

这里有个坑——STM32的Flash写入前要先解锁,我用的是库函数自带的Flash操作,记得页地址别覆盖程序区。保存时建议用结构体打包四个阈值,避免多次擦写。

基于stm32多路温室大棚监测 容易制作 主要功能: [1]OLED屏可以实时显示四路温湿度数据 [2]手机APP可以远程监控四路温湿度数据 [3]温度湿度阈值均可手动通过按键设置 温度或者湿度超过阈值上限打开排气扇 温度低于阈值打开加热器 湿度低于阈值打开加湿器 原理图pcb使用立创eda 软件Keil5 主控芯片是stm32f103c8t6 WIFI模块使用 esp 8266 云平台使用阿里云

阿里云通信这块最折腾,ESP8266的AT指令要配置成透传模式:

void ESP_SendData(float* temp, float* humi){ char buffer[128]; sprintf(buffer,"{\"temp1\":%.1f,\"humi1\":%.1f,...}",temp[0],humi[0],...); USART_SendString(USART2, "AT+CIPSEND=0,128\r\n"); Delay_ms(100); USART_SendString(USART2, buffer); }

注意JSON格式的引号要用转义字符,我在这卡了半天才发现。云端记得配置物模型,每个传感器对应一个属性点。

控制逻辑简单粗暴:

void Control_Devices(){ for(int i=0; i<4; i++){ if(temp[i] > temp_high) Relay_On(FAN); // 开风扇 else if(temp[i] < temp_low) Relay_On(HEATER); if(humi[i] > humi_high) Relay_On(FAN); else if(humi[i] < humi_low) Relay_On(HUMIDIFIER); } }

继电器驱动记得加光耦隔离,别让大电流烧了单片机GPIO。实测发现加湿器和加热器别同时开,电源容易撑不住。

最后说下PCB布局:模拟传感器走线远离数字电路,8266的天线区域要净空。电源部分多放几个滤波电容,我第一版没加导致8266启动时OLED会闪屏。完整工程代码已经扔Github了,需要自取。这项目最适合练手,从传感器到云端全链路打通,做完感觉自己能去搞智慧农业了(笑)。

http://www.jsqmd.com/news/616382/

相关文章:

  • Gradio UI定制化:修改SenseVoice-Small webui.py实现多语言切换+结果导出功能
  • 20230908直播录播回放
  • VOOHU沃虎单对以太网(SPE)技术白皮书:原理、标准、应用与选型
  • 2026化工行业高仓(6~12 米)条码采集方案:海雅达HDT500“12米中远距扫描”的5寸手持终端PDA
  • GTE-Base-ZH镜像体验:可视化界面+API,双模式交互更便捷
  • 2026企业用工数字化:如何选择适合自己的企业培训系统?
  • PHP 8.9 JIT开启后反而变慢?深度剖析opcache.jit_buffer_size与CPU缓存行对齐的隐性冲突
  • 直播带货系统源码开发需要哪些功能?电商直播平台搭建详解
  • 20230930直播实录
  • sp-html2canvas-render在iOS中跨域问题
  • 长沙这个酒吧好玩到让你不想回家!
  • Vue 2 与 Vue 3 的区别
  • Windows Terminal 文本出现黑色背景问题解决方法
  • java项目(附资料)-基于SpringBoot+Vue前后端分离的在线商城系统设计与实现
  • Windows 11系统优化完全指南:从卡顿到流畅的专业解决方案
  • AdMergeX 斩获信通院铸基计划双项权威认可
  • 20231022探讨赚钱直播实录
  • 根据渠道来实现不通逻辑的方法
  • 从零构建统一大模型应用平台:对话、代码、任务代理全解析!
  • html怎么用inert属性禁用_HTML如何通过Inert暂停交互区域
  • OpenClaw个人搜索引擎:Qwen3-14b_int4_awq构建本地文件语义检索系统
  • UI 动效设计:让界面活起来的艺术
  • python 输出菱形(两种方法)
  • 20231231直播实录
  • 打破语言壁垒:Translumo实时屏幕翻译工具使用指南
  • [特殊字符] 为什么插 OTG 转接头就能读 U 盘?Linux 内核从 ID 引脚到 /dev/sda 全流程解析
  • FreakStudio粮
  • OpenClaw容器化部署:Docker打包Kimi-VL-A3B-Thinking多模态服务的完整流程
  • InnoDB存储结构全解析:行页区段与单表W行的关系偶
  • 【vllm】vllm/docs/configuration/optimization.md