场景简介在工业、农业、商业、园区、楼宇存在着大量通过DTU采集南向设备接入物联网平台的应用场景,这些场景的设备一般需要通过DTU透传上云。本示例主要展示通过有人G771 Cat.1 DTU如何接入腾讯云物联网开发平台实现数据的收发,然后会进阶接入温湿度传感器完成温湿度上报到物联网开发平台。本实践整体网络拓扑图如下图所示: ![]() 环境准备1. 所需设备/软件
2. 设备联网 2.1 正确安装 4G 天线,将 USB 转 RS485 和电源线接入对应端子,确保接线无误,给设备上电。硬件接线示意图如下: ![]() 加载中... 2.2 设备正常上电后,红色的POW指示灯会亮起,G771型DTU内置的eSIM卡,上电后可以扫描DTU上的二维码,使用微信小程序配置,这里先选择默认配置即可。 3. 注册有人云账号,查看设备基础信息。 3.1 通过上一步扫描设备上的二维码,这时就可以登录有人云的控制台,查看当前这台设备的基础信息: ![]() 3.2 点击更多->编辑->关闭数据透传功能。 ![]() 创建产品与设备1. 登录腾讯云物联网开发平台控制台。 2. 点击公共实例->新建项目->保存。 ![]() 3. 点击进入上一步新建的项目,点击新建产品,进入新建产品界面。 ![]() 注意: 这里的数据协议需要选择自定义透传。 4. 点击设备调试-->新建设备,设备名称可以自定义,这里建议使用当前DTU的IMEI作为设备名,方便后期对设备管理。 ![]() 5. 至此,我们拿到了设备的三元组信息,可以据此生成MQTT连接参数。 ![]() 注意: 连接平台1. PC连接USB转RS485工具,在设备管理器会枚举出一个新的COM口,打开有人物联网上位机配置工具,连接此COM口,默认串口连接参数:115200,8,N,1;连接成功后先点击进入配置状态,然后点击查询IMEI,如果能正确查询到IMEI码,则表明硬件连接正常可以进入下一步的配置,如果查不到IMEI码则可能是硬件连接故障,请自行排查接线、供电、串口驱动等问题。 ![]() 2. 配置MQTT连接参数,测试阶段可以使用腾讯云物联网开发平台控制台生成的MQTT连接参数。 ![]() 注意: 工作模式选择MQTT模式,MQTT相关参数请直接复制粘贴腾讯云物联网开发平台的MQTT连接参数。 3. 订阅/发布腾讯云物联网开发平台的raw topic。 ![]() ![]() 注意: 这里的${deviceName}请替换为之前在腾讯云物联网开发平台新建的设备名称。 4. 点击配置上位机的设置并保存所有参数按钮,完成配置。 ![]() 5. 设置完成后,DTU的LINK1黄灯常亮且已经成功连接到腾讯云物联网开发平台,可以在控制台查看设备的在线状态。 ![]() 6. 通过配置上位机发送数据测试。 ![]() 7. 腾讯云物联网开发平台收到DTU的上行数据。 ![]() 8. 控制台的上行数据是base64编码后展示的,如需要源数据则需要base64解码后查看。 YWJjZDEyMzQ1Njc4OTA= base64 decode ---> abcd1234567890 温湿度传感器通过DTU接入平台控制台创建温湿度传感器产品1. 和上面的步骤一样,不过这次我们在当前项目下,创建一个Modbus温湿度传感器的产品,产品的物模型如下,主要是创建了一个温度属性,一个湿度属性。
2. 同样新建一个设备,拿到设备的MQTT连接参数。 ![]() 3. 重新配置DTU的MQTT参数,让新建这台设备上线。 ![]() 注意: 通过上位机配置DTU的MQTT连接参数时,订阅和发布的topic也需要同步更改为新设备的。 温湿度传感器的配置1. 首先通过USB转RS485用PC的串口助手来调试温湿度传感器,请求温湿度和响应都正常后,再接入DTU。以本次使用的ZTS-3008-WS-N01型温湿度传感器为例。首先查阅其规格书,默认通讯波特率是4800,需要更改为115200来适配DTU,根据规格书更改波特率的指令直接修改。 ![]() 注意: 这里修改波特率前使用的还是其默认波特率4800,发送完该指令且温湿度传感器应答完成后,再切换串口助手的波特率为115200。 2. 查询温湿度传感数据 根据其规格书描述发送查询指令来查询。 ![]() 串口助手可以正确返回温湿度: ![]() 这样我们确认温湿度传感器工作正常,然后接入DTU。 温湿度数据上报云平台通过前面的两个步骤,我们的准备工作完成,现在可以通过控制台来查询温湿度传感器的数据。整个查询上报的流程如下所示: ![]() 硬件接线图如下图所示: ![]() 加载中... 由于温湿度传感器和DTU是Modbus通讯,DTU上报给腾讯云物联网开发平台的数据也是Modbus的hex数据,所以,需要将这些数据转换成平台识别的物模型数据,这样我们也能更直观的观测数据,也方便后台的进一步处理和前端的展示。这里就需要用到我们的云端数据解析功能。 1. 开启云端数据解析功能。 ![]() 2. 编写云端数据解析函数,解析上下行数据。 // 数据完整性检查 function checkCrc16(buffer) { let crc = 0xFFFF; let odd; for (let i = 0; i < buffer.length - 2; i++) { crc ^= buffer[i]; for (let j = 0; j < 8; j++) { odd = crc & 0x0001; crc >>= 1; if (odd) { crc ^= 0xA001; } } } return (buffer[buffer.length - 1] << 8 | buffer[buffer.length - 2]) == crc; }
// 上行数据解析函数,fPort为LoraWAN的端口号,这里可以不用关注。bytes:raw topic上报的裸数据 function RawToProtocol(fPort, bytes) { console.log(bytes); // 1. check crc16 if (!checkCrc16(bytes)) { return {}; } // 2. check is temp&RH if (bytes[0] != 0x01 || bytes[1] != 0x03) { return {}; } // 3. 构造数据模板的report消息 let data = { 'method': 'report', 'clientToken': new Date().getTime().toString(), 'params': {} }; // 4. 解析温湿度数据 data.params.temperature = (bytes[5] << 8 | bytes[6]) / 10.0; data.params.humidity = (bytes[3] << 8 | bytes[4]) / 10.0; // 5. 返回构造好的数据到云平台 return data; } 3. 调试上行解析函数:将上面的上行解析函数粘贴到上行解析函数框中,然后填入一条测试上行数据,点击运行。如果解析函数编写正确,则右侧运行结果框中会打印正确的report数据模板消息。 ![]() 4. 让DTU定时上报温湿度,如果您的DTU有边缘计算和二次开发能力,则编写一个定时任务,定期给温湿度传感器发送轮询温湿度的指令,然后将传感器的上报数据发送到腾讯云物联网开发平台。本文使用的USR-G771并没有提供二次开发能力,但是它有一个心跳功能我们可以加以利用,达到一样的定期上报功能。 4.1 首先通过DTU配置上位机,打开DTU的心跳功能,然后心跳发送方式选择向串口终端发送心跳包。类型选择自定义,数据就是轮询温湿度传感器的数据。勾选为hex数据。配置完成后点击设置并保存所有参数。 ![]() 4.2 重新通过上位机将DTU配置为MQTT模式,然后点击设置并保存所有参数。 注意: 有人DTU的心跳包只能在网络透传模式里配置,所以需要先配置为网络透传模式,配置好心跳包后,再切换为MQTT模式。 5. 通过以上步骤,就可以定期将温湿度数据上报到腾讯云物联网开发平台了。 ![]() 步进电机通过DTU接入平台控制台创建步进电机产品 ![]() 然后导入如下物模型:
注意: 步进电机有很多参数需要配置,这里只是取有代表性的三个属性来做示例,具体请根据不同应用来做相应调整。 步进电机配置 ![]() 加载中... 1. 电机初次上电需要校准,校准时电机不要带负载。 2. 电机使用Modbus RTU协议,默认通讯115200,8N1,请在电机控制菜单中选择Checksum为Modbus。 3. 使用USB转RS485模块发送读取固件版本和硬件版本的指令,如果接线和供电都正常,则会收到相应的回复。 ![]() ![]() 云平台控制步进电机通过上面的步骤,电机已经可以通过USB转485成功控制,将电机接入DTU,硬件连接如下: ![]() 加载中... 1. 通过腾讯云物联网开发平台控制台创建电机设备。 ![]() 2. 打开云端解析功能。 ![]() 3. 将步骤1新建的设备的MQTT连接参数通过DTU配置工具填入DTU,使得这台设备成功上线。 ![]() 4. 编写下行数据解析函数,调试通过后提交。 // 生成CRC16校验码 function createCrc16(buffer) { let crc = 0xFFFF; let odd; for (let i = 0; i < buffer.length - 2; i++) { crc ^= buffer[i]; for (let j = 0; j < 8; j++) { odd = crc & 0x0001; crc >>= 1; if (odd) { crc ^= 0xA001; } } } buffer[buffer.length - 2] = crc & 0xff; buffer[buffer.length - 1] = crc >> 8; return buffer; }
// 下行测试数据,用于调试 const testControl= { 'method': 'control', 'clientToken': '20a4ccfd-d308-11e9-86c6-5254008a4f10', 'params': { 'speed': 1, 'a': 3, 'dir': 0 } }
// 下行数据解析函数 function ProtocolToRaw(obj) { // 通过DTU发送的电机控制数据 let sendBytes = [0x01, 0x10, 0x00, 0xf6, 0x00, 0x03, 0x06, 0x00, 0x11, 0x00, 0x88, 0x00, 0x00, 0x7f, 0x75]; if (obj.method == 'control') { sendBytes[7] = obj.params.dir; // 电机方向 sendBytes[8] = obj.params.a; // 加速度 sendBytes[9] = (obj.params.speed >> 8) & 0xff; // 速度 sendBytes[10] = obj.params.speed & 0xff; createCrc16(sendBytes) // 生成CRC16校验数据 } return sendBytes; } ![]() 5. 编写上行数据解析函数,调试通过后提交。
![]() 6. 上下行数据解析函数编写完成后,就可以通过在线调试来控制电机。 ![]() 每一条控制指令下行后,电机执行完成都会返回一条上行指令,通过上行解析函数后的日志如下: ![]() Q&A1. 我使用的DTU无法定时发送Modbus轮询指令,该怎么操作? 答:可以使用云端解析脚本的下行解析函数,由云端来发送一个轮询的物模型协议指令,然后解析成Modbus协议的轮询指令下发给DTU,再由DTU发送给温湿度传感器,但是这样就不能做到定时上报了。 2. 我的DTU无法获取传感器数据 答:1. 先使用USB转RS485串口工具接传感器,模拟DTU来发送轮询指令,看传感器是否正常上报;如异常: a. 检查硬件连接是否正常; b. 根据传感器规格书检查串口波特率是否匹配(包括和DTU的串口波特率是否匹配) 2 .再使用USB转RS485串口工具接DTU,看是否正确收到DTU的轮询指令 3. DTU数据正常上报,但是无法解析出正确的物模型数据 答:1. 首先在腾讯云物联网开发平台控制台查询上报的裸数据是否正确。 ![]() 2 . 检查解析函数是否编写正确,可以将上面的裸数据填入模拟调试框中,来调试上行解析函数。
|
|