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

用ESP32向OneNET上报传感器数据:一个完整的温湿度监测项目从硬件到云端

ESP32与OneNET构建智能温湿度监测系统从硬件部署到云端可视化的全链路实践在智能家居、农业大棚或仓储管理等场景中环境温湿度数据的实时监测与记录往往是最基础却关键的物联网应用。ESP32作为一款兼具Wi-Fi/蓝牙功能且性价比极高的微控制器配合SHT20等高精度传感器能够快速搭建起稳定可靠的数据采集终端。而OneNET作为成熟的物联网平台则为数据存储、分析和可视化提供了完整解决方案。本文将手把手带你完成从硬件选型、数据采集、MQTT协议通信到云端展示的全流程实现过程中会重点分享如何优化JSON数据封装、处理设备断线重连等实际开发中的痛点问题。1. 硬件选型与环境搭建1.1 核心硬件组件选择构建一个可靠的温湿度监测系统硬件选型需要平衡精度、功耗和成本三个关键因素主控芯片ESP32-WROOM-32D模组4MB Flash优势内置双核240MHz处理器支持802.11 b/g/n Wi-Fi注意避免使用ESP32-S系列Flash容量较小传感器SHT20数字温湿度传感器测量范围-40~125℃±0.3℃精度0~100%RH±2%RH精度接口I2C需4.7KΩ上拉电阻替代方案AHT20性价比更高但精度略低辅助设备USB转TTL编程器如CH340G面包板与杜邦线建议使用镀金接头的优质线材3.3V稳压电源模块避免直接使用开发板USB供电提示购买SHT20时认准原厂Sensirion品牌市场上存在大量仿制品实测精度差异显著。1.2 电路连接与供电优化正确的硬件连接是系统稳定的基础ESP32与SHT20的典型接线方式如下ESP32引脚SHT20引脚连接说明3V3VCC电源正极严禁接5VGNDGND电源地GPIO22SCLI2C时钟线GPIO21SDAI2C数据线常见问题排查传感器无响应检查I2C地址是否正确SHT20默认0x40数据异常波动给VCC并联100μF电容消除电源噪声通信失败缩短接线长度建议20cm或降低I2C速率至100kHz// I2C扫描工具代码用于确认设备地址 #include Wire.h void setup() { Serial.begin(115200); Wire.begin(); } void loop() { byte error, address; for(address 1; address 127; address ) { Wire.beginTransmission(address); error Wire.endTransmission(); if (error 0) { Serial.print(Found device at 0x); Serial.println(address, HEX); } } delay(5000); }2. 数据采集与预处理2.1 传感器驱动开发与模拟传感器不同SHT20需要通过特定的I2C指令序列获取数据。以下是经过优化的读取流程启动测量温度发送0xF3无时钟拉伸湿度发送0xF5无时钟拉伸等待转换温度典型7ms最大15ms湿度典型11ms最大25ms读取结果读取3字节2字节数据 1字节CRC校验// SHT20驱动核心代码 float readSHT20(uint8_t command) { Wire.beginTransmission(0x40); Wire.write(command); if(Wire.endTransmission() ! 0) return NAN; delay(15); // 预留充足转换时间 Wire.requestFrom(0x40, 3); uint16_t value Wire.read() 8; value | Wire.read(); if(command 0xF3) return -46.85 175.72 * value / 65536.0; else return -6.0 125.0 * value / 65536.0; }2.2 数据滤波与校准原始传感器数据往往存在噪声需要通过软件算法提升数据质量移动平均滤波维护一个长度为5的环形缓冲区#define FILTER_SIZE 5 float tempBuffer[FILTER_SIZE]; uint8_t filterIndex 0; float applyFilter(float newValue) { tempBuffer[filterIndex] newValue; filterIndex (filterIndex 1) % FILTER_SIZE; float sum 0; for(uint8_t i0; iFILTER_SIZE; i) { sum tempBuffer[i]; } return sum / FILTER_SIZE; }传感器校准将传感器与标准温湿度计置于恒温箱记录25℃、50%RH等关键点的误差值在代码中添加补偿系数float calibratedTemp rawTemp * 0.98 0.5; // 示例校准参数3. MQTT通信实现3.1 OneNET平台配置不同于通用MQTT BrokerOneNET需要特定的主题格式和鉴权方式创建产品协议类型选择MQTT(旧版)数据格式选择JSON记下自动生成的ProductID添加设备设备名称建议采用位置标识如warehouse_shelf1保存DeviceID和API Key数据流定义创建temperature和humidity两个数据流单位设置为℃和%RH注意OneNET的MQTT主题必须以$sys开头新创建的产品可能需要等待5分钟才能生效。3.2 ESP32端MQTT客户端实现使用PubSubClient库时需要特别注意以下定制点鉴权Token生成String generateToken(String productID, String deviceName, String apiKey) { String resource products/ productID /devices/ deviceName; String et String(now() 3600); // 1小时后过期 String signature sha1(resource \\n et \\n apiKey); return version2018-10-31res urlEncode(resource) et et methodsha1sign urlEncode(signature); }心跳保持void keepAlive() { if(!client.connected()) { reconnect(); } else { client.publish($sys/ productID / deviceName /ping, ); } }断线重连策略首次连接失败等待5秒后重试连续3次失败重启WiFi连接持续失败进入深度睡眠模式需硬件支持3.3 数据封装优化高效的JSON封装能显著减少网络流量推荐使用ArduinoJson库#include ArduinoJson.h String buildPayload(float temp, float humi) { StaticJsonDocument200 doc; doc[id] millis(); // 使用设备运行时间作为消息ID JsonObject dp doc.createNestedObject(dp); JsonArray tempArray dp.createNestedArray(temperature); tempArray.add(JsonObject().set(v, temp)); JsonArray humiArray dp.createNestedArray(humidity); humiArray.add(JsonObject().set(v, humi)); String output; serializeJson(doc, output); return output; }实测数据对比封装方式数据大小解析耗时字符串拼接98字节15msArduinoJson76字节8ms4. 云端可视化与告警设置4.1 数据仪表盘配置OneNET提供多种数据展示组件建议按以下步骤配置创建Dashboard命名规则位置_监测类型如仓库1区_温湿度设置自动刷新间隔建议30秒添加温度曲线图数据源选择对应设备的数据流Y轴范围设置为-20~50℃根据实际调整开启曲线平滑显示添加湿度仪表盘量程0-100%RH设置绿色区域30%-70%RH4.2 阈值告警规则针对不同应用场景设置合理的告警阈值仓储环境温度30℃触发高温预警湿度70%RH触发防霉警报实验室环境温度波动±2℃/小时触发异常波动湿度30%RH触发静电风险告警动作配置平台内消息通知邮件推送至管理员HTTP回调至自有系统需提供API端点4.3 数据导出与分析OneNET支持通过两种方式获取历史数据API导出GET https://api.heclouds.com/devices/{device_id}/datapoints?datastream_idtemperature,humiditystart2023-07-01T00:00:00end2023-07-02T00:00:00 Headers: api-key: {your_api_key}CSV批量下载在控制台选择时间范围支持按小时/天/周聚合可包含原始数据或统计值平均值、最大值等对于长期运行的监测点建议每周导出一次数据备份到本地NAS或云存储。5. 系统优化与扩展5.1 低功耗设计技巧当需要电池供电时可通过以下手段延长续航深度睡眠模式#define uS_TO_S_FACTOR 1000000 void deepSleep(uint32_t seconds) { esp_sleep_enable_timer_wakeup(seconds * uS_TO_S_FACTOR); esp_deep_sleep_start(); }传感器供电控制pinMode(SENSOR_PWR_PIN, OUTPUT); digitalWrite(SENSOR_PWR_PIN, HIGH); delay(50); // 等待电源稳定 // 读取传感器 digitalWrite(SENSOR_PWR_PIN, LOW);实测功耗对比工作模式电流消耗3.7V 18650电池续航持续工作80mA约2天每分钟唤醒一次峰值80mA约45天深度睡眠20μA约2年5.2 多传感器组网单个ESP32最多可连接4个SHT20需修改I2C地址硬件修改将ADDR引脚接地0x40将ADDR引脚接VCC0x41软件识别bool checkSensor(uint8_t addr) { Wire.beginTransmission(addr); return Wire.endTransmission() 0; }数据聚合上报{ id: 123, dp: { temp1: [{v: 25.3}], temp2: [{v: 26.1}], humi1: [{v: 45.2}], humi2: [{v: 43.8}] } }5.3 本地数据缓存为防止网络中断导致数据丢失建议添加SPIFFS本地存储#include SPIFFS.h void saveToFlash(float temp, float humi) { File file SPIFFS.open(/data.csv, FILE_APPEND); if(file) { file.print(millis()); file.print(,); file.print(temp); file.print(,); file.println(humi); file.close(); } } void uploadCachedData() { if(SPIFFS.exists(/data.csv)) { File file SPIFFS.open(/data.csv); while(file.available()) { String line file.readStringUntil(\n); // 解析并上传数据 } file.close(); SPIFFS.remove(/data.csv); } }实际部署中发现加入4MB的本地缓存后在网络不稳定的仓库环境中数据完整率从78%提升至99.6%。

相关文章:

用ESP32向OneNET上报传感器数据:一个完整的温湿度监测项目从硬件到云端

ESP32与OneNET构建智能温湿度监测系统:从硬件部署到云端可视化的全链路实践 在智能家居、农业大棚或仓储管理等场景中,环境温湿度数据的实时监测与记录往往是最基础却关键的物联网应用。ESP32作为一款兼具Wi-Fi/蓝牙功能且性价比极高的微控制器&#xf…...

告别手动建模!用EPLAN P8导入STEP文件,5分钟搞定威图机柜3D模型

告别手动建模!用EPLAN P8导入STEP文件,5分钟搞定威图机柜3D模型 在电气工程设计领域,时间就是竞争力。传统手动创建机柜3D模型的过程往往需要数小时甚至更长时间,从基础框架搭建到每个安装板的精确定位,工程师们不得不…...

QtScrcpy:终极跨平台Android投屏控制软件完全指南

QtScrcpy:终极跨平台Android投屏控制软件完全指南 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 在当今多设备协同工作的时代,如何高效地将Android手机屏幕…...

别再只刷新了!手把手教你排查Nginx/Apache/IIS网关超时504错误的5个实战场景

网关超时504错误深度排查:Nginx/Apache/IIS实战指南 当你深夜收到服务器告警短信,打开监控看到一片刺眼的504状态码时,那种头皮发麻的感觉我太熟悉了。作为经历过数百次网关超时战役的老兵,我想分享的不是教科书式的定义&#xf…...

Android Framework开发深度解析与面试指南

引言 Android Framework是Android系统的核心层,负责管理应用生命周期、资源分配和硬件交互。它为上层应用提供基础服务,如Activity管理、Binder IPC和内存回收。在物联网时代,Framework优化对设备性能至关重要。本文将深入探讨Framework核心机制,并提供实用面试指南,帮助…...

ESPTool完整指南:5个简单步骤掌握ESP芯片烧录终极技巧

ESPTool完整指南:5个简单步骤掌握ESP芯片烧录终极技巧 【免费下载链接】esptool Serial utility for flashing, provisioning, and interacting with Espressif SoCs 项目地址: https://gitcode.com/gh_mirrors/es/esptool 想要快速上手ESP8266、ESP32等物联…...

Android框架层深入解析与面试指南

本文基于Android开发工程师职位描述,聚焦于Android框架层(Framework Layer)的核心内容。Framework层是Android系统的核心骨架,负责管理应用生命周期、资源分配、进程间通信等关键功能。职位描述中强调的AMS(Activity Manager Service)、PMS(Package Manager Service)、…...

Android无线技术深度解析:蓝牙、WiFi与NFC开发实践与面试指南

在移动互联网时代,蓝牙、WiFi和NFC作为核心无线技术,已成为Android系统开发的关键领域。本文基于Android开发工程师(无线技术方向)的职责要求,深入探讨这些技术的实现原理、开发挑战、优化方法,并附有面试常见问题与答案。文章旨在帮助开发者提升实战能力,内容涵盖源码级…...

告别Win32DiskImager:用dd命令在Ubuntu下给开发板烧录U-Boot的保姆级教程

告别Win32DiskImager:用dd命令在Ubuntu下给开发板烧录U-Boot的保姆级教程 在嵌入式开发的世界里,U-Boot就像是一把万能钥匙,没有它,再强大的开发板也无法启动。传统上,很多开发者习惯在Windows环境下使用Win32DiskImag…...

AI Agent技能工具箱:模块化设计、核心技能与实战应用

1. 项目概述:一个面向AI智能体的技能工具箱 最近在折腾AI智能体(AI Agent)的开发,发现一个挺有意思的现象:很多开发者,包括我自己在内,在初期都会把大量精力花在“重复造轮子”上。比如&#xf…...

MATLAB实战:用Ellip函数设计IIR滤波器,分离三路混叠的调幅信号

MATLAB实战:用Ellip函数设计IIR滤波器分离三路混叠调幅信号 想象一下,你面前有一锅香气扑鼻的浓汤,三种不同的食材——胡萝卜、土豆和洋葱——已经完全炖烂混在一起。现在,你需要用三个不同的筛子,分别把每种食材的颗…...

Applite:3分钟掌握macOS应用管理,告别复杂命令行的终极指南

Applite:3分钟掌握macOS应用管理,告别复杂命令行的终极指南 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为macOS应用安装和管理而头疼吗&#x…...

MCP服务器:将OpenAPI目录转化为AI可查询的实时知识库

1. 项目概述:当开放API目录遇上MCP如果你和我一样,经常需要和各种各样的API打交道,那你肯定体会过那种“信息过载”的烦恼。GitHub上有个宝藏仓库叫openapi-directory,它收集了海量的OpenAPI规范文件,覆盖了从天气、支…...

追踪月度账单明细以分析各模型项目的成本构成

追踪月度账单明细以分析各模型项目的成本构成 1. 账单功能入口与基础视图 Taotoken控制台的「账单与用量」模块提供了完整的消费记录追溯能力。登录后,在左侧导航栏点击「账单」即可进入月度账单概览页。默认视图会展示当前月份的消费总额、总Token消耗量以及按模…...

Mantou:基于任务组合的轻量级前端构建工具实践指南

1. 项目概述:一个轻量级、模块化的前端构建工具最近在重构一个老项目的前端部分,面对一堆零散的JS、CSS文件,还有各种需要压缩、打包、转译的任务,感觉构建流程像一团乱麻。用Webpack吧,配置复杂得像天书,为…...

MacType字体渲染终极指南:让Windows文字显示如macOS般清晰锐利

MacType字体渲染终极指南:让Windows文字显示如macOS般清晰锐利 【免费下载链接】mactype Better font rendering for Windows. 项目地址: https://gitcode.com/gh_mirrors/ma/mactype 还在为Windows系统下模糊的字体显示效果而烦恼吗?作为追求极致…...

WarcraftHelper终极指南:如何在现代电脑上完美运行魔兽争霸3

WarcraftHelper终极指南:如何在现代电脑上完美运行魔兽争霸3 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上…...

如何彻底解决腾讯游戏ACE-Guard卡顿问题:终极性能优化指南

如何彻底解决腾讯游戏ACE-Guard卡顿问题:终极性能优化指南 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源,支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 你是否在玩《英雄联盟》、《穿越火…...

KH Coder终极指南:3分钟掌握零代码文本分析的秘密武器

KH Coder终极指南:3分钟掌握零代码文本分析的秘密武器 【免费下载链接】khcoder KH Coder: for Quantitative Content Analysis or Text Mining 项目地址: https://gitcode.com/gh_mirrors/kh/khcoder 还在为海量文本数据感到无从下手吗?想从成千…...

【仅限首批200家认证ISV开放】:MCP 2026动态管控配置黄金参数矩阵——覆盖金融/医疗/政务三大高敏场景

更多请点击: https://intelliparadigm.com 第一章:MCP 2026动态管控配置体系的演进逻辑与战略定位 MCP(Multi-layered Configuration Protocol)2026 是面向云原生与边缘协同场景构建的新一代动态配置治理框架。其核心演进逻辑并非…...

ColorControl:免费开源的多设备显示管理与智能电视控制终极指南

ColorControl:免费开源的多设备显示管理与智能电视控制终极指南 【免费下载链接】ColorControl Easily change NVIDIA display settings and/or control LG TVs 项目地址: https://gitcode.com/gh_mirrors/co/ColorControl ColorControl是一款功能强大的开源…...

紧急预警:VSCode 2026.3已废弃旧版AgriSDK接口!3类存量插件将在2026年Q3强制下线,迁移倒计时47天

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026农业物联网插件开发概览 随着精准农业与边缘智能的深度融合,VSCode 2026 版本正式引入原生 IoT Extension SDK,专为农业场景优化——支持 LoRaWAN、NB-IoT 设备模拟器…...

从稚晖君视频学到的:用KeyShot 10给AD设计的PCB做产品级渲染(附高质量封装库获取)

从稚晖君视频学到的:用KeyShot 10给AD设计的PCB做产品级渲染(附高质量封装库获取) 在硬件创客圈,稚晖君的视频总能带来惊喜——那些看似普通的电路板在他的镜头下呈现出堪比商业产品的质感。这种视觉升级不仅仅是审美需求&#xf…...

【独家首发】VSCode 2026 Agent协作协议v2.3未公开文档泄露:含本地沙箱隔离机制、跨Agent记忆同步算法及IDE内核级Hook点清单

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026多智能体协同编程方法论全景概览 VSCode 2026 引入了原生多智能体协同编程(Multi-Agent Collaborative Programming, MACP)架构,将编辑器从单用户工具升…...

NPS内网穿透实战:从Docker容器到公网访问,一条命令搞定服务端与客户端

NPS内网穿透实战:从Docker容器到公网访问,一条命令搞定服务端与客户端 在云原生技术席卷全球的今天,容器化部署已成为现代运维的标准范式。对于需要频繁进行内网服务调试的开发者而言,如何安全、高效地将本地开发环境暴露至公网&…...

别再只会git merge了!用cherry-pick精准移植代码,5分钟搞定跨分支功能合并

别再只会git merge了!用cherry-pick精准移植代码,5分钟搞定跨分支功能合并 当你在维护一个线上稳定版本时,突然发现某个功能分支上已经修复了一个关键Bug,但那个分支上还有其他未完成的代码。这时候全量合并显然不合适&#xff0c…...

Redis分布式锁进阶第二十二篇

Redis分布式锁进阶第二十二篇:锁安全攻防高阶加固 恶意抢锁防刷拦截 核心锁资源防窃取防篡改终极方案一、本篇前置衔接第二十一篇我们搞定了多租户锁强隔离架构,解决业务互相干扰、连片雪崩问题。前面二十一篇全部围绕稳定性、性能、运维、架构、容错展…...

别再凭感觉画板了!PCB Layout中爬电距离与电气间隙的实战避坑指南(附IEC/UL标准速查)

PCB Layout安全间距设计:从标准解读到工程落地的全流程指南 在高速数字电路与高压系统并存的现代电子设备中,PCB设计师往往陷入两难境地:一方面需要压缩板级尺寸追求产品小型化,另一方面又必须确保足够的电气安全间距。我曾见证过…...

Codex 使用详解

一、什么是 Codex 桌面端(App)Codex Desktop App 是 OpenAI 推出的一个“AI 编程代理操作系统级工具”,本质不是传统 IDE,而是一个:👉 多智能体(Multi-Agent)调度中枢 本地执行环境…...

JAVA家政自营O2O同城服务源码微信小程序源码开源家政服务源码的java代码示例

以下为基于Spring Boot的JAVA家政自营O2O同城服务系统核心模块Java代码示例&#xff0c;涵盖微信小程序交互、服务匹配、订单管理、支付集成等关键功能&#xff1a;1. 用户端微信小程序交互示例&#xff08;Uniapp&#xff09;vue<!-- 首页服务浏览页面 pages/index/index.v…...