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

用STM32和DHT11做个智能温湿度计:从硬件接线到软件调试的全过程记录

STM32与DHT11打造智能温湿度监测系统从硬件搭建到功能扩展全指南在物联网和智能家居快速发展的今天环境监测已成为许多项目的核心需求。本文将带你从零开始构建一个基于STM32和DHT11的智能温湿度监测系统不仅实现基础数据采集还包含OLED显示、数据记录和按键交互等进阶功能。1. 项目规划与硬件选型1.1 核心组件介绍STM32F103C8T6蓝莓派开发板作为主控制器具有以下优势72MHz Cortex-M3内核性能充沛64KB Flash 20KB SRAM丰富的外设接口GPIO、I2C、USART等成本低廉且社区资源丰富DHT11温湿度传感器特点数字信号输出免去ADC转换湿度测量范围20-90%RH (±5%)温度测量范围0-50℃ (±2℃)单总线通信接线简单OLED显示屏选择考量0.96寸I2C接口SSD1306模块128x64分辨率自发光、高对比度相比LCD1602显示信息更丰富1.2 硬件连接示意图STM32F103C8T6 外设模块 ---------- ---------- | | | | | PB5 |-----| DHT11 | | | | DATA | | | | | | PB6 |------| OLED | | | | SCL | | PB7 |-----| SDA | | | | | | PA0 |-----| 按键1 | | | ---------- ----------提示实际接线时注意上拉电阻配置DHT11数据线建议接4.7K上拉I2C总线通常模块已内置上拉电阻2. 开发环境搭建2.1 工具链安装推荐使用STM32CubeIDE一站式解决方案从ST官网下载安装包安装时勾选STM32F1系列支持包安装完成后配置代码格式化风格个人偏好LLVM风格# 验证工具链安装成功的快速方法 $ arm-none-eabi-gcc --version arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10-2020-q4-major)2.2 CubeMX工程配置关键配置步骤时钟树配置HSE 8MHz → PLL → 72MHz系统时钟GPIO设置PB5DHT11数据线开漏输出输入模式PB6/PB7I2C1接口PA0按键输入下拉模式I2C参数标准模式100kHz7位地址模式启用I2C中断// 自动生成的I2C初始化代码片段 hi2c1.Instance I2C1; hi2c1.Init.ClockSpeed 100000; hi2c1.Init.DutyCycle I2C_DUTYCYCLE_2; hi2c1.Init.OwnAddress1 0; hi2c1.Init.AddressingMode I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode I2C_DUALADDRESS_DISABLE; hi2c1.Init.OwnAddress2 0; hi2c1.Init.GeneralCallMode I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode I2C_NOSTRETCH_DISABLE;3. DHT11驱动开发3.1 单总线通信协议解析DHT11的典型通信时序阶段主机动作从机响应时间参数启动信号拉低≥18ms等待18-30ms响应信号释放总线拉低80us后拉高80us固定160us数据传输每bit起始拉低50us高电平持续时间区分0/126-28us(0) / 70us(1)// DHT11读取函数实现 uint8_t DHT11_ReadData(DHT11_Data *data) { uint8_t buffer[5] {0}; // 启动信号 DHT11_IO_OUT(); DHT11_LOW(); HAL_Delay(20); DHT11_HIGH(); delay_us(30); // 等待响应 DHT11_IO_IN(); if(DHT11_Read() ! 0) return 1; while(DHT11_Read() 0); while(DHT11_Read() 1); // 接收40bit数据 for(int i0; i5; i) { for(int j0; j8; j) { while(DHT11_Read() 0); // 等待50us低电平结束 delay_us(35); // 关键判别点 if(DHT11_Read() 1) { buffer[i] | (1 (7-j)); while(DHT11_Read() 1); } } } // 校验和验证 if(buffer[0] buffer[1] buffer[2] buffer[3] buffer[4]) { >// 页面切换状态机实现 typedef enum { PAGE_MAIN, PAGE_HISTORY, PAGE_SETTINGS, PAGE_MAX } DisplayPage; void OLED_UpdateDisplay(DisplayPage page) { switch(page) { case PAGE_MAIN: OLED_Clear(); OLED_ShowString(1, 1, Temp: ); OLED_ShowNum(1, 7, data.temperature, 2); OLED_ShowString(2, 1, Humi: ); OLED_ShowNum(2, 7, data.humidity, 2); break; case PAGE_HISTORY: // 历史记录显示实现 break; default: break; } }4.2 图形化显示技巧利用OLED的位图特性实现更丰富的显示效果// 温度计图标定义 const uint8_t temp_icon[] { 0x18, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x18 }; void OLED_DrawIcon(uint8_t x, uint8_t y, const uint8_t *icon) { OLED_SetPos(x, y); for(int i0; i32; i) { OLED_WriteData(icon[i]); } }5. 功能扩展实现5.1 按键控制模块通过状态机实现稳定的按键检测typedef struct { GPIO_TypeDef* GPIOx; uint16_t GPIO_Pin; uint8_t prev_state; uint32_t press_time; } Button; void Button_Update(Button *btn) { uint8_t curr_state HAL_GPIO_ReadPin(btn-GPIOx, btn-GPIO_Pin); if(curr_state ! btn-prev_state) { if(curr_state GPIO_PIN_SET) { // 按键释放 if(btn-press_time 20 btn-press_time 1000) { // 短按动作 printf(Button short press\n); } btn-press_time 0; } btn-prev_state curr_state; } else if(curr_state GPIO_PIN_RESET) { // 按键按下 btn-press_time; } } // 使用示例 Button mode_btn {GPIOA, GPIO_PIN_0, GPIO_PIN_SET, 0}; while(1) { Button_Update(mode_btn); HAL_Delay(10); }5.2 数据记录功能利用STM32内部Flash模拟EEPROM存储关键数据#define FLASH_PAGE_SIZE 0x400 // 1KB for F103 #define SETTINGS_ADDR ((uint32_t)0x0800FC00) // 最后一页 void Flash_WriteSettings(void) { FLASH_EraseInitTypeDef erase; uint32_t page_error; HAL_FLASH_Unlock(); erase.TypeErase FLASH_TYPEERASE_PAGES; erase.PageAddress SETTINGS_ADDR; erase.NbPages 1; HAL_FLASHEx_Erase(erase, page_error); uint16_t *data (uint16_t*)settings; for(int i0; isizeof(settings)/2; i) { HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, SETTINGS_ADDR i*2, data[i]); } HAL_FLASH_Lock(); }6. 系统优化与调试6.1 低功耗设计通过STM32的睡眠模式降低功耗void Enter_LowPowerMode(void) { // 配置唤醒源如EXTI HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); // 进入停止模式 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // 唤醒后重新初始化时钟 SystemClock_Config(); }6.2 常见问题排查DHT11通信失败的可能原因及解决方案无响应检查接线是否正确VCC、GND、DATA确认上拉电阻已连接4.7KΩ测量供电电压3.3V-5V校验和错误增加启动后的延时DHT11需要1s稳定时间检查时序精度特别是微秒级延时避免频繁读取间隔≥1s数据不稳定添加软件滤波如滑动平均检查电源去耦电容建议100nF避免长距离布线建议20cm7. 项目进阶方向7.1 无线传输扩展通过ESP-01S模块增加WiFi功能// AT指令控制示例 void ESP_SendData(float temp, float humi) { UART_SendString(ATCIPSTART\TCP\,\api.thingspeak.com\,80\r\n); Delay_ms(1000); char cmd[128]; sprintf(cmd, GET /update?api_keyXXXfield1%.1ffield2%.1f\r\n, temp, humi); UART_SendString(ATCIPSEND); UART_SendNumber(strlen(cmd)); UART_SendString(\r\n); Delay_ms(500); UART_SendString(cmd); }7.2 外壳设计与电源管理3D打印外壳设计建议预留传感器通风孔考虑OLED可视角度加入挂墙安装孔电源方案选择锂电池充电管理如TP4056太阳能供电系统5V USB电源适配器在完成基础功能后尝试添加更多传感器如CO2、光照或接入智能家居平台将项目升级为真正的环境监测站。

相关文章:

用STM32和DHT11做个智能温湿度计:从硬件接线到软件调试的全过程记录

STM32与DHT11打造智能温湿度监测系统:从硬件搭建到功能扩展全指南 在物联网和智能家居快速发展的今天,环境监测已成为许多项目的核心需求。本文将带你从零开始构建一个基于STM32和DHT11的智能温湿度监测系统,不仅实现基础数据采集&#xff0…...

别再只看RMS粗糙度了!用Huray模型手把手教你预测PCB铜箔高频损耗(附Python代码)

突破传统:用Huray雪球模型精准预测PCB铜箔高频损耗的工程实践 在高速PCB设计领域,GHz频段下的信号完整性分析一直是工程师们的痛点。传统基于RMS粗糙度的Hammerstad模型在低频段尚可应付,但当频率突破10GHz后,其预测误差往往高达3…...

TrendForge 精选 9 个热门开源项目:Python 最活跃,FinceptTerminal 获星最多

TrendForge 每日精选 9 个热门开源项目:Python 最活跃,FinceptTerminal 获星最多 TrendForge 每日都会精选最具潜力的开源项目,今日共收录 9 个热门项目,且提供了智能中文翻译版,方便大家理解项目描述。 今日最热项目 …...

从软木塞到工程泡沫:泊松比如何定义材料的变形世界

1. 泊松比:材料变形的"身份证" 第一次听说泊松比这个词,是在大学材料力学课上。当时教授拿着橡胶带用力拉扯,问我们:"为什么橡皮筋变细了?"这个看似简单的现象背后,藏着材料科学中最重…...

RWKV7-1.5B-world惊艳效果:输入‘画一只猫’→文本生成→‘Describe in English’→专业动物学描述

RWKV7-1.5B-world惊艳效果:输入画一只猫→文本生成→Describe in English→专业动物学描述 1. 模型概述 RWKV7-1.5B-world是基于第7代RWKV架构的轻量级双语对话模型,拥有15亿参数。该模型采用创新的线性注意力机制替代传统Transformer的自回归结构&…...

IIT海德拉巴与微软研究院联手揭开多模态推理模型的隐秘缺陷

这项由印度理工学院海德拉巴分校计算机科学与工程系与微软研究院(班加罗尔)联合开展的研究,以预印本形式于2026年4月9日发布在arXiv平台,编号为arXiv:2604.08476。感兴趣的读者可通过该编号检索完整论文。一、答对了,但…...

别再用Docker镜像打包Dify客户端了!C# 14原生AOT单文件部署正在重构云原生交付范式(限时开放压测数据集)

第一章:Dify客户端云原生交付范式的演进与重构动因在AI应用规模化落地的背景下,Dify客户端从单体打包部署逐步转向以Kubernetes为核心的云原生交付体系。这一转变并非单纯的技术升级,而是应对多租户隔离、边缘协同推理、热插拔插件治理及跨云…...

小白也能搞定:私有化Qwen3-VL:30B并接入飞书机器人完整教程

小白也能搞定:私有化Qwen3-VL:30B并接入飞书机器人完整教程 1. 准备工作与环境检查 1.1 确认上篇部署完成 在开始本教程前,请确保已完成以下准备工作: 已在CSDN星图AI云平台完成Qwen3-VL:30B的私有化部署获取了可正常访问的云服务器实例熟…...

Dify文档解析延迟超8秒?紧急上线前必做的6项性能压测与异步分片解析改造清单

第一章:Dify文档解析延迟超8秒?紧急上线前必做的6项性能压测与异步分片解析改造清单当Dify在生产环境遭遇文档解析平均延迟突破8秒(P95 > 8300ms),尤其在PDF/长Markdown批量导入场景下,常规同步解析已成…...

SecGPT-14B作品集:15个真实安全问答+5个日志溯源对话实录

SecGPT-14B作品集:15个真实安全问答5个日志溯源对话实录 1. SecGPT-14B网络安全大模型介绍 SecGPT-14B是由云起无垠团队开发的开源网络安全大模型,专注于提升安全防护的智能化水平。该模型基于vLLM框架部署,并通过Chainlit前端提供交互式体…...

终极指南:如何免安装Office快速预览Word、Excel和PPT文件

终极指南:如何免安装Office快速预览Word、Excel和PPT文件 【免费下载链接】QuickLook.Plugin.OfficeViewer Word, Excel, and PowerPoint plugin for QuickLook. 项目地址: https://gitcode.com/gh_mirrors/qu/QuickLook.Plugin.OfficeViewer 想要在不安装庞…...

STM32芯片‘身份证’读取指南:巧用ST-LINK Utility查看FLASH、芯片ID与版本信息

STM32芯片深度诊断:用ST-LINK Utility解锁硬件信息与固件分析 当一块来历不明的STM32开发板落到你手中,或者遇到一台"锁死"的设备需要修复时,如何快速获取芯片的关键信息?ST-LINK Utility这个看似简单的工具&#xff0c…...

别再只会记流水账了!用Obsidian双链功能,把你的笔记变成可复用的知识卡片

从零散记录到知识网络:用Obsidian双链构建可复用的知识体系 你是否曾在回顾笔记时,发现那些曾经精心记录的内容像被锁在抽屉里的纸片,明明有价值却难以调用?传统笔记工具让我们养成了"收集即掌握"的错觉,直…...

为什么你的.NET AI服务无法突破200 QPS?揭秘JIT预编译+NativeAOT+TensorRT插件协同失效的3个隐性陷阱

第一章:为什么你的.NET AI服务无法突破200 QPS?揭秘JIT预编译NativeAOTTensorRT插件协同失效的3个隐性陷阱当.NET开发者将AI推理服务从Kestrel托管模型迁移至NativeAOT TensorRT加速路径时,常遭遇QPS卡死在180–200区间的现象——即使CPU利用…...

GraalVM内存优化避坑清单,从Class Initialization到Reflection配置的11个致命疏漏及修复代码模板

第一章:GraalVM静态镜像内存优化的底层逻辑与性能拐点GraalVM 的 Native Image 技术通过提前编译(AOT)将 Java 应用编译为平台原生可执行文件,彻底绕过 JVM 运行时。其内存模型的核心变革在于:**运行时堆空间被静态划分…...

从‘Shape’到真实项目:在ASP.NET Core Web API中如何优雅地使用C#继承设计模型?

从电商系统实战看C#继承在ASP.NET Core中的高阶应用 当我们在Visual Studio中新建一个ASP.NET Core Web API项目时,那些自动生成的Controller基类和DbContext基类已经暗示了继承在这个框架中的核心地位。但很多开发者对继承的理解仍停留在"动物->猫狗"…...

如何用AI一键去除视频背景?开源工具backgroundremover实战指南

如何用AI一键去除视频背景?开源工具backgroundremover实战指南 【免费下载链接】backgroundremover Background Remover lets you Remove Background from images and video using AI with a simple command line interface that is free and open source. 项目地…...

UVM sequence仲裁实战:用lock/grab和优先级宏解决多sequence并发冲突问题

UVM Sequence仲裁实战:精准控制多Sequence并发冲突 在复杂SoC验证环境中,多个并发运行的sequence往往需要精确协调。想象这样一个场景:AHB总线上的正常配置sequence正在发送数据包,突然高优先级的中断sequence需要立即抢占总线&am…...

多速率信号处理:采样率转换与高效实现技术

1. 多速率信号处理基础概念多速率信号处理是数字信号处理领域的一项核心技术,它研究如何高效地改变离散时间信号的采样率。在现实工程应用中,我们经常需要在不同采样率的系统之间转换信号,例如将CD音质的44.1kHz音频转换为DVD标准的48kHz。传…...

第三章-03-练习案例:成年人判断

1.问题2.代码# 03-案例:成年人判断 # 获取键盘输入 age int(input("请输入你的年龄:"))# 通过if判断是否是成年人 if age > 18:print("您已成年,游玩需要买票,10元.")print("祝您游玩愉快") ​...

Windows终极优化神器:Chris Titus Tech WinUtil快速上手指南

Windows终极优化神器:Chris Titus Tech WinUtil快速上手指南 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 还在为Windows系统繁…...

Noto字体技术架构:构建全球化多语言字体系统的企业级解决方案

Noto字体技术架构:构建全球化多语言字体系统的企业级解决方案 【免费下载链接】noto-fonts Noto fonts, except for CJK and emoji 项目地址: https://gitcode.com/gh_mirrors/no/noto-fonts Noto字体是Google推出的开源多语言字体项目,旨在解决…...

Linux命令:ping

ping 命令 基本介绍 ping 命令用于测试网络连接是否正常,通过向目标主机发送 ICMP(Internet Control Message Protocol)回显请求,并等待目标主机的回显响应。它是 Linux 系统中常用的网络测试工具之一。 资料合集:http…...

Mac用户必备:12306ForMac抢票助手完整使用指南

Mac用户必备:12306ForMac抢票助手完整使用指南 【免费下载链接】12306ForMac An unofficial 12306 Client for Mac 项目地址: https://gitcode.com/gh_mirrors/12/12306ForMac 你是否曾为在Mac上抢购火车票而烦恼?传统网页版12306在高峰期经常卡顿…...

三步轻松搞定微博相册批量下载:Python多线程神器终极指南

三步轻松搞定微博相册批量下载:Python多线程神器终极指南 【免费下载链接】Sina-Weibo-Album-Downloader Multithreading download all HD photos / pictures from someones Sina Weibo album. 项目地址: https://gitcode.com/gh_mirrors/si/Sina-Weibo-Album-Do…...

别再裸跑容器了!1份经37家头部云厂商联合验证的Docker沙箱基线配置(含YAML/Ansible/Terraform三版本)

第一章:Docker沙箱安全基线的演进与行业共识Docker沙箱安全基线并非静态规范,而是随容器运行时漏洞披露、Kubernetes生态演进及合规要求升级持续迭代的技术契约。早期Docker默认配置(如root用户运行、共享宿主机命名空间、未限制capabilities…...

基于ROS2的多功能自主作业机器人设计与实现

1. 项目概述:多功能自主作业机器人平台作为一名从事机器人开发超过8年的工程师,我一直想打造一台能真正解决实际问题的户外作业机器人。这个项目始于去年冬天,当时我在自家院子里铲雪时突然想到:为什么不能造一台能自动完成庭院维…...

AI Agent Skill Kit:从工具调用到智能技能编排的技术演进

2024 年到 2026 年,大语言模型(LLM)的能力边界正在以惊人的速度向外扩展。如果说早期的 LLM 还只是一个"会说话"的文本生成器,那么今天的 AI Agent 已经具备感知环境、规划任务、调用工具并执行复杂操作的能力。然而,在 Function Calling、MCP(Model Context P…...

Windows Cleaner终极指南:如何快速释放20GB+磁盘空间并提升系统性能

Windows Cleaner终极指南:如何快速释放20GB磁盘空间并提升系统性能 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Windows…...

OpenSpec 技术架构深度解析:规范驱动 AI 编程的工程化实践

随着大语言模型(LLM)能力的飞跃式提升,AI 编程助手已经从概念走向生产。Claude Code、Cursor、Copilot 等工具让开发者能够通过自然语言指令快速生成代码,极大地提升了开发效率。然而,这种"氛围编程"(Vibe Coding)模式在带来便利的同时,也暴露出严重的工程化…...