在现代农业和工业环境中,实时监测环境参数变得越来越重要。本文将介绍如何使用 DTU(数据传输单元)来实时采集空气温湿度,可视化和管理数据。
硬件介绍
Mini DTU(数据传输单元)

Mini DTU 是一种专门用于数据采集和传输的设备,它能够:
- 通过串口(RS485/RS232)采集传感器数据
- 通过 4G/WiFi 等网络将数据实时上传到云平台
- 支持多种工业协议(如 Modbus)
- 具有低功耗、稳定性高的特点
温湿度传感器

我们使用的是标准的 RS485 接口温湿度传感器:
- 测量范围:温度 -40℃~80℃,湿度 0~100%RH
- 通信协议:Modbus-RTU
- 供电要求:DC 12V/24V
- 测量精度:温度 ±0.5℃,湿度 ±3%RH
设备连接
- 硬件连接:
- 将温湿度传感器的 A+ 和 B- 线分别连接到 DTU 的 485A 和 485B 接口
- 连接电源(注意电压要求)
- 确保 DTU 的天线安装正确,信号良好
- 通信参数设置:
- 波特率:9600
- 数据位:8
- 停止位:1
- 校验位:无校验
- Modbus 从站地址:100(可根据实际情况设置)

UMS 配置步骤
什么是 UMS
UMS(Units Management System) 是一个设备管理管理平台,帮助您快速构建 IoT 应用。
1. 添加设备
- 登录平台
- 进入”设备管理”页面
- 点击”绑定设备”按钮
- 输入设备信息:
- 设备 ID:DTU 设备的唯一标识
- 安全码:设备的安全验证码
- 点击”确认”完成设备添加
2. 配置因子
在”设备详情”页面配置温湿度传感器的因子:

3. 查看数据
配置完成后,您可以通过以下方式查看数据:
- 实时数据**

- 历史数据**
- 点击因子的”查看更多数据”按钮
- 可以查看图表形式的历史数据
- 支持选择时间范围

使用开放接口,读取传感器数据
UMS 提供了开放的 REST API,让您可以通过编程方式获取设备数据。以下是一些示例代码,展示如何获取温湿度数据。
Python 示例
import requests
import time
from datetime import datetime
def get_device_data(device_id, access_token):
"""获取设备数据
Args:
device_id: 设备ID
access_token: 访问令牌
"""
url = f"https://ums.holdingbyte.com/api/v2/devices/{device_id}/data/"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.json()
else:
raise Exception(f"获取数据失败: {response.status_code}")
def main():
# 配置参数
DEVICE_ID = "your_device_id"
ACCESS_TOKEN = "your_access_token"
try:
# 获取数据
result = get_device_data(DEVICE_ID, ACCESS_TOKEN)
if result['success']:
# 解析数据
for item in result['data']:
# 转换时间戳
timestamp = datetime.fromtimestamp(item['t'])
# 获取数值
value = item['value']
# 获取因子ID
agri_id = item['agri_id']
print(f"因子: {agri_id}")
print(f"数值: {value}")
print(f"时间: {timestamp}")
print("---")
else:
print(f"错误: {result['error']}")
except Exception as e:
print(f"发生错误: {str(e)}")
if __name__ == '__main__':
main()
PHP 示例
function getDeviceData($deviceId, $accessToken) {
// 设置请求URL
$url = "https://ums.holdingbyte.com/api/v2/devices/{$deviceId}/data/";
// 初始化cURL
$ch = curl_init();
// 设置cURL选项
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer {$accessToken}",
"Content-Type: application/json"
]
]);
// 执行请求
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// 关闭cURL
curl_close($ch);
if ($httpCode === 200) {
return json_decode($response, true);
} else {
throw new Exception("获取数据失败: " . $httpCode);
}
}
// 主程序
try {
// 配置参数
$deviceId = "your_device_id";
$accessToken = "your_access_token";
// 获取数据
$result = getDeviceData($deviceId, $accessToken);
if ($result['success']) {
// 解析数据
foreach ($result['data'] as $item) {
// 转换时间戳
$timestamp = date('Y-m-d H:i:s', $item['t']);
// 获取数值
$value = $item['value'];
// 获取因子ID
$agriId = $item['agri_id'];
echo "因子: {$agriId}\n";
echo "数值: {$value}\n";
echo "时间: {$timestamp}\n";
echo "---\n";
}
} else {
echo "错误: " . $result['error'] . "\n";
}
} catch (Exception $e) {
echo "发生错误: " . $e->getMessage() . "\n";
}
注意事项
- 认证
- 需要先获取访问令牌(Access Token)
- 在请求头中使用 Bearer 认证
- 数据解析
- 注意时间戳是 UTC 时间
- 根据因子 ID 区分不同的数据
- 数值已经经过换算,可以直接使用
- 构建自定义的数据展示界面
- 实现数据分析和预警
- 与其他系统集成