OneNET 平台传感器数据采集与展示 — 完整入门教程
适合零基础入门,以温湿度采集为例,完整走通「注册 → 建产品 → 接设备 → 上传数据 → 可视化展示」全流程。
一、整体流程概览
传感器(DHT11等) → 单片机(STM32/ESP32/ESP8266) → MQTT协议 → OneNET云平台 → View可视化大屏
整个过程分 5 步:
- 注册 OneNET 账号,进入 OneNET Studio
- 创建产品 & 定义物模型(告诉平台你有哪些数据)
- 创建设备(在平台上注册一个虚拟设备)
- 硬件端通过 MQTT 协议上传传感器数据
- 用 OneNET View 做数据可视化展示
二、第 1 步:注册账号 & 进入平台
- 打开 OneNET 官网:open.iot.10086.cn/
- 点击右上角「注册」,使用手机号注册(免费)
- 登录后,进入控制台,点击左侧菜单的 「OneNET Studio」(这是新版统一入口)
注意:2023 年 4 月后,OneNET 将 NB-IoT 套件、MQTT 套件、物生活平台合并为统一的 OneNET Studio,老版教程的截图可能不一样,以新版为准。
三、第 2 步:创建产品 & 定义物模型
3.1 创建产品
- 在 OneNET Studio 控制台,点击 「产品管理」→「创建产品」
- 填写产品信息:
- 产品名称:例如
温湿度监测器 - 联网方式:选择
Wi-Fi(如果用 ESP8266/ESP32)或蜂窝网络(如果用 4G 模组) - 数据协议:选择 「OneJSON」(推荐,基于物模型)或「数据流」(更简单但功能少)
- 设备接入协议:选择 「MQTT」(最常用)
- 产品名称:例如
- 点击「创建」
3.2 定义物模型(功能定义)
物模型就是告诉平台「你的设备有哪些属性」。
- 进入刚创建的产品 → 点击 「功能定义」(或「设置物模型」)
- 点击「添加自定义功能点」,逐个添加:
| 功能名称 | 标识符 | 数据类型 | 取值范围 | 单位 |
|---|---|---|---|---|
| 温度 | temperature | float | -40 ~ 80 | ℃ |
| 湿度 | humidity | float | 0 ~ 100 | %RH |
- 添加完成后点击 「保存」 使物模型生效
提示:如果选择了「数据流」协议而非 OneJSON,则不需要定义物模型,数据流名称(key)可以在上传数据时自由指定。
四、第 3 步:创建设备
- 在产品页面,切换到 「设备管理」→「添加设备」
- 填写:
- 设备名称:例如
sensor_001(建议用英文)
- 设备名称:例如
- 创建成功后,记录以下 三个关键信息(连接时要用):
- 产品 ID(product_id)
- 设备名称(device_name)
- 设备密钥(device_key)或 产品密钥(product_key)
五、第 4 步:设备端接入 — 上传传感器数据
5.1 MQTT 连接参数
OneNET MQTT 接入地址:
| 参数 | 值 |
|---|---|
| 服务器地址 | mqtts.heclouds.com |
| 端口 | 1883(TCP) / 8883(TLS 加密) |
| Client ID | 设备名称 |
| Username | 产品ID |
| Password | 经过 Token 算法计算的鉴权字符串 |
5.2 Token 计算
OneNET 使用 Token 鉴权,密码不是直接用密钥,而是需要计算:
Token 格式:
version=2018-10-31&res=products/{产品ID}/devices/{设备名称}&et={过期时间戳}&method=sha256&sign={签名}
- 官方提供了 Token 生成工具,可在 OneNET 文档中心下载
- 也可以用 Python 自行计算(下面给出示例)
Python Token 生成示例:
import base64
import hmac
import hashlib
import time
from urllib.parse import quote
def generate_token(product_id, device_name, device_key, expire_time=None):
"""生成 OneNET MQTT 连接所需的 Token"""
if expire_time is None:
expire_time = int(time.time()) + 3600 * 24 * 365 # 1年后过期
# 资源路径
res = f"products/{product_id}/devices/{device_name}"
# 待签名字符串
string_to_sign = f"{expire_time}\n{hashlib.sha256(res.encode()).hexdigest()}"
# 使用设备密钥进行 HMAC-SHA256 签名
key = base64.b64decode(device_key)
sign = base64.b64encode(
hmac.new(key, string_to_sign.encode(), hashlib.sha256).digest()
).decode()
# 组装 Token
token = (
f"version=2018-10-31"
f"&res={quote(res, safe='')}"
f"&et={expire_time}"
f"&method=sha256"
f"&sign={quote(sign, safe='')}"
)
return token
# 使用示例
product_id = "你的产品ID"
device_name = "sensor_001"
device_key = "你的设备密钥"
token = generate_token(product_id, device_name, device_key)
print(f"Password: {token}")
提示:初学者建议先用官方提供的 Token 计算小工具,填入参数即可生成。
5.3 数据上报格式(OneJSON 物模型模式)
连接成功后,向以下 Topic 发送数据:
上报属性 Topic:
$sys/{产品ID}/{设备名称}/thing/property/post
消息体(JSON):
{
"id": "1",
"version": "1.0",
"params": {
"temperature": {
"value": 25.6
},
"humidity": {
"value": 65.3
}
}
}
5.4 硬件方案选择
根据你的情况选择一种:
| 方案 | 说明 | 适合场景 |
|---|---|---|
| ESP8266 + DHT11 | 最便宜,Arduino 开发 | 课设/毕设入门 |
| ESP32 + 传感器 | 性能更强,支持蓝牙 + Wi-Fi | 稍复杂的项目 |
| STM32 + ESP8266 | STM32 采集数据,ESP8266 负责联网 | 需要学 STM32 的场景 |
| STM32 + 4G 模组 | 无需 Wi-Fi,SIM 卡联网 | 户外/无 Wi-Fi 环境 |
| 树莓派 | Python 直接开发 | 快速原型验证 |
5.5 ESP8266 (Arduino) 示例代码
以 ESP8266 + DHT11 为例的核心代码框架:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
// Wi-Fi 配置
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
// OneNET MQTT 配置
const char* mqtt_server = "mqtts.heclouds.com";
const int mqtt_port = 1883;
const char* client_id = "sensor_001"; // 设备名称
const char* mqtt_user = "你的产品ID"; // 产品ID
const char* mqtt_pass = "计算好的Token"; // Token
// 传感器配置
#define DHTPIN D4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
// 上报数据的 Topic
char topic[128];
void setup() {
Serial.begin(115200);
dht.begin();
// 连接 Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
// 连接 MQTT
client.setServer(mqtt_server, mqtt_port);
// 拼接 Topic
sprintf(topic, "$sys/%s/%s/thing/property/post", mqtt_user, client_id);
}
void reconnect() {
while (!client.connected()) {
if (client.connect(client_id, mqtt_user, mqtt_pass)) {
Serial.println("MQTT connected");
} else {
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// 读取传感器数据
float temp = dht.readTemperature();
float humi = dht.readHumidity();
if (!isnan(temp) && !isnan(humi)) {
// 构造 OneJSON 格式消息
char payload[256];
sprintf(payload,
"{\"id\":\"1\",\"version\":\"1.0\",\"params\":{"
"\"temperature\":{\"value\":%.1f},"
"\"humidity\":{\"value\":%.1f}"
"}}",
temp, humi);
// 发布到 OneNET
client.publish(topic, payload);
Serial.printf("Published: temp=%.1f, humi=%.1f\n", temp, humi);
}
delay(10000); // 每10秒上报一次
}
5.6 没有硬件?用 MQTTX 工具模拟
如果你暂时没有硬件,可以用 MQTTX 桌面工具模拟设备上报数据:
- 下载 MQTTX:mqttx.app/
- 新建连接,填入上面的 MQTT 参数
- 连接成功后,向对应 Topic 发布 JSON 数据
- 回到 OneNET 平台查看设备状态是否变为「在线」,数据是否有上报
六、第 5 步:数据可视化展示
6.1 在设备详情页查看数据
最简单的方式:进入 OneNET Studio → 设备管理 → 点击你的设备 → 查看「设备详情」页面,可以看到上报的属性值和历史数据曲线。
6.2 使用 OneNET View 3.0 制作可视化大屏
这是 OneNET 提供的拖拽式可视化工具,可以做出专业的数据展示页面。
操作步骤:
- 在 OneNET Studio 左侧菜单找到 「数据可视化」→「OneNET View」
- 点击 「新建项目」,选择一个模板或空白项目
- 进入编辑器后,从左侧组件库拖入需要的组件:
- 仪表盘:实时显示当前温度/湿度值
- 折线图:显示温湿度随时间的变化趋势
- 数字翻牌器:突出显示关键数值
- 文字标题:添加页面说明
- 点击组件 → 右侧「数据」面板 → 选择数据来源:
- 数据源类型:OneNET 设备
- 选择你的产品和设备
- 绑定对应的属性(temperature / humidity)
- 调整样式、颜色、布局
- 点击 「预览」 查看效果
- 满意后点击 「发布」,生成一个可分享的链接
6.3 通过 API 自己开发展示页面
如果你想更灵活地开发前端页面,可以调用 OneNET 的 RESTful API 获取数据:
GET https://iot-api.heclouds.com/thingmodel/query-device-property
Header: authorization: 你的Token
参数: product_id, device_name
然后用 ECharts、Chart.js 等前端图表库自行渲染。
七、常见问题
Q1: 设备一直显示「离线」?
- 检查 MQTT 连接参数是否正确(产品ID、设备名称、Token)
- Token 是否过期
- 网络是否能访问
mqtts.heclouds.com:1883
Q2: 物模型和数据流有什么区别?
- 物模型(OneJSON):结构化的,先定义属性再上传,推荐新项目使用
- 数据流:更灵活,key-value 方式直接上传,适合简单场景
Q3: 一个账号能接多少设备?
- 免费用户可以接入一定数量的设备(通常几十到上百台),对于学习和小项目完全够用
Q4: 数据多久刷新一次?
- 取决于你设备端的上报频率,一般设为 5~60 秒上报一次即可
八、推荐学习资源
- OneNET 官方文档:open.iot.10086.cn/doc/v5/
- OneNET Studio 帮助文档:open.iot.10086.cn/studio/summ…
- CSDN 搜索:「OneNET 2024 MQTT 教程」有大量图文教程
- B站搜索:「OneNET 物联网」有视频演示教程
- MQTTX 下载:mqttx.app/ (无硬件时模拟测试)
- Token 计算工具:OneNET 文档中心提供下载
总结:OneNET 做传感器数据采集展示的核心就是三件事 —— ① 平台上建好产品和设备,② 硬件端通过 MQTT 把数据发上去,③ 用 View 或 API 把数据展示出来。