【转】使用有人DTU设备接入OneNet(基于TCP透传)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3892|回复: 0

【转】使用有人DTU设备接入OneNet(基于TCP透传)

[复制链接]
发表于 2017-7-25 09:58 | 显示全部楼层 |阅读模式
本帖是基于《TCP透传功能初探》一文为基础增加使用DTU设备来认识TCP透传功能,步骤如下:
步骤1:创建基于TCP协议的产品(略);
步骤2:创建设备,如下图:
QQ截图20170410094819.png (0 Bytes, 下载次数: 126)
下载附件
2017-4-10 10:07 上传




步骤3:上传LUA脚本,本例使用到的脚本文件如附件: sample_20170410.rar (3.24 KB, 下载次数: 676)  2017-4-10 15:55 上传
点击文件名下载附件



QQ截图20170410100509.png (0 Bytes, 下载次数: 148)
下载附件
2017-4-10 10:07 上传




步骤4:连接DTU设备,连接好天线,插入SIM卡,使用USB转232线连接到DTU设备RS232接口,使用USB转485线连接到DTU设备的RS485接口,如下图所示:
硬件连接事宜图.png (0 Bytes, 下载次数: 152)
下载附件
2017-4-10 14:56 上传



设备连接.jpg (0 Bytes, 下载次数: 147)
下载附件
2017-4-10 14:57 上传




数据拓扑图如下图所示:
拓扑图.png (0 Bytes, 下载次数: 150)
下载附件
2017-4-10 14:56 上传



说明:1、RS232接口是对DTU网络连接等参数的配置(本例中为串口COM10),RS485模拟终端485接口设备(本例中为串口COM11)。
           2、PC使用485接口与DTU设备进行数据交换,DTU设备利用GPRS上传数据到平台。

步骤5:打开USR-GM3-V1.1.3.61.exe软件进行配置,配置如下:
设置.png (0 Bytes, 下载次数: 151)
下载附件
2017-4-10 14:56 上传




配置流程说明:
1、设置串口号、波特率(115200),8N1,并打开串口;
2、选择“网络透传模式”;
3、TCP服务器IP地址为:183.230.40.40 端口号为:1811;连接类型为:长连接
4、注册包发送方式:与服务器建立连接时向服务器发送一次;注册类型选择:自定义,并填写注册包,本例为:*84075#0001#sample*
登录鉴权格式为  *PID#AuthCode#ParserName*  
其中:
PID  为  产品ID
AuthCode 为  鉴权信息(创建设备的时候所指定)
ParserName  为  脚本名称(上传Lua脚本的时候所指定)
5、完成参数设置后线点击进入【进入配置状态】按钮,再点击【设备并保存所有参数】按钮。
如果DTU设备上的LINK1灯点亮,则可在平台上设备已上线:

QQ截图20170410101859.png (0 Bytes, 下载次数: 146)
下载附件
2017-4-10 10:18 上传




登录鉴权成功后,平台会解析上传的LUA脚本,脚本中device_timer_init会启动一个定时器,会定时向DTU设备发送数据:
msg.png (0 Bytes, 下载次数: 127)
下载附件
2017-4-10 15:13 上传




DTU设备定时收到”hello,this msg from OneNet”符串:
发送数据.png (0 Bytes, 下载次数: 127)
下载附件
2017-4-10 16:40 上传




步骤6:上传数据,打开串口调试助手,此串口模拟485设备,连接到DTU设备485接口上,选择HEX发送,在数据填写16进制数据31 32 33 34
如上图所示,点击发送,这时平台中LUA脚本中的device_data_analyze会解析数据,
如源码:--------------------------------------------------------------------------------------------------
function device_data_analyze(dev)
         local t = {}
         local a = 0
--        local s = 0

         -- 添加用户自定义代码 --
        -- 例如: --
        local s = dev:size()
         add_val(t,"ds_test",0,dev:bytes(1,s))

         -- return $1,$2 --
        -- 例如: --
        return s,to_json(t)
end
--------------------------------------------------------------------------------------------------
并且把上传的数据解析为JSON格式保存在平台上,数据流名为:ds_test,数据点则为我们发送的数据为字符串,内容为“31323334”,如下图平台中保存的数据:

平台数据.png (0 Bytes, 下载次数: 146)
下载附件
2017-4-10 16:41 上传




步骤7:使用API方法下发命令,
方法:POST
URL:http://api.heclouds.com/cmds
参数:device_id=5241585  //用户填写自己的设备ID
HTTP头部:api-key:Y=ye7vbatnOqDA0fYxirTVWPCY0=  //用户填写自己的APIKEY
HTTP内容:用户自定义数据:jsonstring二进制数据(小于64K
可使用Fiddler工具下发命令,如下图进行设置:
api3.gif (0 Bytes, 下载次数: 154)
下载附件
2017-4-10 14:55 上传





整个发送数据格式为(参考):
POST http://api.heclouds.com/cmds?device_id=5241585 HTTP/1.1
api-key: Y=ye7vbatnOqDA0fYxirTVWPCY0=
Host: api.heclouds.com
Content-Length: 6

123456
------------------------------------------------------------------------------------------------------
DTU设备接收到平台下发命令后通过485通讯接口转发出来,利用串口调试助手可查看下发的命令:
485.png (0 Bytes, 下载次数: 188)
下载附件
2017-4-10 15:25 上传




至此我们就完成了一次使用DTU设备测试TCP透传功能,用户可按照自己私有协议编写LUA脚本来完成数据上传。此帖如有不足之处,请不吝赐教。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 03:34 , Processed in 0.070784 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表