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

STM32+OLED+DHT11:做一个能显示温湿度的迷你气象站(开源硬件清单)

STM32OLEDDHT11打造高性价比桌面气象站的完整指南从零开始构建你的迷你气象站去年夏天我在工作室调试设备时发现窗台上的植物总是蔫蔫的。直到偶然用温湿度计测量才发现这个角落的湿度比房间其他位置低了近30%。这个发现让我意识到微环境数据对日常生活的重要性。于是我开始着手设计一个成本低廉但功能完备的桌面气象站能够同时监测温湿度、风速和风向并将数据直观显示在OLED屏幕上。这个项目特别适合电子爱好者、创客和学生群体。它不仅能够帮助你理解传感器工作原理、掌握STM32开发技巧还能让你获得一个实用的环境监测工具。整套方案的成本可以控制在200元以内大部分元件都能在常见的电子商城轻松购得。1. 硬件选型与物料清单1.1 核心控制器选择STM32系列微控制器是这个项目的理想选择特别是对于初学者来说STM32F103C8T6蓝莓开发板价格约15-25元具有足够的GPIO和通信接口资源需求至少2个UART接口用于风速风向传感器和调试I2C接口用于OLED屏幕1个普通GPIO用于DHT11// STM32引脚配置示例 #define DHT11_PIN GPIO_PIN_0 #define DHT11_PORT GPIOA #define I2C_SCL_PIN GPIO_PIN_6 #define I2C_SDA_PIN GPIO_PIN_7 #define I2C_PORT GPIOB1.2 传感器对比与选择温湿度传感器选项对比型号精度范围响应时间接口类型价格区间DHT11±2℃/±5%2秒单总线5-10元DHT22±0.5℃/±2%2秒单总线15-25元SHT30±0.2℃/±2%8秒I2C30-50元提示对于入门项目DHT11完全够用。如果追求更高精度可以考虑DHT22但需要注意代码需要相应调整。风速风向传感器选择要点RS485接口型号抗干扰能力强适合长距离传输需要额外的MAX485模块约5元脉冲输出型号接口简单直接连接MCU的GPIO但易受电磁干扰我最终选择了RS485接口的型号虽然需要额外的转换模块但在稳定性上更有保障。1.3 显示模块选型OLED屏幕有几种常见尺寸和接口0.96寸I2C接口最常用接线简单价格约15-25元1.3寸SPI接口显示面积更大但占用更多IO口彩色TFT液晶显示效果更好但驱动复杂且成本高// OLED初始化代码示例 void OLED_Init(void) { OLED_WR_Byte(0xAE, OLED_CMD); // 关闭显示 OLED_WR_Byte(0xD5, OLED_CMD); // 设置显示时钟分频 OLED_WR_Byte(0x80, OLED_CMD); // 建议值 // 更多初始化命令... OLED_WR_Byte(0xAF, OLED_CMD); // 开启显示 }2. 硬件连接与供电方案2.1 完整接线图所有模块的连接关系如下STM32核心连接PA0 → DHT11数据线PB6 → I2C SCLPB7 → I2C SDAPA9 → USART1_TX (接MAX485模块DI)PA10 → USART1_RX (接MAX485模块RO)MAX485模块连接A → 风速传感器A线B → 风速传感器B线DE/RE → PA1 (控制收发状态)电源连接所有模块共用3.3V电源建议总电流不低于500mA注意DHT11虽然标称工作电压3.3-5.5V但在3.3V下工作更稳定与STM32电平匹配更好。2.2 供电方案对比方案优点缺点适用场景USB供电简单方便电流有限(500mA)桌面固定使用18650电池便携需要充电管理移动监测9V电池稳压电压稳定效率低体积大长期无人值守太阳能电池完全自给自足成本高设计复杂户外长期监测对于大多数桌面使用场景USB供电是最简单可靠的选择。如果要做成便携式设备可以考虑使用TP4056充电模块搭配18650电池。3. 软件设计与关键代码解析3.1 系统架构设计整个系统的软件架构分为四个主要部分传感器驱动层DHT11温湿度读取风速风向传感器数据解析数据处理层单位转换数据校验简单滤波处理显示层OLED界面设计数据刷新策略通信层串口调试输出可选的数据上传功能3.2 DHT11驱动实现DHT11使用单总线协议时序要求严格#define DHT11_OUT_H HAL_GPIO_WritePin(DHT11_PORT, DHT11_PIN, GPIO_PIN_SET) #define DHT11_OUT_L HAL_GPIO_WritePin(DHT11_PORT, DHT11_PIN, GPIO_PIN_RESET) #define DHT11_IN HAL_GPIO_ReadPin(DHT11_PORT, DHT11_PIN) uint8_t DHT11_Read_Data(float *temperature, float *humidity) { uint8_t data[5] {0}; uint8_t i,j; DHT11_OUT_L; HAL_Delay(18); // 主机拉低至少18ms DHT11_OUT_H; delay_us(20); // 主机拉高20-40us if(DHT11_IN) return 1; while(!DHT11_IN); // 等待从机响应 while(DHT11_IN); // 等待从机拉低 for(i0; i5; i) { for(j0; j8; j) { while(!DHT11_IN); // 等待50us低电平结束 delay_us(30); // 判断高电平持续时间 if(DHT11_IN) { data[i] | (1(7-j)); while(DHT11_IN); // 等待高电平结束 } } } if(data[4] ! (data[0]data[1]data[2]data[3])) return 2; *humidity data[0] data[1]*0.1; *temperature data[2] data[3]*0.1; return 0; }3.3 RS485风速传感器数据解析风速传感器通常采用Modbus-RTU协议数据帧格式如下字段长度说明设备地址1字节默认通常为0x01功能码1字节0x03表示读保持寄存器数据长度1字节后续数据的字节数数据N字节实际测量值CRC校验2字节校验前面所有字节解析代码示例uint16_t Parse_Wind_Speed(uint8_t *data, uint8_t len) { if(len 5) return 0xFFFF; // 无效数据 uint16_t crc CRC16(data, len-2); uint16_t recv_crc (data[len-1]8) | data[len-2]; if(crc ! recv_crc) return 0xFFFF; // 假设风速值在第一个寄存器大端格式 uint16_t speed (data[3]8) | data[4]; return speed; }4. 系统优化与扩展4.1 数据稳定性优化传感器数据常有波动可以采用以下滤波算法滑动平均滤波#define FILTER_LEN 5 float temp_filter[FILTER_LEN] {0}; uint8_t filter_index 0; float Moving_Average_Filter(float new_val) { temp_filter[filter_index] new_val; filter_index (filter_index 1) % FILTER_LEN; float sum 0; for(int i0; iFILTER_LEN; i) { sum temp_filter[i]; } return sum / FILTER_LEN; }中值滤波存储最近N次采样值排序后取中间值作为结果对突发干扰有很好效果4.2 显示界面设计OLED显示可以包含以下信息区域主显示区当前温度(大字体)当前湿度(大字体)风速(中等字体)状态区电池电量更新时间传感器状态趋势区简单的温湿度变化曲线需要至少128x64的OLED才能实现void Display_Data(float temp, float humi, uint16_t speed) { OLED_Clear(); // 显示温度 OLED_ShowString(0, 0, Temp:, 16); OLED_ShowNum(40, 0, (int)temp, 2, 16); OLED_ShowString(60, 0, C, 16); // 显示湿度 OLED_ShowString(0, 2, Humi:, 16); OLED_ShowNum(40, 2, (int)humi, 2, 16); OLED_ShowString(60, 2, %, 16); // 显示风速 OLED_ShowString(0, 4, Wind:, 16); OLED_ShowNum(40, 4, speed, 3, 16); OLED_ShowString(70, 4, m/s, 16); OLED_Refresh(); }4.3 低功耗优化如果需要电池供电可以考虑以下优化措施调整采样频率温湿度每分钟1次风速每10秒1次睡眠模式在采样间隔让STM32进入Stop模式使用RTC定时唤醒OLED控制不刷新时关闭显示使用局部刷新代替全屏刷新void Enter_Stop_Mode(uint32_t seconds) { // 配置RTC唤醒 HAL_RTCEx_SetWakeUpTimer_IT(hrtc, seconds*8, RTC_WAKEUPCLOCK_RTCCLK_DIV16); // 进入Stop模式 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // 唤醒后重新配置时钟 SystemClock_Config(); }5. 项目扩展思路这个基础框架可以扩展出许多有趣的应用数据记录功能添加SD卡模块按时间戳存储数据生成CSV文件供电脑分析无线传输增加ESP8266 WiFi模块上传数据到物联网平台实现手机远程监控报警功能设置温湿度阈值超过阈值时蜂鸣器报警或通过LED颜色变化提示太阳能供电添加小太阳能板配合锂电池管理实现完全自给自足3D打印外壳设计专用外壳增加安装孔位提升产品完成度// WiFi数据上传示例 void Upload_To_Server(float temp, float humi, float wind) { char cmd[128]; sprintf(cmd, ATCIPSTART\TCP\,\api.thingspeak.com\,80); ESP8266_Send_Cmd(cmd, 1000); sprintf(cmd, GET /update?api_keyYOUR_KEYfield1%.1ffield2%.1ffield3%.1f, temp, humi, wind); ESP8266_Send_Cmd(cmd, 1000); }常见问题与解决方案在实际搭建过程中可能会遇到以下典型问题DHT11读取失败检查接线是否正确确保上拉电阻(4.7K-10K)已接调整时序中的延时参数OLED不显示确认I2C地址(通常0x78或0x7A)检查电源电压(3.3V或5V)尝试重置初始化序列风速数据不稳定检查RS485终端电阻(120Ω)确保A/B线没有接反增加数据校验和滤波系统功耗过高检查各模块工作电流关闭未使用的STM32外设考虑使用低功耗模式显示刷新闪烁优化刷新策略使用局部刷新代替全屏刷新增加刷新间隔

相关文章:

STM32+OLED+DHT11:做一个能显示温湿度的迷你气象站(开源硬件清单)

STM32OLEDDHT11:打造高性价比桌面气象站的完整指南 从零开始构建你的迷你气象站 去年夏天,我在工作室调试设备时,发现窗台上的植物总是蔫蔫的。直到偶然用温湿度计测量才发现,这个角落的湿度比房间其他位置低了近30%。这个发现让我…...

终极指南:9种字重的开源几何无衬线字体Outfit完全解析

终极指南:9种字重的开源几何无衬线字体Outfit完全解析 【免费下载链接】Outfit-Fonts The most on-brand typeface 项目地址: https://gitcode.com/gh_mirrors/ou/Outfit-Fonts Outfit字体是一款专业的开源几何无衬线字体,专为品牌自动化设计而生…...

DragFlow框架:基于区域仿射监督的DiT图像编辑突破

1. 项目概述:DragFlow框架的核心突破在生成式AI快速发展的当下,图像编辑技术正经历从全局调整到像素级精确控制的范式转变。传统基于Stable Diffusion(SD)的拖拽编辑方法虽然实现了基本的交互式操作,但在处理复杂结构图…...

终极电池保护指南:BatteryChargeLimit如何让你的手机电池寿命延长一倍

终极电池保护指南:BatteryChargeLimit如何让你的手机电池寿命延长一倍 【免费下载链接】BatteryChargeLimit 项目地址: https://gitcode.com/gh_mirrors/ba/BatteryChargeLimit 你是否曾经为手机电池的快速衰减而烦恼?是否发现新手机使用一年后&…...

Allegro 16.6出Gerber避坑指南:从钻孔表到槽孔,新手必看的5个细节

Allegro 16.6出Gerber避坑指南:从钻孔表到槽孔,新手必看的5个细节 第一次使用Allegro 16.6输出Gerber文件时,那种既兴奋又忐忑的心情我至今记忆犹新。作为PCB设计流程中的关键环节,Gerber文件的质量直接决定了最终电路板的成败。本…...

从原理图到仿真波形:一步步拆解FPGA矩阵键盘的“行扫描法”

从原理图到仿真波形:FPGA矩阵键盘行扫描法的深度解析 在嵌入式系统开发中,矩阵键盘是一种常见且经济高效的人机交互解决方案。本文将带领读者从硬件原理到Verilog实现,逐步拆解FPGA驱动4x4矩阵键盘的全过程,特别聚焦行扫描法的实现…...

Air724UG模块(4G全网通GPRS开发)-下载AT或者DTU固件和入门使用

Air724UG(4G全网通GPRS)开发-硬件使用说明模块简介1.实物图2.尺寸引脚图3.模块供电①:micro,usb接口供电②:VCC供电(5V~18V)③:VBAT供电(3.6V~4.3V)4.AT指令通信使用MCU和模块进行AT指令通信时,需要用到以下引脚;RX1:模组串口AT指令接收数据引脚;TX1:模组串口AT指令发送数据引脚…...

5个高效配置技巧:Tvheadend电视服务器深度解析

5个高效配置技巧:Tvheadend电视服务器深度解析 【免费下载链接】tvheadend Tvheadend is the leading TV streaming server for Linux with ATSC, DVB-C/C2, DVB-S/S2, DVB-T/T2, IPTV, SAT>IP and unix pipe input sources 项目地址: https://gitcode.com/gh_…...

掌握 FloPy:Python 地下水流建模的完整指南

掌握 FloPy:Python 地下水流建模的完整指南 【免费下载链接】flopy A Python package to create, run, and post-process MODFLOW-based models. 项目地址: https://gitcode.com/gh_mirrors/fl/flopy FloPy 是一个功能强大的 Python 包,专门用于创…...

LLM策略合成在多智能体协作中的应用与优化

1. LLM策略合成:多智能体协作的新范式在传统多智能体强化学习(MARL)面临样本效率瓶颈的当下,大型语言模型(LLM)直接生成可执行策略代码的能力正在打开新的可能性。想象这样一个场景:10个智能体在虚拟环境中需要协调资源收集与公共物品维护&am…...

GodotPckTool完全解析:独立工具如何高效管理Godot游戏资源包

GodotPckTool完全解析:独立工具如何高效管理Godot游戏资源包 【免费下载链接】GodotPckTool Standalone tool for extracting and creating Godot .pck files 项目地址: https://gitcode.com/gh_mirrors/go/GodotPckTool 在Godot游戏开发流程中,资…...

别再死记公式了!用Proteus仿真带你直观理解运放的‘虚短’和‘虚断’

用Proteus仿真破解运放"虚短虚断":动态实验手册 第一次接触运算放大器时,教授在黑板上写下"虚短"和"虚断"四个字,台下二十多双眼睛里的困惑至今难忘。直到某天深夜,当我在Proteus里把示波器探头搭在…...

Display Driver Uninstaller深度解析:如何让显卡驱动问题迎刃而解

Display Driver Uninstaller深度解析:如何让显卡驱动问题迎刃而解 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-u…...

探索异端代码仓库:从设计哲学到工程实践的深度解析

1. 项目概述:一个“异端”的代码仓库在GitHub上,p-e-w/heretic这个项目名本身就充满了故事感。heretic,意为“异端”,在软件开发领域,这通常指向那些挑战主流范式、探索非传统路径的代码库。它不是某个知名框架的官方插…...

如何5秒内智能获取百度网盘提取码:免费开源工具实用指南

如何5秒内智能获取百度网盘提取码:免费开源工具实用指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘提取码而烦恼吗?每次找到心仪的学习资料、软件资源或影视内容,却卡在…...

为什么这个免费工具能让你3分钟搞定弹幕格式转换?

为什么这个免费工具能让你3分钟搞定弹幕格式转换? 【免费下载链接】DanmakuFactory 支持特殊弹幕的xml转ass格式转换工具 项目地址: https://gitcode.com/gh_mirrors/da/DanmakuFactory 还在为B站弹幕无法在其他播放器上显示而头疼吗?弹幕格式转换…...

别只盯着AlphaFold了!这5个免费蛋白质结构预测服务器,哪个更适合你的课题?

别只盯着AlphaFold了!这5个免费蛋白质结构预测服务器,哪个更适合你的课题? 刚拿到一条蛋白序列时,许多研究者会下意识地打开AlphaFold的界面。但你可能不知道的是,根据序列长度、同源模板可用性、计算资源等不同条件&…...

E7Helper:为《第七史诗》玩家设计的智能自动化助手

E7Helper:为《第七史诗》玩家设计的智能自动化助手 【免费下载链接】e7Helper 【Epic Seven Auto Bot】第七史诗多功能覆盖脚本(刷书签🍃,挂讨伐、后记、祭坛✌️,挂JJC等📛,多服务器支持📺&…...

别再只用SD卡了!手把手教你给W25Q16 SPI Flash移植FATFS文件系统(STM32实战)

嵌入式存储方案深度解析:为何W25Q16 SPI Flash比SD卡更适合你的项目? 在嵌入式系统开发中,存储方案的选择往往决定了项目的成败。许多开发者习惯性地选择SD卡作为默认方案,却忽视了更优的替代品——SPI Flash存储器。以W25Q16为代…...

Copilot Next 自动化工作流配置终极复盘(附可运行Demo仓库):涵盖Azure DevOps/Bitbucket/GitLab三平台适配,仅剩最后87份源码包

更多请点击: https://intelliparadigm.com 第一章:VS Code Copilot Next 自动化工作流配置 面试题汇总 VS Code Copilot Next 作为 GitHub 官方深度集成的下一代智能编程助手,其自动化工作流配置能力已成为前端与全栈工程师面试中的高频考点…...

K-Means聚类效果总不好?试试在Scikit-learn里用标准化欧氏距离优化你的模型

K-Means聚类效果总不好?试试在Scikit-learn里用标准化欧氏距离优化你的模型 当你在电商用户分群项目中遇到这样的场景:消费金额(0-10000元)和登录次数(1-100次)两个特征被放在同一个聚类模型里,…...

解锁论文通关秘籍:书匠策AI,降重与AIGC清除的“超能外挂”

在学术的浩瀚宇宙中,论文写作宛如一场星际探险,每一位学子都是勇敢的宇航员,怀揣着探索未知的梦想奋力前行。然而,当论文初稿完成,降重和应对AIGC(人工智能生成内容)检测这两颗“陨石”&#xf…...

键盘驱动鼠标控制工具mousemaster:提升效率与缓解手腕疲劳的终极方案

1. 项目概述:用键盘重新定义鼠标操作如果你和我一样,每天有超过8小时的时间与电脑为伴,那么手腕和手指的疲劳感,或者是在鼠标和键盘之间来回切换的低效感,一定不陌生。传统的鼠标操作,看似直观,…...

复现Window Seat视觉算法:动态云层模拟与实时渲染实战

1. 项目背景与核心目标去年NanoBanana 2团队发布的"Window Seat"视觉算法在业内引起了不小轰动。这个算法能通过普通摄像头捕捉的画面,实时生成仿佛坐在飞机舷窗边看到的云层动态效果。最近拿到他们开源的V3版本模型后,我决定完整复现这个神奇…...

CosineGate技术:基于余弦相似度的动态路由优化

1. CosineGate技术解析:基于余弦相似度的动态路由革命在深度学习领域,残差网络(ResNet)已经成为现代计算机视觉系统的基石架构。然而,传统残差网络存在一个根本性的效率问题——无论输入数据是否需要,所有残差块都必须执行完整的计…...

Role: 个性化健身教练

Role: 个性化健身教练 【免费下载链接】LangGPT LangGPT: Empowering everyone to become a prompt expert! 🚀 📌 结构化提示词(Structured Prompt)提出者 📌 元提示词(Meta-Prompt)发起者 &am…...

高效LLM应用评估:Ragas框架深入解析与实战指南

高效LLM应用评估:Ragas框架深入解析与实战指南 【免费下载链接】ragas Supercharge Your LLM Application Evaluations 🚀 项目地址: https://gitcode.com/gh_mirrors/ra/ragas Ragas评估框架为LLM应用提供了一套专业、完整的评估解决方案&#x…...

如何快速掌握高效投屏工具:MirrorCaster完整使用教程

如何快速掌握高效投屏工具:MirrorCaster完整使用教程 【免费下载链接】MirrorCaster 开源、高效、低延迟的Android投屏工具 项目地址: https://gitcode.com/gh_mirrors/mi/MirrorCaster 还在为手机投屏到电脑的延迟问题烦恼吗?MirrorCaster作为一…...

VS2017+Qt5.14.2+Vulkan环境搭建避坑指南:从零配置到跑通第一个Demo

VS2017Qt5.14.2Vulkan环境搭建全流程实战指南 如果你正在尝试将Vulkan与Qt结合开发,却频繁遭遇环境配置的各种"坑",这篇文章正是为你准备的。我们将从零开始,一步步解决那些让初学者头疼的问题——从SDK路径设置到项目文件配置&…...

别再只把全连接层当‘分类器’了:聊聊它在CNN、Transformer和自编码器里的那些‘隐藏’用法

全连接层的隐秘力量:超越分类器的多维应用探索 在深度学习的世界里,全连接层(Fully Connected Layer)常被简化为"分类器"的代名词——这种刻板印象掩盖了它作为神经网络"万能连接器"的真正价值。当我们跳出传…...