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

STM32F103ZE精英板驱动ESP8266与DHT11构建物联网网关,实现乐联网温湿度数据实时监控

1. 项目背景与硬件选型最近在做一个智能家居的小项目需要实时监控房间的温湿度数据。经过一番调研最终选择了STM32F103ZE精英板作为主控搭配ESP8266 WIFI模块和DHT11温湿度传感器。这个组合性价比高开发资源丰富特别适合物联网入门项目。先说说硬件选型的考虑。STM32F103ZE是ST的经典款72MHz主频够用自带串口、SPI、I2C等外设GPIO数量充足。精英板还集成了调试接口烧录程序特别方便。ESP8266我选的是正点原子的ATK-ESP8266模块自带PCB天线支持AT指令控制省去了自己开发WIFI协议栈的麻烦。DHT11虽然精度一般±2℃, ±5%RH但胜在价格便宜单总线通信也简单。这里有个小经验买ESP8266模块时要注意固件版本。我刚开始用的模块出厂固件不支持透传模式后来用安信可的Flash下载工具重新刷了固件才解决问题。建议新手直接购买已经刷好AT固件的模块能省去不少麻烦。2. 硬件连接与调试硬件连接其实很简单但有几个关键点需要注意。首先是电源ESP8266工作时峰值电流能达到200mA开发板的3.3V输出可能不够稳。我的做法是单独给WIFI模块供电或者在大电流时加个1000μF的电容缓冲。具体接线如下DHT11的DATA引脚接PC0VCC接3.3VGND接地ESP8266的TX接PA3(RX)RX接PA2(TX)CH_PD和VCC接3.3V特别注意ESP8266的IO0引脚要接高电平否则会进入烧录模式第一次调试建议先用串口助手测试。把ESP8266的TX/RX直接连USB转TTL模块用AT指令测试基本功能。常用的几个AT指令要熟记AT //测试模块是否正常 ATCWMODE1 //设置为STA模式 ATCWLAP //扫描附近WIFI ATCWJAPSSID,password //连接路由器3. 乐联网平台配置乐联网是个挺不错的物联网平台免费额度足够个人项目使用。注册账号后需要做三件事添加网关在我的网关页面点击添加系统会自动分配一个网关编号添加传感器为温湿度数据创建两个传感器节点记住它们的名称比如temp和humidity获取UserKey在账号设置里可以找到这个相当于API访问凭证平台支持HTTP和MQTT两种协议我们这里用HTTP更简单。发送数据的API地址是http://open.lewei50.com/api/V1/gateway/Updatesensors/[网关编号]请求头需要包含UserKey数据体是JSON格式的传感器值数组。4. STM32程序开发程序主要分三部分DHT11驱动、ESP8266通信、主逻辑控制。先说说DHT11的读取时序这个传感器对时序要求很严格void DHT11_Start(void) { GPIO_InitTypeDef GPIO_InitStruct; // 配置PC0为输出模式 GPIO_InitStruct.Pin GPIO_PIN_0; GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOC, GPIO_InitStruct); // 主机拉低18ms HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET); delay_ms(18); // 然后拉高20-40us HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET); delay_us(30); // 切换为输入模式等待响应 GPIO_InitStruct.Mode GPIO_MODE_INPUT; HAL_GPIO_Init(GPIOC, GPIO_InitStruct); }ESP8266的通信我封装了几个常用函数// 发送AT指令并等待响应 uint8_t ESP8266_SendCmd(char* cmd, char* resp, uint16_t timeout) { USART3_SendString(cmd); USART3_SendString(\r\n); return USART3_WaitResponse(resp, timeout); } // 初始化WIFI连接 void ESP8266_Init(void) { // 重置模块 ESP8266_SendCmd(ATRST, ready, 2000); delay_ms(1000); // 设置STA模式 ESP8266_SendCmd(ATCWMODE1, OK, 500); // 连接路由器 char wifi_cmd[100]; sprintf(wifi_cmd, ATCWJAP\%s\,\%s\, WIFI_SSID, WIFI_PASS); ESP8266_SendCmd(wifi_cmd, OK, 5000); // 设置单连接模式 ESP8266_SendCmd(ATCIPMUX0, OK, 500); }主程序中需要注意数据上传频率。DHT11的采样间隔建议不小于2秒乐联网免费账号的API调用频率也有限制每分钟约10次。我的做法是每10秒上传一次数据while(1) { if(DHT11_Read(temp, humi) SUCCESS) { LCD_DisplayTempHum(temp, humi); if(upload_cnt 10) // 10秒上传一次 { upload_cnt 0; Lewei_Upload(temp, humi); } } delay_ms(1000); }5. 数据上传与协议处理上传数据到乐联网需要构造HTTP POST请求。这里有个坑Content-Length的计算要准确乐联网的服务器对格式要求很严格。我的做法是先sprintf生成JSON数据再计算长度void Lewei_Upload(uint8_t temp, uint8_t humi) { char json_data[100]; sprintf(json_data, [{\Name\:\temp\,\Value\:%d},{\Name\:\humi\,\Value\:%d}], temp, humi); // 发送HTTP头 USART3_SendString(POST /api/V1/gateway/Updatesensors/01 HTTP/1.1\r\n); USART3_SendString(userkey: 你的UserKey\r\n); USART3_SendString(Host: open.lewei50.com\r\n); USART3_SendString(Content-Length: ); // 计算内容长度不包含末尾的\r\n char len_str[10]; sprintf(len_str, %d, strlen(json_data)-2); USART3_SendString(len_str); USART3_SendString(\r\n); USART3_SendString(Connection: close\r\n); USART3_SendString(\r\n); // 空行分隔头部和正文 // 发送JSON数据 USART3_SendString(json_data); }调试时建议先用网络调试工具测试API接口。我用的Postman先模拟STM32发送的请求确认没问题后再移植到代码里。常见的错误有UserKey错误或过期Content-Length计算不准JSON格式不对比如少了引号或括号传感器名称与平台配置不一致6. 平台数据显示优化乐联网后台提供了多种数据展示方式我主要用这三种实时仪表盘可以同时显示多个传感器的当前值设置报警阈值历史曲线查看温度湿度的变化趋势支持按小时/天/周统计手机APP安装乐联网APP后可以随时随地查看数据在网关管理页面有个实用功能是数据模拟可以先手动输入一些测试数据确认图表显示正常后再连接实际设备。我还启用了邮件报警功能当温度超过30℃时会收到通知。平台支持数据导出CSV这对后期分析很有帮助。比如我发现房间湿度每天早晨会突然升高检查后发现是隔壁卫生间的水汽渗透后来加了密封条就解决了。7. 常见问题排查在开发过程中踩过不少坑这里总结几个典型问题问题1ESP8266经常断线检查电源是否稳定最好单独供电尝试降低WIFI模块的发射功率AT指令ATRFPOWER40路由器设置里把2.4G频段固定在信道6避开拥挤信道问题2DHT11读取失败确保上电后等待1秒再进行首次读取检查接线长度DATA线最好不超过20cm如果一直失败尝试在DATA线加个4.7K上拉电阻问题3乐联网数据上传失败先用电脑直接访问API地址检查网络是否通畅查看返回的错误信息常见的是401认证失败和413数据过大如果使用移动网络有些运营商可能会拦截HTTP请求有个调试技巧在STM32上接个LED不同闪烁模式代表不同状态。比如快闪表示WIFI连接中慢闪表示数据上传中长亮表示正常工作。这样不用串口也能知道设备状态。8. 项目扩展思路这个基础框架可以扩展很多实用功能多传感器集成添加光照、空气质量等传感器本地存储用SPI Flash存储历史数据网络恢复后同步到云端低功耗优化改用STM32的低功耗模式电池供电微信通知通过乐联网的微信推送功能接收报警联动控制当温度过高时自动开启风扇通过继电器模块我最近正在尝试接入天猫精灵通过乐联网的语音助手接口可以直接用语音查询当前温湿度。下一步计划加入红外学习功能用STM32记录空调遥控器的信号实现温度自动调节。

相关文章:

STM32F103ZE精英板驱动ESP8266与DHT11构建物联网网关,实现乐联网温湿度数据实时监控

1. 项目背景与硬件选型 最近在做一个智能家居的小项目,需要实时监控房间的温湿度数据。经过一番调研,最终选择了STM32F103ZE精英板作为主控,搭配ESP8266 WIFI模块和DHT11温湿度传感器。这个组合性价比高,开发资源丰富,…...

2恒压供水,多台变频器 一台变频器,两台变频器,三台变频器都可以 变频器和plc用modbus...

2恒压供水,多台变频器 一台变频器,两台变频器,三台变频器都可以 变频器和plc用modbus通讯 ABB变频器,西门子plc 智能切换 PLC模拟量检测压力,变频器PID控制,PLC检测频率加减泵;在工业自动化领域…...

PyTorch AMP实战:用autocast与GradScaler解锁混合精度训练效能

1. 从显存爆炸到训练加速:为什么需要混合精度? 如果你在训练深度学习模型时遇到过"CUDA out of memory"的错误,那么混合精度训练可能就是你的救命稻草。我去年在训练一个3D医学图像分割模型时就遇到了这个问题——当我把batch size…...

基于MATLAB Simulink的PMSM永磁同步电机PI双闭环SVPWM矢量仿真模型与全套...

PMSM永磁同步电机PI双闭环SVPWM矢量matlab simulink仿真 17b及以上版本都可以打开 内容包含: 1.仿真波形截图 2.技术文档 3.相关文献 4.演示视频等,内容详见第一张图片,仿真模型见第二张图片c25 最近在研究PMSM(永磁同步电机)的控…...

视觉SLAM必备:Pangolin 0.5版本在Ubuntu20.04上的完整配置流程(兼容ORB-SLAM2)

视觉SLAM开发实战:Ubuntu 20.04下Pangolin 0.5的深度配置指南 在视觉SLAM开发领域,Pangolin作为轻量级的OpenGL显示与交互库,承担着可视化关键帧、地图点和相机轨迹的重要角色。许多经典SLAM框架如ORB-SLAM2都依赖其进行实时可视化调试。本文…...

Python调用FFmpeg报错127?手把手教你解决libopenh264.so.5缺失问题(附conda安装指南)

Python调用FFmpeg报错127?手把手教你解决libopenh264.so.5缺失问题(附conda安装指南) 当你兴致勃勃地准备用Python调用FFmpeg处理视频时,突然蹦出一个subprocess.CalledProcessError,还带着神秘的退出码127&#xff0c…...

Fluent仿真必看:如何正确设置边界条件避免计算结果失真?

Fluent仿真边界条件设置实战指南:从原理到避坑技巧 在计算流体动力学(CFD)仿真中,边界条件的设置往往被工程师们视为"黑箱操作"——要么直接套用模板参数,要么盲目调整直到结果"看起来合理"。这种…...

单片机代码执行的硬件本质:从晶体管到指令运行

1. 单片机识别与执行代码的硬件本质单片机并非“理解”代码,而是通过精密的硬件电路对二进制电平信号进行物理响应。这种响应过程完全由晶体管开关特性、组合逻辑与时序电路决定,不涉及任何语义解析或抽象认知。本文将从半导体物理特性出发,逐…...

信息论中的编码类型:从奇异码到即时码的实战应用指南

信息论中的编码类型:从奇异码到即时码的实战应用指南 在数字通信的世界里,编码就像一种特殊的语言,它决定了信息如何被压缩、传输和解码。想象一下,如果没有统一的编码规则,我们的手机、电脑和互联网将陷入一片混乱。信…...

从零构建基于TensorFlow与YOLO的端到端图像识别应用

1. 环境准备与工具安装 第一次接触图像识别项目时,最头疼的就是环境配置。我清楚地记得去年给某超市做商品识别系统时,光是CUDA和cuDNN的版本兼容问题就折腾了两天。后来总结了一套"万金油"安装方案,现在分享给大家。 首先明确我…...

别只盯着证书!软考软件评测师里,这些‘隐藏’知识点才是你面试的加分项

别只盯着证书!软考软件评测师里,这些‘隐藏’知识点才是你面试的加分项 当大多数考生还在死记硬背测试理论时,真正的职场赢家早已把目光投向考纲背后那些能直接转化为面试亮点的实战技能。软件评测师考试中,至少有30%的内容被应试…...

避坑指南:在Ubuntu 16.04上搞定xArm6与D435i手眼标定(附完整launch文件)

xArm6与D435i手眼标定实战避坑指南 在机器人视觉控制领域,手眼标定是连接机械臂与视觉系统的关键桥梁。本文将聚焦xArm6机械臂与Intel Realsense D435i深度相机的标定全流程,针对Ubuntu 16.04环境下特有的版本冲突、驱动兼容性问题,提供经过实…...

百度网盘黑科技:教你自定义分享密码(附最新可用代码)

百度网盘分享功能进阶技巧:个性化密码设置实战指南 在数字资源共享日益频繁的今天,百度网盘作为国内主流云存储平台,其文件分享功能被广泛使用。然而,系统自动生成的随机提取码往往难以记忆,给分享双方都带来不便。本…...

PDPS导出那智机器人离线程序避坑指南:丰田版TFD转换全流程详解

PDPS导出那智机器人离线程序避坑指南:丰田版TFD转换全流程详解 在工业自动化领域,那智机器人在汽车制造产线中扮演着重要角色。许多工程师在使用PDPS软件导出离线程序时,常会遇到丰田版TFD控制器无法直接识别的问题。本文将手把手带你解决这个…...

Python与Aria2实战:构建高效磁力链接解析与异步下载工具

1. 磁力链接与Aria2基础入门 磁力链接(Magnet URI)是一种基于文件内容标识的资源定位方式,它通过哈希值唯一标识文件资源,摆脱了对中心化服务器的依赖。与传统的种子文件相比,磁力链接只需一串字符就能启动下载&#x…...

避坑指南:解决Matplotlib调用LaTeX渲染公式时的常见报错(如字体缺失、编译失败)

避坑指南:解决Matplotlib调用LaTeX渲染公式时的常见报错 当你在Matplotlib中启用LaTeX渲染时,可能会遇到各种令人头疼的问题。从"LaTeX not found"到字体包缺失,再到特殊符号渲染错误,这些问题往往让开发者陷入调试的泥…...

LiuJuan20260223Zimage镜像免配置部署教程:开箱即用的LoRA人像生成环境搭建

LiuJuan20260223Zimage镜像免配置部署教程:开箱即用的LoRA人像生成环境搭建 想快速体验AI生成特定人像的魅力,却苦于复杂的模型部署和配置?今天,我们就来介绍一个“开箱即用”的解决方案——LiuJuan20260223Zimage镜像。这个镜像…...

从安装到实战:手把手教你用MongoDB 5.0.9 + Navicat在Win10上搭建个人数据库环境

从零搭建MongoDB 5.0开发环境:Windows 10全流程实战指南 在个人开发环境中搭建数据库服务是每个全栈开发者必备的基础技能。不同于简单的软件安装,一个完整的开发数据库环境需要考虑版本选择、安全配置、图形化管理工具集成以及实际业务场景验证。本文将…...

佳能 CES 2026 深度解读:SPAD 传感器与成像技术的下一个十年

关键词: 佳能、CES 2026、SPAD、单光子雪崩二极管、高动态范围、计算成像、Cinema EOS 在刚刚落幕的 CES 2026 展会上,佳能并没有像许多人预期的那样发布新一代的 Cinema EOS 电影摄影机,而是展示了一项更具前瞻性的技术——SPAD 传感器。对于关注影像技术演变的专业人士而…...

EM算法中的Q函数:从三硬币模型到实际应用的完整推导指南

EM算法中的Q函数:从三硬币模型到实际应用的完整推导指南 在机器学习领域,我们常常会遇到数据不完整或存在隐变量的情况。这时,传统的最大似然估计方法往往难以直接应用。EM(Expectation-Maximization)算法作为一种强大…...

RT-Thread SPI设备封装实战:如何正确关联rt_spi_send与自定义write函数

RT-Thread SPI设备封装实战:从底层关联到复合设备设计 在嵌入式开发中,SPI总线因其高速、全双工的特性成为连接外设的常用选择。但当我们需要将SPI设备与其他功能模块(如GPIO控制)整合为一个复合设备时,如何正确封装底…...

打卡信奥刷题(2995)用C++实现信奥题 P6146 [USACO20FEB] Help Yourself G

P6146 [USACO20FEB] Help Yourself G 题目描述 在一个数轴上有 NNN 条线段,第 iii 条线段覆盖了从 lil_ili​ 到 rir_iri​ 的所有实数(包含 lil_ili​ 和 rir_iri​)。 定义若干条线段的并为一个包含了所有被至少一个线段覆盖的点的集合。 定…...

OpenWrt路由器破解校园网限速:基于深澜(srun)认证的百兆宽带满速实战

1. 校园网限速背后的技术原理 校园网限速这个问题困扰过无数学生党,我自己当年也是受害者之一。明明办理的是百兆宽带,实际测速却只有10M左右,看个高清视频都卡顿。这背后的技术原理其实很简单:学校通常会在认证计费系统里对不同接…...

Python实战:5分钟用OpenSSL自签名证书保护你的C/S应用(附完整代码)

Python实战:5分钟用OpenSSL自签名证书保护你的C/S应用(附完整代码) 在开发客户端/服务器(C/S)应用时,数据传输安全往往是最容易被忽视的环节。许多开发者习惯在测试环境中使用明文通信,等到上线…...

Java charAt 方法与字符编码变换实践

本文深入探讨了Java方法decrString,该方法利用charAt获取字符串字符,并根据字符索引的奇偶加减ASCII值,以实现简单的字符编码转换。本文详细分析了该方法的实现原理和字符算术的特点,并通过具体的例子显示了其转换效果&#xff0c…...

如何为Java初学者配置最简洁的开发环境

对于Java初学者来说,配置开发环境不需要复杂的工具堆叠。重点是快速启动,减少干扰,专注于语法和编程思维的学习。最简单的环境只有三个部分:简化JDK、轻量级编辑器,基本命令行操作。 选择适合初学者的JDK版本和发行版…...

保姆级教程:用ROS Noetic在Ubuntu 20.04上配置RealSense D455与机械臂手眼标定(附常见错误排查)

ROS Noetic环境下RealSense D455与机械臂手眼标定实战指南 环境准备与基础配置 在Ubuntu 20.04系统中配置ROS Noetic与RealSense D455相机的开发环境是构建eye-in-hand视觉系统的第一步。与常见的D435系列不同,D455作为升级型号,在深度精度和IMU性能上都…...

Java中如何使用Scanner读取输入数据

位于Java的Scanner类是Java中读取用户输入的常用工具.util包中。创建Scanner实例,并将其传输到System。.in,nextint()可以使用、nextDouble()等方法读取基本数据类型;读取空格字符串需要nextline(),但要注意nextline()后需要调用n…...

Spring新手必看:IOC容器中Bean的5个关键操作(含containsBean使用场景)

Spring新手必看:IOC容器中Bean的5个关键操作(含containsBean使用场景) Spring框架作为Java生态中最受欢迎的轻量级容器,其核心机制IOC(控制反转)彻底改变了我们管理对象依赖的方式。对于刚接触Spring的开发…...

黑盒 vs 白盒测试:5个真实项目案例教你如何选择测试方法

黑盒与白盒测试实战指南:5个行业案例解析方法论选择 在软件质量保障领域,测试方法的选择往往决定着缺陷检测效率和项目交付质量。当金融系统的转账功能出现逻辑错误时,当电商促销活动页面突然崩溃时,背后往往存在着测试策略的失误…...