合宙模块物理连接与简单调试
1.固件确认
YED-D724W模块
图一 模块介绍
由于模组有AT固件和DTu固件区分,所以在使用之前,需要确认固件版本。
1 有LED的设备确认方法:
去掉设备的SIM卡,然后上电设备。观察NET LED和RDY LED。如果2个LED同时亮5秒灭5秒,表示是DTU固件,否者不是。如果只有一个NET LED,NET LED亮5秒灭5秒,表示是DTU固件。
2 没有LED的设备确认方法:
通过串口发送config,get,imei\r\n,读取固件版本。如果固件版本格式为YED_DTU_XXX表示是DTU固件,否则不是
2.串口连接
图二 RS232 接口定义
图三 接口引脚
 图四 LED 状态说明  图五 实物连接图
连接接完引脚根据具官方说明查看指示灯状态。确认链接。
3.创建产品话题,物理模型等
1.创建产品和设备

将进行注册的设备命名为实际设备的IMEI号
2.添加物模型
添加完成之后会自动给出
3.编写解析脚本
var COMMAND_REPORT = 0x00; var COMMAND_SET = 0x01; var COMMAND_REPORT_REPLY = 0x02; //上报数据返回结果。 var COMMAND_SET_REPLY = 0x03; var COMMAD_UNKOWN = 0xff; //未知的命令。 var ALINK_PROP_REPORT_METHOD = 'thing.event.property.post'; //标准ALink JSON格式topic, 设备 上传属性数据到 云端 var ALINK_PROP_SET_METHOD = 'thing.service.property.set'; //标准ALink JSON格式topic, 云端 下发属性控制指令 到设备端 function rawDataToProtocol(bytes) { var uint8Array = new Uint8Array(bytes.length); for (var i = 0; i < bytes.length; i++) { uint8Array[i] = bytes[i] & 0xff; } var dataView = new DataView(uint8Array.buffer, 0); var jsonMap = new Object(); var fHead = uint8Array[0]; if (fHead == COMMAND_REPORT) { jsonMap['method'] = ALINK_PROP_REPORT_METHOD; jsonMap['version'] = '1.0'; jsonMap['id'] = '' + dataView.getInt32(1); var params = {}; params['LightVolt'] = dataView.getInt32(5); params['PowerSwitch'] = uint8Array[9]; jsonMap['params'] = params; }else if(fHead == COMMAND_SET_REPLY) { jsonMap['version'] = '1.0'; //ALink JSON格式,协议版本号固定字段。 jsonMap['id'] = '' + dataView.getInt32(1); //ALink JSON格式,标示该次请求id值。 jsonMap['code'] = ''+ dataView.getUint8(5); jsonMap['data'] = {}; } return jsonMap; } function protocolToRawData(json) { var method = json['method']; var id = json['id']; var version = json['version']; var payloadArray = []; if (method == ALINK_PROP_SET_METHOD) { var params = json['params']; var prop_int32 = params['LightVolt']; var prop_bool = params['PowerSwitch']; //按照自定义协议格式拼接 rawdata payloadArray = payloadArray.concat(buffer_uint8(COMMAND_SET)); payloadArray = payloadArray.concat(buffer_int32(parseInt(id))); payloadArray = payloadArray.concat(buffer_int32(parseInt(prop_int32))); payloadArray = payloadArray.concat(buffer_uint8(prop_bool)); }else if (method == ALINK_PROP_REPORT_METHOD) { //设备上报数据返回结果。 var code = json['code']; payloadArray = payloadArray.concat(buffer_uint8(COMMAND_REPORT_REPLY)); //command字段。 payloadArray = payloadArray.concat(buffer_int32(parseInt(id))); //ALink JSON格式'id'。 payloadArray = payloadArray.concat(buffer_uint8(code)); } else { //未知命令,对于这些命令不做处理。 var code = json['code']; payloadArray = payloadArray.concat(buffer_uint8(COMMAD_UNKOWN)); //command字段。 payloadArray = payloadArray.concat(buffer_int32(parseInt(id))); //ALink JSON格式'id'。 payloadArray = payloadArray.concat(buffer_uint8(code)); } return payloadArray; } function transformPayload() {} //以下是部分辅助函数 function buffer_uint8(value) { var uint8Array = new Uint8Array(1); var dv = new DataView(uint8Array.buffer, 0); dv.setUint8(0, value); return [].slice.call(uint8Array); } function buffer_int16(value) { var uint8Array = new Uint8Array(2); var dv = new DataView(uint8Array.buffer, 0); dv.setInt16(0, value); return [].slice.call(uint8Array); } function buffer_int32(value) { var uint8Array = new Uint8Array(4); var dv = new DataView(uint8Array.buffer, 0); dv.setInt32(0, value); return [].slice.call(uint8Array); } function buffer_float32(value) { var uint8Array = new Uint8Array(4); var dv = new DataView(uint8Array.buffer, 0); dv.setFloat32(0, value); return [].slice.call(uint8Array); }
rawdata 一块就是拼接的物模型属性。
4.配置dtu
用串口助手进行配置
1.读取imei
config,get,imei\r\n
2.查询链接状态
config,get,netstatus,1\r\n
3.配置链接串口,订阅,发布话题
config,set,ali,1,rs232,yxym,120,cn-shanghai,hhyy31pDELD,yvQUbxW82d6nJ4yU,1,1,/sys/hhyy31pDELD/
I
M
E
I
/
t
h
i
n
g
/
m
o
d
e
l
/
d
o
w
n
r
a
w
;
/
s
y
s
/
h
h
y
y
31
p
D
E
L
D
/
{IMEI}/thing/model/down_raw;/sys/hhyy31pDELD/
IMEI/thing/model/downraw;/sys/hhyy31pDELD/{IMEI}/thing/model/up_raw_reply,/sys/hhyy31pDELD/${IMEI}/thing/model/up_raw,0,\r\n
4.测试上传
先发一个初始数据000320f2e30000000001(注意使用十六进制发送)
工作状态变更
数据更新
4.使用文档说明进行配置
1.命名格式约定
约定
1)系统以 config 开头, 并且以\r\n(回车换行)结尾的数据都会被认为是配置命令, 不参与透传数据
发送和接收, 在使用的时候, 尽量避免这种格式的数据。
2)命令所有关键词和执行命令都是小写, 字段以英文的“,” 分割。
3)无特殊说明的命令, 建议命令响应超时时间为 3 秒。
4)获取基站定位, 建议命令超时时间为 30 秒。
5)GPS 定位命令, 只有支持 GPS 模块的设备支持
应答命令格式
2.配置相关代码
3.设置实例
config,set,ali,1,ttluart,xym,60,cn-shanghai,pk,ps,0,1,/bbb,/aaa,0,0\r\n
config,set,ali,1,ttluart,yxym,60,cn-shanghai,pk,ps,0,1/bbb/
I
M
E
I
/
x
x
x
,
a
a
a
/
{IMEI}/xxx,aaa/
IMEI/xxx,aaa/{IMEI}/x
xx,0,0\r\n
config,set,ali,1,ttluart,yxym,60,cn-shanghai,pk,ps,0,1/bbb1;/bbb2,headingcode:111/aa
a1,headingcode:222/aaa2,0,0\r\n
实例把IMEI设置为设备号之后在串口配置可以省去一些麻烦
config,set,ali,1,rs232,yxym,120,cn-shanghai,hhyy31pDELD,yvQUbxW82d6nJ4yU,1,1,/sys/hhyy31pDELD/
I
M
E
I
/
t
h
i
n
g
/
m
o
d
e
l
/
d
o
w
n
r
a
w
;
/
s
y
s
/
h
h
y
y
31
p
D
E
L
D
/
{IMEI}/thing/model/down_raw;/sys/hhyy31pDELD/
IMEI/thing/model/downraw;/sys/hhyy31pDELD/{IMEI}/thing/model/up_raw_reply,/sys/hhyy31pDELD/${IMEI}/thing/model/up_raw,0,\r\n
5.code
var COMMAND_REPORT = 0x00;//上报 var COMMAND_SET = 0x01; var COMMAND_REPORT_REPLY = 0x02; //上报数据返回结果。 var COMMAND_SET_REPLY = 0x03; var COMMAD_UNKOWN = 0xff; //未知的命令。 var ALINK_PROP_REPORT_METHOD = 'thing.event.property.post'; //标准ALink JSON格式topic, 设备 上传属性数据到 云端 var ALINK_PROP_SET_METHOD = 'thing.service.property.set'; //标准ALink JSON格式topic, 云端 下发属性控制指令
设备上报数据定义
帧类型 0x00 上报
请求ID 4字节 00 00 00 00 id 可以自己编写 属性上报返回时会返回相同Id
属性 1: float 单精度 4 字节 233v 工作电压 00 00 00 E9
属性2:bool 1字节 0-关闭 1-开启 01
最后组合
00 00 00 00 00 00 00 00 e9 01
0000000000000000e901
响应
02 //上报数据返回结果。 00 00 00 00 请求id code 200 为正常 0xC8 刚好为200
本文作者:ClingYang
本文链接:https://www.cnblogs.com/Yang-blackSun/p/18025352
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
本文作者:Yang-blackSun
本文链接:https://www.cnblogs.com/Yang-blackSun/p/18025352
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步