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

基于ESP32与Ubidots的远程温湿度监测系统实战指南

1. 项目概述

最近在折腾一个环境监测的小项目,核心需求是想在办公室里实时查看几个不同区域的温湿度情况,最好还能有个历史曲线图。市面上成品的方案要么太贵,要么数据不开放,索性就自己动手搭一个。我选择了ESP32作为主控,搭配一个长距离的无线温湿度传感器,最后把数据推到Ubidots云平台上做展示。这个组合的好处很明显:ESP32自带Wi-Fi和蓝牙,开发环境成熟;专用的无线传感器传输距离远,穿墙能力强;Ubidots作为云平台,免去了自己搭建服务器的麻烦,提供了现成的数据看板和报警功能。整个方案从硬件连接到代码调试,再到云端配置,走通之后发现其实门槛并不高,非常适合有一定嵌入式或物联网基础的开发者快速原型验证,或者用于小型仓库、温室、实验室等场景的长期环境监测。

2. 系统架构与核心组件选型

2.1 整体架构设计思路

这个远程监测系统的核心逻辑是一个典型的三层物联网架构:感知层、网络层和应用层。

  1. 感知层:负责物理世界数据的采集。这里使用的是集成了传感元件和无线射频模块的传感器节点,它周期性地测量环境温湿度,并通过特定的无线协议将数据发送出去。
  2. 网络层:负责数据的汇聚与远传。本方案中,一个无线的Mesh Modem(网状网络调制解调器)充当了网关的角色,它接收来自传感器节点的射频信号,并通过USB接口将数据转发给作为核心处理单元的ESP32开发板。ESP32则通过其内置的Wi-Fi模块,将数据经由互联网上传到云端。
  3. 应用层:负责数据的存储、处理与可视化。我们选用Ubidots云平台,它提供了设备管理、数据接入(支持MQTT、HTTP等协议)、实时仪表盘、数据分析以及事件触发报警等一系列服务。

选择这种架构,主要是出于灵活性和可靠性的考虑。传感器与网关之间采用Sub-1GHz或LoRa等专有长距离无线协议,相比直接让每个传感器都连接Wi-Fi,功耗更低、传输距离更远、网络结构更稳定。而ESP32+Ubidots的组合,则充分利用了成熟的公共云服务,让我们可以专注于业务逻辑,快速实现一个可用的系统原型。

2.2 关键硬件组件解析

硬件选型直接决定了系统的性能上限和稳定性,这里对几个核心部件进行拆解:

ESP32 IoT WiFi BLE模块(带集成USB)这是系统的大脑。我选择带集成USB的版本,主要是为了方便。它既是一个功能完整的ESP32开发板,又自带了一个USB转串口芯片,用一根USB线就能完成供电、程序烧录和串口调试,极大简化了开发流程。ESP32的双核处理器和丰富的外设(如I2C、SPI、多个UART)为未来扩展其他传感器留足了余地。其内置的Wi-Fi模块是实现数据上云的关键。

长距离无线温湿度传感器这是项目的“触角”。市面上很多温湿度传感器需要有线连接或短距离无线(如蓝牙),不适合分布式部署。我选择的这款传感器核心特点是“长距离无线”和“低功耗”。它内部通常包含一个高精度的温湿度传感芯片(如SHT30、AHT20)和一个Sub-1GHz或LoRa射频芯片。传感器周期性地唤醒、采集数据、通过无线信号发送,然后进入深度睡眠,一颗电池可以工作数月甚至数年。它的有效传输距离在开阔地带可达数百米甚至上公里,足以覆盖一个大型厂房或农场。

长距离无线Mesh Modem(带USB接口)这是连接传感网络和互联网的“桥梁”。它的作用有两个:

  1. 网关:监听并接收区域内所有同协议无线传感器发出的数据包。
  2. 数据转换器:将接收到的无线数据包,通过USB接口以串行数据的形式实时输出给ESP32。 选择Mesh(网状网络)版本的Modem意味着传感器节点之间可以互相中继,进一步扩展网络覆盖范围,增强鲁棒性。带USB接口则使其与ESP32的连接变得极其简单,只需一根USB数据线(或USB转TTL串口线)。

注意:在采购硬件时,务必确认传感器与Modem使用的是相同的无线通信协议和频段(如915MHz LoRa),否则它们无法通信。通常来自同一供应商的套件是兼容的。

2.3 软件与云服务选型

Arduino IDE开发环境选择Arduino IDE,主要是因为它对ESP32的支持已经非常完善,库生态丰富,上手速度快。对于这种数据采集+上传的逻辑,用Arduino框架可以快速实现。

PubSubClient库这是实现MQTT协议通信的核心库。Ubidots平台支持MQTT协议接入,这是一种轻量级的发布/订阅消息传输协议,非常适合物联网场景。PubSubClient库封装了MQTT客户端的功能,让我们可以用几行代码就实现与Ubidots服务器的连接和数据发布。

Ubidots云平台选择Ubidots而非自建服务器或使用其他复杂平台,是基于快速开发的考量。它提供了免费的额度,对于中小型项目完全足够。其优势在于:

  • 设备接入简单:提供Token认证,支持MQTT、HTTP等多种方式。
  • 数据可视化快捷:拖拽式仪表盘编辑器,几分钟就能配置出专业的图表。
  • 事件与报警:可以设置规则,当数据超过阈值时发送邮件、短信等报警。
  • API支持:方便后续进行二次开发,将数据集成到自己的应用中。

3. 硬件连接与本地数据调试

3.1 硬件连接步骤

硬件连接是整个项目的基础,务必确保正确无误:

  1. 传感器节点:根据说明书,安装好电池(通常是CR2032或AA电池),并确保其处于工作状态。有些传感器需要按下配置按钮来激活或加入网络。
  2. Modem网关连接:使用USB数据线,将长距离无线Mesh Modem连接到电脑的USB端口。此时电脑会将其识别为一个新的串行端口(COM口,在Windows设备管理器中可查看)。
  3. ESP32与Modem连接:这是关键一步。Modem通过USB与电脑通信,本质上是一个串口设备。我们需要让ESP32也能读到这个串口的数据。有两种方式:
    • 方式一(推荐,独立工作):使用一条USB转TTL串口线。将Modem的USB口通过这条线,连接到ESP32的某个串口RX/TX引脚(例如GPIO16/RX2, GPIO17/TX2)。同时,需要给ESP32单独供电(可通过其自身的USB口)。这样,ESP32和Modem就通过串口直接通信,整个系统可以脱离电脑独立运行。
    • 方式二(调试阶段):将Modem和ESP32分别用USB线连接到电脑。在ESP32的代码中,通过“软串口”或指定的硬件串口(如Serial2)来读取Modem发送到电脑的数据。这种方式便于调试,但最终部署时需要改为方式一。
  4. ESP32供电:通过Micro-USB数据线为ESP32供电。

3.2 使用LabVIEW工具验证传感器数据

在编写ESP32代码之前,先用供应商提供的LabVIEW工具验证传感器和Modem是否工作正常,这是一个非常重要的排错步骤。

  1. 安装驱动与运行时:根据原始资料提示,访问供应商网站(如ncd.io)下载对应的LabVIEW工具ncd.io Wireless Temperature And Humidity Sensor.exe。运行前,可能需要安装NI-VISA驱动和LabVIEW运行时引擎,确保工具能正确识别电脑的串口。
  2. 连接与查看:打开LabVIEW工具,在软件中选择Modem所在的COM口(波特率通常为115200或9600,工具可能自动识别)。点击连接。
  3. 数据解析:如果一切正常,工具界面会显示接收到的无线传感器数据包,其中应包含传感器ID、温度值、湿度值、电池电压等信息。这个步骤确认了:
    • 传感器电池有电且在发射信号。
    • Modem工作正常,能接收并解码信号。
    • 传感器与Modem通信协议匹配。 如果这里看不到数据,就需要检查传感器电池、距离、或重新配对传感器与Modem。

实操心得:务必先通过这个桌面工具让数据“跑通”,这能排除至少50%的硬件相关问题。把此时显示正确的传感器ID和数值记录下来,后续在ESP32代码中解析串口数据时,可以此为基准进行比对。

4. ESP32固件开发详解

4.1 开发环境搭建与库安装

  1. 安装Arduino IDE:从Arduino官网下载并安装最新版IDE。
  2. 添加ESP32开发板支持
    • 打开Arduino IDE,进入文件 -> 首选项,在“附加开发板管理器网址”中输入:https://espressif.github.io/arduino-esp32/package_esp32_index.json
    • 然后进入工具 -> 开发板 -> 开发板管理器,搜索“esp32”,找到并安装“Espressif Systems”提供的ESP32开发板包。
  3. 安装必要的库
    • PubSubClient库:在项目 -> 加载库 -> 管理库中搜索“PubSubClient”,安装由Nick O‘Leary开发的版本。
    • WiFi库:ESP32开发板包已自带。
    • Wire.h:用于I2C通信,本例中虽未直接使用I2C传感器,但库已包含。

4.2 核心代码逻辑剖析

下面我们逐段解析代码,理解其如何工作。

第一部分:网络与平台配置

#define WIFISSID “your_SSID” // 替换为你的Wi-Fi名称 #define PASSWORD “your_PASSWORD” // 替换为你的Wi-Fi密码 #define TOKEN “your_UBIDOTS_TOKEN” // 替换为你在Ubidots账户中获取的Token #define MQTT_CLIENT_NAME “esp32_client” // MQTT客户端ID,可自定义,需唯一 #define VARIABLE_LABEL “temperature” // Ubidots中温度变量的标签 #define VARIABLE_LABEL2 “humidity” // Ubidots中湿度变量的标签 #define VARIABLE_LABEL3 “battery” // Ubidots中电池电压变量的标签 #define DEVICE_LABEL “office_sensor_01” // Ubidots中设备的标签,建议有明确含义

这部分是项目的“钥匙”,必须正确填写。TOKEN是你的Ubidots账户密钥,在个人资料设置里可以找到。DEVICE_LABELVARIABLE_LABEL定义了数据在云端存储的结构,相当于给设备和数据点起了名字。

第二部分:初始化与串口设置

#include <WiFi.h> #include <PubSubClient.h> #include <HardwareSerial.h> WiFiClient espClient; PubSubClient client(espClient); HardwareSerial SerialModem(2); // 使用ESP32的第二个硬件串口(UART2) void setup() { Serial.begin(115200); // 用于调试输出的串口 SerialModem.begin(115200, SERIAL_8N1, 16, 17); // RX=GPIO16, TX=GPIO17, 与Modem通信 setup_wifi(); // 连接Wi-Fi client.setServer(“industrial.api.ubidots.com“, 1883); // 设置Ubidots MQTT服务器地址和端口 client.setCallback(callback); // 设置MQTT消息回调函数(如需订阅) }

这里初始化了两个串口:Serial用于连接电脑输出调试信息;SerialModem用于连接无线Modem,读取传感器数据。setup_wifi()是一个自定义函数,内部调用WiFi.begin()来连接网络。Ubidots的MQTT服务器地址是固定的。

第三部分:数据读取与解析这是整个固件的核心难点。Modem通过串口发送的数据通常是包含传感器ID、数据值、校验和等信息的原始字节流或特定格式的字符串。

void loop() { if (SerialModem.available()) { // 检查Modem串口是否有数据 String rawData = SerialModem.readStringUntil(‘\n’); // 读取一行数据 // 假设数据格式为: “ID:12345,T:25.6,H:50.2,B:3.1V” if (rawData.startsWith(“ID:“)) { parseSensorData(rawData); // 调用自定义函数解析数据 } } // … MQTT连接与发布逻辑 } void parseSensorData(String data) { // 这是一个简化的解析示例,实际格式需根据Modem输出调整 int tempStart = data.indexOf(“T:“) + 2; int tempEnd = data.indexOf(“,H:“); temperature = data.substring(tempStart, tempEnd).toFloat(); int humStart = data.indexOf(“H:“) + 2; int humEnd = data.indexOf(“,B:“); humidity = data.substring(humStart, humEnd).toFloat(); int batStart = data.indexOf(“B:“) + 2; int batEnd = data.indexOf(“V”); battery = data.substring(batStart, batEnd).toFloat(); }

parseSensorData函数需要你根据LabVIEW工具中看到的实际数据格式来编写。可能需要处理十六进制、二进制或特定分隔符的格式。务必仔细查阅Modem的通信协议文档

第四部分:MQTT数据发布解析出温度、湿度、电池电压后,需要将其构造成Ubidots要求的MQTT消息格式并发布。

void publishData(float temp, float hum, float bat) { char topic[150]; char payload[500]; // 构建主题(Topic): /v1.6/devices/{DEVICE_LABEL} sprintf(topic, “/v1.6/devices/%s“, DEVICE_LABEL); // 构建载荷(Payload): JSON格式,包含多个变量 sprintf(payload, “{\”%s\”: {\”value\”: %.2f}, \”%s\”: {\”value\”: %.2f}, \”%s\”: {\”value\”: %.2f}}“, VARIABLE_LABEL, temp, VARIABLE_LABEL2, hum, VARIABLE_LABEL3, bat); // 发布消息 if (client.publish(topic, payload)) { Serial.println(“Data published to Ubidots“); } else { Serial.println(“Publish failed“); } }

Ubidots的MQTT主题格式是固定的/v1.6/devices/{设备标签}。载荷是一个JSON对象,键是变量标签,值是一个包含value键的对象。一次可以发布多个变量。

第五部分:主循环与连接维护

void loop() { if (!client.connected()) { reconnect(); // 如果MQTT断开,执行重连 } client.loop(); // 必须定期调用,以维持MQTT连接和处理消息 // 数据读取、解析、发布的逻辑 // … (此处调用前面提到的数据读取和发布函数) delay(10000); // 每10秒读取并上传一次数据,可根据需要调整 } void reconnect() { while (!client.connected()) { Serial.print(“Attempting MQTT connection…“); if (client.connect(MQTT_CLIENT_NAME, TOKEN, “”)) { // 使用Token作为密码 Serial.println(“connected“); } else { Serial.print(“failed, rc=“); Serial.print(client.state()); Serial.println(” try again in 5 seconds“); delay(5000); } } }

client.loop()PubSubClient库的心跳,必须频繁调用。reconnect()函数确保在网络波动时能自动重连到Ubidots。

4.3 代码上传与串口监控

  1. 在Arduino IDE的工具菜单中,选择正确的ESP32开发板型号和连接的端口。
  2. 点击上传按钮,将编译好的固件烧录到ESP32。
  3. 上传完成后,打开串口监视器(波特率设置为115200)。你将看到ESP32尝试连接Wi-Fi和Ubidots的日志。连接成功后,会周期性打印发布数据的信息。
  4. 观察是否有错误信息,例如Wi-Fi连接失败、MQTT连接被拒绝等。根据错误信息进行排查。

5. Ubidots云平台配置与数据可视化

5.1 设备与变量创建

  1. 获取API Token:登录Ubidots,点击右上角用户头像进入API Credentials,复制你的Default Token。这个Token就是代码中需要的TOKEN
  2. 创建设备:进入Devices页面,点击+号添加新设备。Device Label填写代码中定义的DEVICE_LABEL(如office_sensor_01),名称可以写得更友好一些,如“办公室东区传感器”。设备创建后,Ubidots会为其生成唯一的ID。
  3. 理解数据自动创建:Ubidots有一个便利功能:当它通过MQTT收到一个向不存在的设备或变量发布的数据时,会自动创建它们。这意味着,只要你代码中的DEVICE_LABELVARIABLE_LABEL是正确的,并且MQTT发布成功,你无需手动创建变量。设备下会自动出现以VARIABLE_LABEL命名的变量。当然,你也可以提前手动创建变量以确保标签一致。

5.2 构建实时数据仪表盘

数据成功上传后,核心价值在于可视化。Ubidots的Dashboard功能非常强大。

  1. 创建仪表盘:进入Dashboards,点击Create Dashboard,为其命名,如“环境监测中心”。
  2. 添加控件
    • 数值指示器:点击Add Widget,选择Indicator。在配置中,数据源选择你刚创建的设备(如office_sensor_01),变量选择temperature。你可以设置数值范围、颜色(如低温蓝色、高温红色)、单位(°C)。
    • 折线图/曲线图:选择Chart控件。同样选择设备和变量(如humidity)。你可以设置时间范围(最近1小时、24小时等),并添加多个变量到同一图表中进行对比。
    • 仪表盘:选择Gauge控件,非常适合显示电池电压,可以直观地看到电量水平。
  3. 布局与调整:将控件拖拽到合适位置,调整大小。一个专业的监控面板就初具雏形了。

5.3 设置事件与报警

单纯的查看还不够,异常报警才是监控系统的灵魂。

  1. 进入事件管理器:在左侧菜单进入Events
  2. 创建新事件:点击Create Event
  3. 配置触发条件
    • 事件类型:选择Threshold(阈值)。
    • 数据源:选择你的设备和变量,例如office_sensor_01->temperature
    • 条件:设置Above(高于)某个值,比如30°C。
  4. 配置执行动作
    • 动作类型:可以选择EmailSMS(可能需要积分)、Webhook(调用其他API)等。
    • 如果选择邮件,需要填写接收邮箱和邮件标题、内容。例如,内容可以设置为“警告:办公室温度超过30°C,当前温度为{{temperature}}°C”。{{variable}}是模板变量,会被实际数值替换。
  5. 启用与测试:保存事件并启用它。你可以临时修改代码发送一个超过阈值的数据,测试报警邮件是否能正常收到。

6. 系统优化与高级应用探讨

6.1 低功耗优化策略

当前方案中ESP32持续运行,功耗较高。若想用电池长期供电,必须进行深度优化:

  1. ESP32深度睡眠:修改代码逻辑,让ESP32大部分时间处于深度睡眠模式。可以使用定时器唤醒或外部中断唤醒(例如,让Modem在收到新数据后通过一个GPIO引脚触发ESP32中断)。唤醒后,ESP32快速连接Wi-Fi、上传数据,然后再次进入睡眠。代码框架如下:
    #include <esp_sleep.h> void setup() { // … 初始化 readAndPublishData(); // 读取数据并上传 // 进入深度睡眠,定时器唤醒(单位:微秒) esp_deep_sleep(300 * 1000000ULL); // 睡眠5分钟 } void loop() { // 深度睡眠后代码不会执行到这里 }
  2. Wi-Fi连接优化:在setup_wifi()中,可以设置WiFi.setSleep(true)启用Wi-Fi调制解调器睡眠,并在发送数据后调用WiFi.disconnect(true)WiFi.mode(WIFI_OFF)来彻底关闭Wi-Fi。
  3. 传感器与Modem功耗:选择支持唤醒和睡眠指令的传感器和Modem。在ESP32睡眠前,通过串口发送命令让Modem也进入低功耗模式。

6.2 数据安全与可靠性增强

  1. 使用TLS/SSL加密MQTT连接:公开的MQTT(1883端口)是明文传输。为提高安全性,应使用MQTTS(8883端口)。PubSubClient库支持SSL,但需要处理证书。在Ubidots中,设备支持SSL连接。代码中需将服务器地址改为industrial.api.ubidots.com,端口改为8883,并启用WiFiClientSecure。
    #include <WiFiClientSecure.h> WiFiClientSecure espClient; PubSubClient client(espClient); void setup() { espClient.setCACert(ubidots_root_ca); // 需要设置根证书 client.setServer(“industrial.api.ubidots.com“, 8883); }
    你需要将Ubidots的根证书内容嵌入代码或存储在SPIFFS中。
  2. 本地数据缓存与断线续传:在网络不稳定时,数据可能丢失。可以在ESP32上增加SD卡或SPIFFS文件系统,当发布失败时,将数据和时间戳写入本地存储。待网络恢复后,优先发送缓存的历史数据。这需要更复杂的队列管理逻辑。
  3. 数据校验:在解析Modem串口数据时,务必使用校验和(如果协议提供)来验证数据的完整性,避免上传错误数据。

6.3 扩展性与多传感器集成

一个Modem通常可以接收多个同协议传感器的数据。扩展系统只需增加传感器节点。

  1. 数据解析扩展:在parseSensorData函数中,需要解析数据包中的传感器ID字段。根据不同的ID,将数据发布到Ubidots上不同的设备或变量中。例如:
    if (sensorID == “0xABCD”) { deviceLabel = “sensor_room1“; } else if (sensorID == “0xEFGH”) { deviceLabel = “sensor_room2“; } // 然后使用不同的deviceLabel构建MQTT主题
  2. Ubidots侧管理:在Ubidots中,可以为每个物理传感器创建一个独立的设备,这样数据隔离清晰。也可以将所有数据发送到同一个设备,但用不同的变量标签区分,如temperature_room1,humidity_room1
  3. 集成其他传感器:如果Modem支持,可以混接不同类型的传感器(如温湿度、光照、土壤湿度等)。只需在代码中增加对应的解析逻辑,并在Ubidots中创建相应的变量即可。

7. 常见问题排查与实战技巧

在实际部署中,你几乎一定会遇到下面这些问题。这里我把踩过的坑和解决方法总结出来。

7.1 硬件与连接类问题

问题1:LabVIEW工具能收到数据,但ESP32串口读不到。

  • 排查:首先确认ESP32连接的是Modem的输出串口(TX线接ESP32的RX引脚)。其次,检查代码中SerialModem.begin()的波特率是否与Modem输出波特率一致(常见有9600, 115200)。最后,在ESP32的setup()函数中加入while(!Serial);(仅用于调试)并打开Arduino串口监视器,查看ESP32是否打印了任何来自Modem的原始数据(哪怕是乱码)。如果有乱码,说明物理连接通,但波特率不对。如果什么都没,检查接线和电源。

问题2:ESP32无法连接Wi-Fi。

  • 排查:在setup_wifi()函数中增加详细的串口打印。
    void setup_wifi() { Serial.print(“Connecting to “); Serial.println(WIFISSID); WiFi.begin(WIFISSID, PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(“.“); } Serial.println(“”); Serial.println(“WiFi connected“); Serial.println(“IP address: “); Serial.println(WiFi.localIP()); }
  • 解决:检查SSID和密码是否正确,特别是密码中的特殊字符。确保路由器没有设置MAC地址过滤。尝试将ESP32靠近路由器。

问题3:传感器数据不稳定或断连。

  • 排查:检查传感器电池电量(LabVIEW工具中通常会显示电压)。确保传感器与Modem之间没有严重的金属屏蔽或钢筋混凝土承重墙阻隔。Sub-1GHz信号绕射能力强,但穿透性一般。
  • 解决:考虑使用Mesh Modem或增加中继节点。适当降低数据上报频率以节省电量,延长电池寿命。

7.2 软件与代码类问题

问题4:MQTT连接Ubidots失败,返回状态码5(连接被拒绝)。

  • 原因:这几乎总是TOKEN错误或MQTT_CLIENT_NAME冲突。
  • 解决:仔细核对Ubidots账户中的Default Token,确保没有多余空格。确保MQTT_CLIENT_NAME在网络中是唯一的,如果之前有同名的客户端异常断开,服务器会暂时拒绝重连。可以在名称后添加随机后缀,如esp32_client_+random(1000)

问题5:数据成功发布,但Ubidots上显示为“未激活”或没有数据点。

  • 排查:检查MQTT的TopicPayload格式是否正确。主题必须是/v1.6/devices/{device_label}。载荷必须是有效的JSON,且变量标签与Ubidots中创建的完全一致(区分大小写)。
  • 技巧:在串口监视器中打印出准备发布的topicpayload字符串,复制出来到在线JSON验证器检查格式,并手动与Ubidots的界面进行比对。

问题6:如何解析复杂的Modem数据格式?

  • 实战技巧:不要试图一次性写对解析函数。首先,在代码中直接将SerialModem收到的原始数据rawData打印到串口。
    void loop() { if (SerialModem.available()) { String rawData = SerialModem.readStringUntil(‘\n’); Serial.println(“Raw: “ + rawData); // 打印原始数据 } }
  • 分析:观察打印出的数据格式。它可能是逗号分隔的CSV,可能是键值对,也可能是十六进制字符串。根据观察到的格式,逐步编写解析代码。例如,如果是“ID:1234,T:23.5,H:65“,就可以用StringindexOf()substring()函数来截取。

7.3 云平台与应用类问题

问题7:Ubidots仪表盘数据更新慢或不更新。

  • 排查:首先在Ubidots的Devices->Your Device->Raw Data里查看最后接收数据的时间戳,确认数据是否真的上传上来了。
  • 解决:仪表盘控件有数据刷新间隔设置,检查是否设置得过长。同时,检查ESP32代码中的上传间隔delay(),太长的间隔会导致仪表盘看起来更新慢。

问题8:想将数据导出或集成到自己的系统。

  • 方案:Ubidots提供了完善的REST API。你可以从API Credentials页面找到API文档链接。通过HTTP GET请求,携带你的Token,就可以获取指定设备、变量的历史数据。这为你进行二次分析、备份或导入其他系统提供了可能。

问题9:免费额度不够用了怎么办?

  • 策略:Ubidots免费版有设备数、数据点数和调用次数的限制。优化方案:
    1. 降低上报频率:非关键数据,将上传间隔从10秒调整为1分钟或5分钟。
    2. 数据聚合:在ESP32端进行简单计算,例如每10次读数求一个平均值再上传,而不是每次都上传。
    3. 本地存储与批量上传:如前所述,将数据缓存在本地,每小时或每天打包上传一次。
    4. 考虑替代平台:ThingsBoard、EMQX Cloud、阿里云物联网平台等也提供免费或低费用的套餐,可以评估迁移。

整个项目从硬件选型、连接调试,到代码编写、云端配置,是一个典型的物联网全栈实践。最关键的是保持耐心,遵循“分步验证”的原则:先确保硬件通信(LabVIEW工具),再确保网络连通(Wi-Fi、MQTT),最后处理数据解析和业务逻辑。当你第一次在手机上的Ubidots应用里看到自己部署的传感器传回的实时温湿度曲线时,那种成就感会让人觉得所有的调试都是值得的。这个系统作为一个稳定的数据采集终端,后续完全可以叠加更多的分析功能和自动化动作,比如当湿度连续高于80%时自动开启除湿机,这才是物联网真正开始发挥价值的地方。

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

相关文章:

  • 计算机网络(1) -- 基础知识
  • 基于舵机与3D打印的复古二进制显示模块设计与实现
  • Bebas Neue字体:当你的设计项目需要现代感标题时的实用解决方案
  • 洗不坏的新 e 选烤火罩,越用越顺手
  • Forza Mods AIO完整教程:免费开源游戏增强工具终极指南
  • 别再到处找破解版了!Kali Linux 2024最新版一键安装AWVS 14教程(附官方试用版申请与激活)
  • 本硕连读升学规划机构排行 核心维度客观解析 - 互联网科技品牌测评
  • CSP-J初赛 栈、队列、排序、指针、链表考点整理(2019-2025)
  • 【AI面试临阵磨枪-91】Skill 市场 / Hub 设计:审核、上架、评分、更新、安全扫描?
  • 深入解析FPSLocker:Nintendo Switch帧率解锁的核心技术与配置实践
  • 打造第二大脑:Obsidian 一键剪藏网页 + 自动多端同步 + AI 提炼
  • CloudBeaver终极指南:浏览器端多数据库统一管理平台深度解析与实战部署
  • 英雄联盟客户端工具箱LeagueAkari:从青铜到王者的智能辅助指南
  • 男士小型剃须刀排行推荐 适配不同场景与胡须类型 - 互联网科技品牌测评
  • Windows虚拟机性能终极优化指南:virtio-win驱动程序完整教程
  • CloudBeaver实战部署指南:从零构建高效Web数据库管理平台
  • 终极指南:5分钟学会用Mousecape免费定制Mac鼠标指针
  • 弱电工程师效率工具全攻略:从设计到运维,10 款必备软件一次配齐
  • 2026年超声波明渠流量计十大品牌权威推荐:技术实力与选型实战指南 - 仪表品牌榜
  • 如何通过G-Helper轻松掌控华硕笔记本性能:终极轻量化控制工具完整指南
  • OfflineInsiderEnroll:无需微软账户管理Windows预览版的终极方案
  • 基于树莓派与超声波传感器的智能垃圾监测系统实战指南
  • Obsidian Border主题深度解析:打造个性化知识管理空间的实战指南
  • 东莞按键开关电子开关厂家怎么选?3个指标看专业度 - 变量人生001
  • 如何用AI图像修复工具快速去除照片中的干扰元素?
  • 油气行业Petrel正版化成本分析:如何与厂商谈判争取行业优惠?
  • 雷达仿真测试技术落地能源安防,干扰模拟器筑牢场站安防监测防线
  • Langflow完整指南:5步掌握可视化AI工作流构建
  • Windows预览版退出与系统稳定化:OfflineInsiderEnroll注册表修改方案深度解析
  • 5分钟告别命令行:AriaNg让aria2下载管理变得简单直观