更新readme.md和docs
18
README.md
@ -23,7 +23,7 @@
|
|||||||
- RTU功能 = DTU功能 + 控制单元。
|
- RTU功能 = DTU功能 + 控制单元。
|
||||||
- 下文中的DTU等同于RTU。
|
- 下文中的DTU等同于RTU。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 应用行业和场景
|
### 应用行业和场景
|
||||||
|
|
||||||
@ -34,7 +34,7 @@
|
|||||||
- 消防安全
|
- 消防安全
|
||||||
- 市政管网等
|
- 市政管网等
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 移远DTU及其能力
|
## 移远DTU及其能力
|
||||||
|
|
||||||
@ -99,7 +99,7 @@
|
|||||||
|
|
||||||
我司的QuecPython开发板的板载资源丰富,支持照度传感器、温湿度传感器、喇叭接口、咪头接口、三色LED灯、LCD屏接口、Camera接口,及其它丰富的外设接口,配合下节将提及的GUI工具,可在QuecPython开发板上进行终端产品的原型验证。
|
我司的QuecPython开发板的板载资源丰富,支持照度传感器、温湿度传感器、喇叭接口、咪头接口、三色LED灯、LCD屏接口、Camera接口,及其它丰富的外设接口,配合下节将提及的GUI工具,可在QuecPython开发板上进行终端产品的原型验证。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
#### 强大的上位机GUI工具
|
#### 强大的上位机GUI工具
|
||||||
|
|
||||||
@ -107,7 +107,7 @@
|
|||||||
|
|
||||||
[点此下载DTU GUI工具。](https://python.quectel.com/download)
|
[点此下载DTU GUI工具。](https://python.quectel.com/download)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
#### QPYcom工具
|
#### QPYcom工具
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ QPYcom工具是一个集**QuecPython repl交互、PC和模组间文件传输、
|
|||||||
|
|
||||||
QPYCom的使用文档,参见安装目录下的`docs`文件夹。
|
QPYCom的使用文档,参见安装目录下的`docs`文件夹。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
#### 线上生成配置文件
|
#### 线上生成配置文件
|
||||||
|
|
||||||
@ -152,11 +152,11 @@ QPYCom的使用文档,参见安装目录下的`docs`文件夹。
|
|||||||
|
|
||||||
- RTU可直接作为主控,省去MCU及其周边电路,降低硬件成本
|
- RTU可直接作为主控,省去MCU及其周边电路,降低硬件成本
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
- 可使用Python进行二次开发,降低软件开发成本
|
- 可使用Python进行二次开发,降低软件开发成本
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
- 我司多平台模组适用,使用Python开发,无需修改代码即可快速切换至不同模组
|
- 我司多平台模组适用,使用Python开发,无需修改代码即可快速切换至不同模组
|
||||||
|
|
||||||
@ -169,11 +169,11 @@ QPYCom的使用文档,参见安装目录下的`docs`文件夹。
|
|||||||
|
|
||||||
### 命令模式
|
### 命令模式
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 透传模式
|
### 透传模式
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### modbus模式
|
### modbus模式
|
||||||
|
|
||||||
|
261
docs/APTU_User_Guides.md
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
## 文档历史
|
||||||
|
|
||||||
|
**修订记录**
|
||||||
|
|
||||||
|
| **版本** | **日期** | **作者** | **变更表述** |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 1.0 | 2020-07-27 | 陈驰 | 初始版本 |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 摘要
|
||||||
|
|
||||||
|
本文旨在介绍QuecPython的APTU(Application Packet Transparent Unit,应用报文透传单元)的概念及应用方法。
|
||||||
|
|
||||||
|
## APTU简介
|
||||||
|
|
||||||
|
|
||||||
|
### 概念
|
||||||
|
|
||||||
|
APTU,全称为Application Packet Transparent Unit,即应用报文透传单元。
|
||||||
|
|
||||||
|
APTU以数据透传的方式广泛应用于家电、工业等需要联网的应用场景,只需在生产时将配置文件导入到文件系统即可。
|
||||||
|
|
||||||
|
### 脚本文件
|
||||||
|
|
||||||
|
APTU功能共3个脚本文件,分别说明如下:
|
||||||
|
|
||||||
|
- OTA.py:执行用户文件升级工作;该文件本身也可以被升级
|
||||||
|
- aptu.py:执行透传业务主逻辑;
|
||||||
|
- aptu_config.json:配置文件,主要包含UART、网络、服务器、设备信息,及OTA等相关的配置信息。
|
||||||
|
|
||||||
|
|
||||||
|
### 功能
|
||||||
|
|
||||||
|
- **通过配置文件配置所有功能的参数**
|
||||||
|
|
||||||
|
aptu_config.json文件配置了功能相关的所有参数。
|
||||||
|
|
||||||
|
- **开机时事件上报**
|
||||||
|
|
||||||
|
开机后,在数传功能准备好或出错时,会 **上报且仅上报一次** 事件通知。
|
||||||
|
|
||||||
|
- **数据透传**
|
||||||
|
|
||||||
|
APTU以串口作为数据传输链路,来自设备端的串口数据以TCP协议直接透传到服务器;
|
||||||
|
|
||||||
|
来自TCP服务器的数据,将直接通过串口透传到设备端。
|
||||||
|
|
||||||
|
- **脚本升级**
|
||||||
|
|
||||||
|
开机并且网络连通后,会自动检测是否需要升级脚本,当有升级计划时,则会自动升级。
|
||||||
|
|
||||||
|
- **自动重连**
|
||||||
|
|
||||||
|
当从服务器掉线后,模块会自动重连服务器。
|
||||||
|
|
||||||
|
设备端接收到数传功能准备好的通知后,即可开始数传业务。
|
||||||
|
|
||||||
|
|
||||||
|
## 使用方法
|
||||||
|
|
||||||
|
### 配置文件
|
||||||
|
|
||||||
|
**配置文件内容**
|
||||||
|
|
||||||
|
用户需根据自己的项目需求修改配置文件的参数。
|
||||||
|
|
||||||
|
配置文件的内容如代码清单1所示,为了方便理解,以下在json文本中添加了#打头的 **不应该存在的注释内容**
|
||||||
|
|
||||||
|
代码清单1 aptu_config.json文件内容
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"UART":{ # 串口相关配置
|
||||||
|
"No":2, # 串口号
|
||||||
|
"baudRate":9600, # 波特率
|
||||||
|
"startBitsLen":1, # 起始位
|
||||||
|
"dataBitsLen":8, # 数据位
|
||||||
|
"parity":"None", # 奇偶校验,无:"None",奇校验:"Odd",偶校验:"Even"
|
||||||
|
"stopBitsLen":1, # 停止位
|
||||||
|
"flowCtrl":"disable", # 硬件流控,使能:"enable",禁止:"disable"
|
||||||
|
"significantBit":"least" # LSB
|
||||||
|
},
|
||||||
|
|
||||||
|
"Network":{ # 网络相关配置
|
||||||
|
"timeWaitForOK":30 # 等待自动拨号完成的超时时间,单位s
|
||||||
|
},
|
||||||
|
|
||||||
|
"Server":{ # 服务器相关配置
|
||||||
|
"ipType":"IPv4", # 连接的IP类型,"IPv4"、"IPv6"
|
||||||
|
"protocol":"TCP", # 连接的传输层类型,"TCP"、"UDP"
|
||||||
|
"domain":"www.baidu.com", # 域名
|
||||||
|
"port":80, # 端口
|
||||||
|
"keepAlive":{ # 心跳配置
|
||||||
|
"useThisItem":"off", # 关闭心跳,打开:"on",关闭:"off"
|
||||||
|
"parameters":{ # 心跳配置参数
|
||||||
|
"keepIdle":60, # 心跳间隔时间,单位s
|
||||||
|
"keepInterval":5, # 每次心跳时,心跳包的重发时间间隔,单位s
|
||||||
|
"keepCount":3 # 每次心跳时,心跳包的重发次数
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"DeviceInfo":{ # 移远云平台上注册的设备信息
|
||||||
|
"moduleType":"EC600S-CX", # 模块类型,建议"模块型号-项目名称"的命名方式
|
||||||
|
"UID":"305", # 字符串类型,唯一标识符
|
||||||
|
"PK":"2bb2a48bd30b6a525a30bc64d8b3d8e0" # 秘钥
|
||||||
|
},
|
||||||
|
|
||||||
|
"OTA":{ # OTA升级配置
|
||||||
|
"autoUpgrade":true # 布尔型,自动升级:true,非自动升级:false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
**【注意】**
|
||||||
|
|
||||||
|
- 冒号 **左边的** key,严格 **区分大小写** 。
|
||||||
|
- 冒号 **右边的** value,除了DeviceInfo内部的字段以外,其余字符串类型的值 **不区分大小写** 。
|
||||||
|
- 由于QuecPython暂时不支持TCP的心跳选项配置,Server.keepAlive.useThisItem的值请设置为off。
|
||||||
|
- 布尔型的值,均为所有字母小写的true和false。
|
||||||
|
|
||||||
|
### 配置文件缺省值
|
||||||
|
|
||||||
|
配置文件中,"UART"的"No"和"baudRate"、"Server"的"domain"和"port"是 **必选项** 。
|
||||||
|
|
||||||
|
其他非必须项都可以删除,但是代码中会对其做缺省处理,现将缺省行为整理如表1所示:
|
||||||
|
|
||||||
|
表1 配置文件缺省行为
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
上表中:
|
||||||
|
|
||||||
|
- 任何字段的字体为黑色时,该字段及其下包含的内容,可从配置文件中删除,使用其缺省值。
|
||||||
|
- 当黑色字体的字段出现在配置文件中时,其紧邻的下一级的红色字体的字段是必选项。
|
||||||
|
- 第一列字体为红色的字段,必须出现在配置文件中。
|
||||||
|
- "Server"对象中不含包"keepAlive"字段时,表示关闭心跳功能。
|
||||||
|
- "DeviceInfo"和"OTA"对象同时出现,才能开启OTA功能。
|
||||||
|
|
||||||
|
### 导入脚本文件
|
||||||
|
|
||||||
|
通过QPYcom将三个文件全部导入到模块中。
|
||||||
|
|
||||||
|
导入成功后,看到QPYcom工具文件传输页面的右侧栏中增加了下图红框中的三个文件。
|
||||||
|
|
||||||
|
选中aptu.py后,点击图1中的执行按钮,即可测试脚本功能。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
图1 脚本文件导入方法
|
||||||
|
|
||||||
|
|
||||||
|
### 在业务中调用aptu模块
|
||||||
|
|
||||||
|
在业务脚本中添加代码清单2所示的3行代码,即可开启功能:
|
||||||
|
|
||||||
|
代码清单2 启动APTU功能
|
||||||
|
|
||||||
|
```python
|
||||||
|
from usr import aptu
|
||||||
|
aptu_obj = aptu.aptu_cls()
|
||||||
|
aptu_obj.start()
|
||||||
|
```
|
||||||
|
|
||||||
|
aptu_cls类的对象初始化函数包含两个默认参数,原型如代码清单3所示:
|
||||||
|
|
||||||
|
代码清单3 aptu_cls类的对象初始化函数
|
||||||
|
|
||||||
|
```python
|
||||||
|
@classmethod
|
||||||
|
def __init__(cls, projectName = "APTU", projectVersion = "V1.0.0"):
|
||||||
|
try:
|
||||||
|
cls.PROJECT_NAME = projectName
|
||||||
|
cls.PROJECT_VERSION = projectVersion
|
||||||
|
cls.config = cls.__read_config()
|
||||||
|
cls.__uart_init()
|
||||||
|
cls.__data_call_check()
|
||||||
|
cls.__ota_check()
|
||||||
|
except Exception as e:
|
||||||
|
cls.__exception_handler(e.args[0])
|
||||||
|
raise
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
可以看出,缺省的参数分别是项目名称和版本号,业务上根据自己的需要进行填充,默认值分别为"APTU"和"V1.0.0"。
|
||||||
|
|
||||||
|
|
||||||
|
## 事件上报
|
||||||
|
|
||||||
|
虽然APTU完全工作与透传模式,但是开机后功能是否正常,是有必要通知到设备端的。
|
||||||
|
|
||||||
|
上文已经提及,在数传功能准备好或出错后,会 **上报且仅上报一次** 事件通知。
|
||||||
|
|
||||||
|
|
||||||
|
### 事件上报的格式
|
||||||
|
|
||||||
|
事件上报以json文本的格式组织,示例如代码清单4所示:
|
||||||
|
|
||||||
|
代码清单4 事件上报的json格式
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"result": {
|
||||||
|
"code": 0,
|
||||||
|
"desc": "OK"
|
||||||
|
},
|
||||||
|
"data": {
|
||||||
|
"SN": "D1Q21E2130204660P",
|
||||||
|
"IMEI": "861681053233719"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
上述文本的json对象包含两个子对象"result"和"data"。
|
||||||
|
|
||||||
|
- "result"对象包含两个字段"code"和"desc",用于报告APTU是否准备好数传功能。
|
||||||
|
- "data"对象包含两个字段"SN"和"IMEI",只有当"result"中的"code"值为0时,才会包含"data"对象。
|
||||||
|
|
||||||
|
以上各字段的数据类型说明如表2所示:
|
||||||
|
|
||||||
|
表2 数据类型说明
|
||||||
|
|
||||||
|
| **字段** | **数据类型** |
|
||||||
|
| --- | --- |
|
||||||
|
| code | 整数 |
|
||||||
|
| desc | 字符串 |
|
||||||
|
| SN | 字符串 |
|
||||||
|
| IMEI | 字符串 |
|
||||||
|
|
||||||
|
### 事件结果释义
|
||||||
|
|
||||||
|
"result"对象即为事件的结果通知。
|
||||||
|
|
||||||
|
事件的结果释义如表3所示:
|
||||||
|
|
||||||
|
表3 事件结果释义
|
||||||
|
|
||||||
|
| **code** | **desc** | **mark** |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 1 | OTA plain comes | 有新版待更新,模块报出此通知后,会自动重启升级至新版本 |
|
||||||
|
| 0 | OK | 数传准备好,可以开始传输数据 |
|
||||||
|
| -1 | config error | 配置文件错误 |
|
||||||
|
| -2 | net error | 网络错误 |
|
||||||
|
| -3 | socket create error | socket创建失败 |
|
||||||
|
| -4 | socket option set error | socket选项设置失败 |
|
||||||
|
| -5 | socket connect error | 服务器连接失败 |
|
||||||
|
| -6 | DNS error | 域名解析失败 |
|
||||||
|
| -7 | UART error | 串口操作失败 |
|
||||||
|
| -8 | sys error | 系统级别错误 |
|
||||||
|
|
@ -1,39 +1,39 @@
|
|||||||
|
|
||||||
|
|
||||||
# **DTU GUI工具使用说明**
|
## 修订历史
|
||||||
|
|
||||||
|
| Version | **Date** | **Author** | **Change expression** |
|
||||||
|
| :------ | ---------- | ---------- | --------------------- |
|
||||||
|
| 1.0 | 2021-11-25 | 蒋子杨 | 初始版本 |
|
||||||
|
| 1.1 | 2021-11-30 | 陈驰 | 丰富概述章节的描述 |
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## 1.基本概述
|
- DTU的GUI工具,主要用来在PC端调试DTU的功能,DTU所有开放出来的功能,在GUI工具上均有对应的调试模块。
|
||||||
|
|
||||||
本文档主要介绍DTU GUI工具的使用。
|
- GUI工具配合QuecPython开发板,可作为终端产品开发前的快速原型验证。
|
||||||
|
|
||||||
DTU GUI工具现阶段主要为客户开发调试使用,DTU GUI工具提供基础的查询与设置功能,
|
- 进入我司的[QuecPython资源下载页面](https://python.quectel.com/download),可查找并下载DTU的GUI工具(目前仅支持Windows系统,但GUI使用跨平台工具开发,十分容易扩展到Ubuntu或Mac平台)。
|
||||||
用户可使用USB to TTL模块连接PC与DTU。
|
|
||||||
|
|
||||||

|
## 运行DTU GUI 工具
|
||||||
|
|
||||||
DTU GUI基于wxPython开发,现阶段已编译的dtu_gui.exe仅支持Windows系统,
|
|
||||||
用户在Linux/macOS配置Python环境并安装wxPython lib后可直接运行dtu_gui.py或自行编译对应版本的exe程序。
|
|
||||||
|
|
||||||
## 2. 运行DTU GUI 工具
|
|
||||||
|
|
||||||
**双击打开DTU GUI工具**
|
**双击打开DTU GUI工具**
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
运行后的DTU GUI的工具
|
运行后的DTU GUI的工具
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**打开串口**
|
**打开串口**
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 3. DTU GUI 功能介绍
|
## DTU GUI 功能介绍
|
||||||
|
|
||||||
## 3.1工具箱
|
### 工具箱
|
||||||
|
|
||||||
**目前工具箱的查询功能如下:**
|
**目前工具箱的查询功能如下:**
|
||||||
|
|
||||||
@ -51,28 +51,25 @@ DTU GUI基于wxPython开发,现阶段已编译的dtu_gui.exe仅支持Windows
|
|||||||
- 查询基站状态
|
- 查询基站状态
|
||||||
- 基站定位
|
- 基站定位
|
||||||
|
|
||||||
### 示例:
|
**示例:**查询IMEI号:
|
||||||
|
|
||||||
查询IMEI号:
|

|
||||||
|
|
||||||

|
返回的数据: `【2021-11-24 20:35:39】 869537055499330`
|
||||||
|
|
||||||
返回的数据:
|
### 查询当前配置参数
|
||||||
`【2021-11-24 20:35:39】 869537055499330`
|
|
||||||
|
|
||||||
## 3.2查询当前配置参数
|
|
||||||
|
|
||||||
**操作步骤如下图:**
|
**操作步骤如下图:**
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**以上步骤操作完再点击查询当前配置参数**
|
**以上步骤操作完再点击查询当前配置参数**
|
||||||
|
|
||||||
## 3.3导入配置参数
|
### 导入配置参数
|
||||||
|
|
||||||
### 3.3.1基本参数配置
|
#### 基本参数配置
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**如上图的数字编号:**
|
**如上图的数字编号:**
|
||||||
|
|
||||||
@ -93,34 +90,34 @@ DTU GUI基于wxPython开发,现阶段已编译的dtu_gui.exe仅支持Windows
|
|||||||
|
|
||||||
如果在tcp/udp的配置参数中自定义了首次登录服务器发送的注册消息,则会发送用户自定义的。
|
如果在tcp/udp的配置参数中自定义了首次登录服务器发送的注册消息,则会发送用户自定义的。
|
||||||
|
|
||||||
具体tcp/udp的参数配置后面会有详细的介绍
|
具体tcp/udp的参数配置后面会有详细的介绍。
|
||||||
|
|
||||||
3. **固件版本号**
|
3. **固件版本号**
|
||||||
|
|
||||||
数值的范围是 > 0
|
数值的范围是 > 0。
|
||||||
|
|
||||||
4. **是否开启自动更新**
|
4. **是否开启自动更新**
|
||||||
|
|
||||||
打开自动更新会在DTU启动的时候去OTA Cloud查看是否有需要更新的固件包,如果有更新的任务就会下载固件包,校验固件包。校验通过开始更新,更新完毕会重启DTU固件。
|
打开自动更新会在DTU启动的时候去OTA Cloud查看是否有需要更新的固件包,如果有更新的任务就会下载固件包,校验固件包。校验通过开始更新,更新完毕会重启DTU固件。
|
||||||
|
|
||||||
|
|
||||||
建议:开启自动更新前可以根据需要手动备份之前的配置文件。暂时不支持自动备份的功能
|
建议:开启自动更新前可以根据需要手动备份之前的配置文件。暂时不支持自动备份的功能。
|
||||||
|
|
||||||
### 3.3.2串口参数
|
#### 串口参数
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
有三个串口参数配置,每个串口配置的参数有:波特率,数据位,校验位,停止位
|
有三个串口参数配置,每个串口配置的参数有:波特率,数据位,校验位,停止位。
|
||||||
|
|
||||||
目前不支持串口参数的配置功能,此项配置功能后续上线
|
目前不支持串口参数的配置功能,此项配置功能后续上线。
|
||||||
|
|
||||||
### 3.3.3网络参数配置
|
#### 网络参数配置
|
||||||
|
|
||||||
打开任意通道的"开启"按钮,则会将七个通道的数据导入到配置文件,由于其他的通道参数没有配置会导入空的配置参数到配置文件,因此点击"开启"按钮就需要按照需求将所以的通道配置参数都设置一下
|
打开任意通道的"开启"按钮,则会将七个通道的数据导入到配置文件,由于其他的通道参数没有配置会导入空的配置参数到配置文件,因此点击"开启"按钮就需要按照需求将所以的通道配置参数都设置一下。
|
||||||
|
|
||||||
#### 3.3.3.1 通道类型:HTTP
|
##### 通道类型:HTTP
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
| **字段** | **type** | **Required** | **含义** |
|
| **字段** | **type** | **Required** | **含义** |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
@ -130,11 +127,11 @@ DTU GUI基于wxPython开发,现阶段已编译的dtu_gui.exe仅支持Windows
|
|||||||
| timeout | int | false | HTTP请求最长等待时间 |
|
| timeout | int | false | HTTP请求最长等待时间 |
|
||||||
| serialD | int | true | HTTP绑定的串口号(1~2) |
|
| serialD | int | true | HTTP绑定的串口号(1~2) |
|
||||||
|
|
||||||
提示:其中serialD的绑定串口号的功能暂未上线,后期会和串口配置功能一同上线,下同
|
提示:其中serialD的绑定串口号的功能暂未上线,后期会和串口配置功能一同上线,下同。
|
||||||
|
|
||||||
#### 3.3.3.2 通道类型:SOCKET TCP/SOCKET UDP
|
##### 通道类型:SOCKET TCP/SOCKET UDP
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
上图中参数的对应含义:
|
上图中参数的对应含义:
|
||||||
|
|
||||||
@ -148,9 +145,9 @@ DTU GUI基于wxPython开发,现阶段已编译的dtu_gui.exe仅支持Windows
|
|||||||
| KeepAlive | int | false | 链接超时最大时间单位秒,默认300秒 |
|
| KeepAlive | int | false | 链接超时最大时间单位秒,默认300秒 |
|
||||||
| serialD | int | true | tcp/udp绑定的串口号(1~2) |
|
| serialD | int | true | tcp/udp绑定的串口号(1~2) |
|
||||||
|
|
||||||
#### 3.3.3.3 通道类型:MQTT
|
##### 通道类型:MQTT
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
| **字段** | **type** | **Required** | **含义** |
|
| **字段** | **type** | **Required** | **含义** |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
@ -165,17 +162,17 @@ DTU GUI基于wxPython开发,现阶段已编译的dtu_gui.exe仅支持Windows
|
|||||||
| retain | int | true | MQTT的publish参数retain,默认0 |
|
| retain | int | true | MQTT的publish参数retain,默认0 |
|
||||||
| serialD | int | true | MQTT通道捆绑的串口ID (1~3) |
|
| serialD | int | true | MQTT通道捆绑的串口ID (1~3) |
|
||||||
|
|
||||||
#### 3.3.3.4 通道类型:阿里云/腾讯云
|
##### 通道类型:阿里云/腾讯云
|
||||||
|
|
||||||
在进行阿里云和腾讯云的一型一密的时候,如果阿里云连接失败,需要手动创建secret.json,里面是设备名和设备密钥的json文件。具体可以参考"secret.json"文件
|
在进行阿里云和腾讯云的一型一密的时候,如果阿里云连接失败,需要手动创建secret.json,里面是设备名和设备密钥的json文件。具体可以参考"secret.json"文件
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
同理如果腾讯云的一型一密连接失败,也需要手动创建tx\_secret.json
|
同理,如果腾讯云的一型一密连接失败,也需要手动创建tx\_secret.json
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
| **字段** | **type** | **Required** | **含义** |
|
| **字段** | **type** | **Required** | **含义** |
|
||||||
@ -193,33 +190,17 @@ DTU GUI基于wxPython开发,现阶段已编译的dtu_gui.exe仅支持Windows
|
|||||||
| pubTopic | str | true | 发布主题 |
|
| pubTopic | str | true | 发布主题 |
|
||||||
| serialD | int | true | MQTT通道捆绑的串口ID (1~3) |
|
| serialD | int | true | MQTT通道捆绑的串口ID (1~3) |
|
||||||
|
|
||||||
#### 3.3.3.5 通道类型:移远云
|
##### APN设置
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
| **字段** | **type** | **Required** | **含义** |
|
|
||||||
| --- | --- | --- | --- |
|
|
||||||
| keepAlive | int | false | 通信之间允许的最长时间段(以秒为单位),默认为120,范围(60-1200)可不填 |
|
|
||||||
| ProductKey | str | true | 产品key |
|
|
||||||
| ProductSecret | str | false | 产品密钥|
|
|
||||||
| QOS | int | false | MQTT消息服务质量(默认0,可选择0或1)0:发送者只发送一次消息,不进行重试 1:发送者最少发送一次消息,确保消息到达Broker |
|
|
||||||
| SessionFlag | bool | true | 配置与云平台通信的数据是否采用session加密(默认值为False),True:加密,False:加密 |
|
|
||||||
| sendMode | str | true | 移远云数据收发模式,phy:物模型,pass:透传 |
|
|
||||||
| serialD | int | true | MQTT通道捆绑的串口ID (1~3) |
|
|
||||||
|
|
||||||
|
|
||||||
#### 3.3.3.5 APN设置
|
|
||||||
|
|
||||||
APN功能暂未上线
|
APN功能暂未上线
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||

|
##### GPIO引脚设置
|
||||||
|
|
||||||
#### 3.3.3.6 GPIO引脚设置
|
|
||||||
|
|
||||||
GPIO引脚设置功能暂未上线
|
GPIO引脚设置功能暂未上线
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
NETLED -- 网路指示灯的GPIO (pio1~pio128)
|
NETLED -- 网路指示灯的GPIO (pio1~pio128)
|
||||||
|
|
||||||
@ -227,61 +208,60 @@ NETRDY -- 与服务器连上后通知GPIO (pio1~pio128)
|
|||||||
|
|
||||||
RSTCNF -- 重置DTU参数的GPIO (pio1~pio128)
|
RSTCNF -- 重置DTU参数的GPIO (pio1~pio128)
|
||||||
|
|
||||||
## 3.4修改密码
|
### 修改密码
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
1. 勾选密码,输入当前的密码
|
1. 勾选密码,输入当前的密码
|
||||||
2. 输入新的密码
|
2. 输入新的密码
|
||||||
3. 点击"修改密码"的按钮
|
3. 点击"修改密码"的按钮
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 3.5 输出数据格式配置
|
### 输出数据格式配置
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**HEX 将输出的数据转为十六进制的数据:**
|
**HEX 将输出的数据转为十六进制的数据:**
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**时间戳:在输出的数据前面添加时间**
|
**时间戳:在输出的数据前面添加时间**
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**清空接收: 将输出框的内容清空**
|
**清空接收: 将输出框的内容清空**
|
||||||
|
|
||||||
## 3.6 输入框的格式要求
|
### 输入框的格式要求
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**1.查询指令:**
|
**1.查询指令:**
|
||||||
|
|
||||||
**不需要密码的查询指令**
|
**不需要密码的查询指令**
|
||||||
|
|
||||||
输入 0 点击发送
|
输入 `0 `点击发送
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**需要密码的查询指令**
|
**需要密码的查询指令**
|
||||||
|
|
||||||
1.在输入框输入功能码,再在上面打开密码输入框,输入正确的密码点击"发送"
|
1. 在输入框输入功能码,再在上面打开密码输入框,输入正确的密码点击"发送"
|
||||||
|
|
||||||
2.在输入框输入功能码和json数据
|
2. 在输入框输入功能码和json数据
|
||||||
|
|
||||||
如: `28,1921009046,{"password":"123","data":{}}`
|
如: `28,1921009046,{"password":"123","data":{}}`
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**2. 修改配置参数的指令**
|
**2. 修改配置参数的指令**
|
||||||
|
|
||||||
功能码 + 修改的数据
|
功能码 + 修改的数据
|
||||||
|
|
||||||
`47,1564156496,{"password":"123","data":{"apn": ["", "", ""]}}`
|
`47,1564156496,{"password":"123","data":{"apn": ["", "", ""]}}`
|
||||||
中间用”:”隔开,后面为修改的json数据
|
中间用”:”隔开,后面为修改的json数据
|
||||||
提示:json数据里面不能出现中文字符
|
提示:json数据里面不能出现中文字符
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
上图中返回的数据success 为1表示修改成功
|
上图中返回的数据success 为1表示修改成功
|
180
docs/DTU_Product_Introduction.md
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
## 修订历史
|
||||||
|
|
||||||
|
| Version | **Date** | **Author** | **Change expression** |
|
||||||
|
| :------ | ---------- | ---------- | --------------------- |
|
||||||
|
| 1.0 | 2021-11-25 | 陈驰 | 初始版本 |
|
||||||
|
| 1.1 | 2021-11-30 | 陈驰 | 增加对DTU配套组件和服务的描述 |
|
||||||
|
|
||||||
|
## DTU介绍
|
||||||
|
|
||||||
|
### DTU
|
||||||
|
|
||||||
|
- 英文全称Data Transfer Unit,数据传输单元。是专门用于将来自于设备端MCU的串口数据通过无线通信网络传送至服务器的无线终端设备。
|
||||||
|
- 业务逻辑:传感器采集数据发送给设备端MCU,设备端MCU通过串口将采集到的数据通过DTU发送到服务器;服务器接收到数据可以进行分析、处理、显示、保存等操作。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### RTU
|
||||||
|
|
||||||
|
- 英文全称Remote Terminal Unit,远程终端单元。
|
||||||
|
- 业务逻辑包括数据采集上报和远程指令控制两部分:
|
||||||
|
- 数据采集上报:和DTU的数据采集上报功能完全一致
|
||||||
|
- 远程指令控制:服务器下发控制指令,RTU接收到指令后,触发控制设备执行动作
|
||||||
|
- RTU功能 = DTU功能 + 控制单元。
|
||||||
|
- 下文中的DTU等同于RTU。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 应用行业和场景
|
||||||
|
|
||||||
|
- 水利水电
|
||||||
|
- 矿产资源开发
|
||||||
|
- 地质灾害检测预警
|
||||||
|
- 环境保护
|
||||||
|
- 消防安全
|
||||||
|
- 市政管网等
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 移远DTU及其能力
|
||||||
|
|
||||||
|
### 产品线
|
||||||
|
|
||||||
|
|目前支持DTU的模组|
|
||||||
|
| --- |
|
||||||
|
| EC200U_CNLB |
|
||||||
|
| EC200U_EUAB |
|
||||||
|
| EC600U_CNLB |
|
||||||
|
| EC600U_CNLC |
|
||||||
|
| EC600N_CNLA |
|
||||||
|
| EC600N_CNLC |
|
||||||
|
| EC600S_CNLA |
|
||||||
|
| EC600S_CNLB |
|
||||||
|
|
||||||
|
|
||||||
|
### 产品能力
|
||||||
|
|
||||||
|
- **2个串口通道**
|
||||||
|
- **通道支持HTTP、TCP、UDP、MQTT、阿里云、腾讯云、移远云多种协议和云平台**
|
||||||
|
- **支持多个云端通道传输**
|
||||||
|
- **支持本地和远程参数配置**
|
||||||
|
- **支持OTA升级**
|
||||||
|
- **支持数据离线存储**
|
||||||
|
- 在网络连接不稳定情况下,将发送失败的数据暂存至本地,在网络恢复后优先将本地数据发送至云端
|
||||||
|
- 离线存储的数据量可通过配置文件配置
|
||||||
|
- **支持modbus协议**
|
||||||
|
- **支持命令模式和透传模式,方便不支持modbus协议的设备接入**
|
||||||
|
- 命令模式下,支持对DTU的控制和参数读取;支持指定云端通道、指定MQTT主题,而非向所有的通道或主题推送同一个报文数据
|
||||||
|
- 透传模式下,每个串口仅支持单通道透传,但支持指定MQTT主题
|
||||||
|
- **支持常用的传感器、执行单元和输入设备**
|
||||||
|
- 传感器:
|
||||||
|
- 照度传感器(BH1750、OPT3001、GL5516、GL5528)
|
||||||
|
- 三轴加速度传感器(ADXL346、BMA250、LIS2DH12TR)
|
||||||
|
- 温湿度传感器(HDC1080、HDC2080、AHT10、DHT11)
|
||||||
|
- 可燃气体传感器
|
||||||
|
- CO2气体传感器
|
||||||
|
- GNSS定位模块
|
||||||
|
- ...
|
||||||
|
|
||||||
|
- 执行单元:
|
||||||
|
- 功放
|
||||||
|
- 电机
|
||||||
|
- LED
|
||||||
|
- LCD(ILI9225、ST7735、ST7789、SSD1306、UC1628)
|
||||||
|
- ...
|
||||||
|
|
||||||
|
- 输入设备:
|
||||||
|
- 麦克风
|
||||||
|
- 摄像头(GC032A、BF3901)
|
||||||
|
- 矩阵键盘
|
||||||
|
- ...
|
||||||
|
- **支持QuecPython,可以使用Python代码快速实现二次开发**
|
||||||
|
- **开放了GPIO、SPI、IIC、PWM等各种外设接口,方便外设扩充**
|
||||||
|
|
||||||
|
### 产品配套组件和服务
|
||||||
|
|
||||||
|
我司DTU产品的配套组件和服务是为了更好地支持基于DTU的终端产品的原型验证和功能开发。
|
||||||
|
|
||||||
|
#### 板载资源丰富的QuecPython开发板
|
||||||
|
|
||||||
|
我司的QuecPython开发板的板载资源丰富,支持照度传感器、温湿度传感器、喇叭接口、咪头接口、三色LED灯、LCD屏接口、Camera接口,及其它丰富的外设接口,配合下节将提及的GUI工具,可在QuecPython开发板上进行终端产品的原型验证。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 强大的上位机GUI工具
|
||||||
|
|
||||||
|
针对DTU所有的单元功能,GUI均提供了对应的交互入口,用于通过PC调试DTU,可作为终端产品开发前的快速原型验证。
|
||||||
|
|
||||||
|
[点此下载DTU GUI工具。](https://python.quectel.com/download)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### QPYcom工具
|
||||||
|
|
||||||
|
QPYcom工具是一个集**QuecPython repl交互、PC和模组间文件传输、文件系统镜像制作并打包到固件包、及固件烧录等各种功能**于一体的强大利器。
|
||||||
|
|
||||||
|
用户如需进行DTU的二次开发,使用QPYcom将会大大提高开发的效率。
|
||||||
|
|
||||||
|
[点此下载QPYCom工具。](https://python.quectel.com/download)
|
||||||
|
|
||||||
|
QPYCom的使用文档,参见安装目录下的`docs`文件夹。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 线上生成配置文件
|
||||||
|
|
||||||
|
通过我司的DTU服务平台,用户只需要点击按钮或填写必要参数值,即可在线上快速生成配置文件,并支持导出到本地、和给DTU进行配置文件的在线升级。
|
||||||
|
|
||||||
|
该功能尚在开发中,即将上线。
|
||||||
|
|
||||||
|
### 产品优势
|
||||||
|
|
||||||
|
- **增加了命令模式,设备端可在该模式下控制DTU的行为,亦可主动向DTU推送数据**
|
||||||
|
|
||||||
|
- **支持网页生成DTU配置文件(即将上线)**
|
||||||
|
|
||||||
|
- **支持上位机GUI工具,快速实现设备开发的原型验证**
|
||||||
|
|
||||||
|
- **支持云端通道选择与MQTT topic选择**
|
||||||
|
|
||||||
|
- 在命令模式下,DTU支持向指定云端通道发送数据,而非向所有通道同时推送数据,可节省流量及减少垃圾数据产生
|
||||||
|
- MQTT、阿里云与腾讯云类型通道支持topic选择,DTU可支持向指定的topic发布数据
|
||||||
|
- 通道可绑定串口,绑定串口后仅会向绑定的串口发送数据
|
||||||
|
|
||||||
|
- **透传时增加校验机制,保证上传数据的正确性**
|
||||||
|
|
||||||
|
- 与串口通信双重校验机制,同时校验数据长度与CRC32
|
||||||
|
- 校验失败重发机制,发送失败时可自动重发
|
||||||
|
|
||||||
|
- **modbus模式和命令模式自适应,用户直接进行通信即可**
|
||||||
|
|
||||||
|
- **RTU可直接做主控,摒弃MCU,降低软硬件开发成本**
|
||||||
|
|
||||||
|
- RTU可直接作为主控,省去MCU及其周边电路,降低硬件成本
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- 可使用Python进行二次开发,降低软件开发成本
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- 我司多平台模组适用,使用Python开发,无需修改代码即可快速切换至不同模组
|
||||||
|
|
||||||
|
- **业务功能扩充方便**
|
||||||
|
- 开放了GPIO、SPI、IIC、PWM等各种外设接口,方便外设扩充
|
||||||
|
|
||||||
|
- **强大的客户服务和技术支持能力**
|
||||||
|
|
||||||
|
## 移远DTU的工作原理
|
||||||
|
|
||||||
|
### 命令模式
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 透传模式
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### modbus模式
|
||||||
|
|
||||||
|
modbus模式下,严格遵守modbus协议规范,且遵守modbus协议的DTU产品在行业内的应用规则:DTU作为主机,根据用户配置,周期性向从机设备索要数据,推送至云端。
|
@ -1,13 +1,17 @@
|
|||||||
# **DTU 通信数据协议**
|
## 修订历史
|
||||||
|
|
||||||
# 1 概述
|
| Version | **Date** | **Author** | **Change expression** |
|
||||||
|
| :------ | ---------- | ---------- | --------------------- |
|
||||||
|
| 1.0 | 2021-11-25 | 陈驰 | 初始版本 |
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
本文档主要内容包括:
|
本文档主要内容包括:
|
||||||
- 与云端通信的报文格式
|
- 与云端通信的报文格式
|
||||||
- 所有命令模式的指令报文格式:设置参数、查询参数
|
- 所有命令模式的指令报文格式:设置参数、查询参数
|
||||||
- dtu_config.json配置文件字段的详细说明
|
- dtu_config.json配置文件字段的详细说明
|
||||||
|
|
||||||
# 2 数据格式
|
## 数据格式
|
||||||
|
|
||||||
DTU与云端通信报文使用json格式
|
DTU与云端通信报文使用json格式
|
||||||
|
|
||||||
@ -15,7 +19,7 @@ DTU与云端通信报文使用json格式
|
|||||||
|
|
||||||
命令模式与modbus模式:
|
命令模式与modbus模式:
|
||||||
|
|
||||||
`{“msg_id”: msg_id, “data”: “1234”[, “cmd_code”: 40, “topic_id”: 1]}`
|
`{“msg_id”: msg_id, “data”: “1234”[, “cmd_code”: 0X40, “topic_id”: 1]}`
|
||||||
|
|
||||||
透传模式:
|
透传模式:
|
||||||
|
|
||||||
@ -35,7 +39,7 @@ topic_id:可选字段,填写mqtt返回需要publish的topic_id,此字段
|
|||||||
|
|
||||||
命令模式与modbus模式:
|
命令模式与modbus模式:
|
||||||
|
|
||||||
`{“msg_id”: msg_id, “data”: “1234”[, “cmd_code”: 40, “status”: 1]}`
|
`{“msg_id”: msg_id, “data”: “1234”[, “cmd_code”: 0X40, “status”: 1]}`
|
||||||
|
|
||||||
透传模式:
|
透传模式:
|
||||||
|
|
||||||
@ -51,7 +55,7 @@ cmd_code:可选字段,填写对应功能码,并又DTU执行相应的操作
|
|||||||
|
|
||||||
status:可选字段,仅在命令模式下生效,用于反馈命令是否执行成功
|
status:可选字段,仅在命令模式下生效,用于反馈命令是否执行成功
|
||||||
|
|
||||||
# 3 指令说明
|
## 指令说明
|
||||||
|
|
||||||
**协议功能码说明:**
|
**协议功能码说明:**
|
||||||
|
|
||||||
@ -59,54 +63,58 @@ status:可选字段,仅在命令模式下生效,用于反馈命令是否
|
|||||||
|
|
||||||
**2.返回数据的状态码可查询对应的状态码表**
|
**2.返回数据的状态码可查询对应的状态码表**
|
||||||
|
|
||||||
## 3.1 功能码表
|
### 功能码表
|
||||||
|
|
||||||
| 功能码 | 功能 |
|
| 功能码 | 功能 |
|
||||||
|--------|---------------|
|
| --- | --- |
|
||||||
| 0-49 | 查询指令 |
|
| 0x00-0x3f | 查询指令 |
|
||||||
| 0 | 查询IMEI |
|
| 0x00 | 查询IMEI |
|
||||||
| 1 | 查询本机号码 |
|
| 0x01 | 查询本机号码 |
|
||||||
| 2 | 查询固件版本号 |
|
| 0x02 | 查询固件版本号 |
|
||||||
| 3 | 查询信号强度 |
|
| 0x03 | 查询信号强度 |
|
||||||
| 4 | 查询当前配置参数 |
|
| 0x04 | 查询当前配置参数 |
|
||||||
| 5 | 诊断查询 |
|
| 0x05 | 诊断查询 |
|
||||||
| 6 | 查询ICCID |
|
| 0X06 | 查询ICCID |
|
||||||
| 7 | 查询ADC电压 |
|
| 0X07 | 查询ADC电压 |
|
||||||
| 8 | 查询GPIO信息 |
|
| 0X08 | 查询GPIO信息 |
|
||||||
| 10 | 查询温湿度 |
|
| 0X10 | 查询温湿度 |
|
||||||
| 11 | 查询网络连接信息 |
|
| 0X11 | 查询网络连接信息 |
|
||||||
| 12 | 查询网络状态 |
|
| 0X12 | 查询网络状态 |
|
||||||
| 13 | 查询基站定位信息 |
|
| 0X13 | 查询基站定位信息 |
|
||||||
| 50~143 | 设置指令 |
|
| 0x50~0x8f | 设置指令 |
|
||||||
| 50 | 协议短信透传 |
|
| 0x50 | 协议短信透传 |
|
||||||
| 51 | 配置密码 |
|
| 0x51 | 配置密码 |
|
||||||
| 52 | 添加设备识别码IMEI |
|
| 0x52 | 添加设备识别码IMEI |
|
||||||
| 53 | 登录服务器发送注册信息 |
|
| 0x53 | 登录服务器发送注册信息 |
|
||||||
| 54 | 固件版本号 |
|
| 0x54 | 固件版本号 |
|
||||||
| 55 | 是否启用自动更新 |
|
| 0x55 | 是否启用自动更新 |
|
||||||
| 56 | 日志输出 |
|
| 0x56 | 日志输出 |
|
||||||
| 57 | 服务器获取配置参数 |
|
| 0x57 | 服务器获取配置参数 |
|
||||||
| 58 | 串口参数 |
|
| 0x58 | 串口参数 |
|
||||||
| 59 | 通道配置参数 |
|
| 0x59 | 通道配置参数 |
|
||||||
| 60 | Apn设置 |
|
| 0x60 | Apn设置 |
|
||||||
| 61 | GPIO设置 |
|
| 0x61 | GPIO设置 |
|
||||||
| 62 | OTA |
|
| 0x62 | GPS |
|
||||||
| 63 | 参数设置 |
|
| 0x63 | 数据流 |
|
||||||
| 255 | 复位指令 |
|
| 0x64 | 预警 |
|
||||||
|
| 0x65 | 任务 |
|
||||||
|
| 0xfd | 协议终止指令 |
|
||||||
|
| 0xfe | DTU启动中,无法接收指令 |
|
||||||
|
| 0xff | 复位指令 |
|
||||||
|
|
||||||
# 4 查询指令
|
## 查询指令
|
||||||
|
|
||||||
### 4.1.1 查询IMEI
|
### 查询IMEI
|
||||||
|
|
||||||
**说明:**
|
**说明:**
|
||||||
|
|
||||||
DTU的IMEI号
|
DTU的IMEI号
|
||||||
|
|
||||||
功能码: 0
|
功能码: 0x00
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 0 , "data": "123456789012345" , "success":1}`
|
`{"code": 0x00 , "data": "123456789012345" , "success":1}`
|
||||||
|
|
||||||
字段说明:
|
字段说明:
|
||||||
|
|
||||||
@ -116,17 +124,17 @@ DTU的IMEI号
|
|||||||
| data | str | 返回IMEI |
|
| data | str | 返回IMEI |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 4.1.2 查询本机号码
|
### 查询本机号码
|
||||||
|
|
||||||
**说明:**
|
**说明:**
|
||||||
|
|
||||||
查询SIM卡的号码
|
查询SIM卡的号码
|
||||||
|
|
||||||
功能码: 1
|
功能码: 0x01
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 1 , "data": "17201593988" , "success":1}`
|
`{"code": 0x01 , "data": "17201593988" , "success":1}`
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
@ -134,7 +142,7 @@ DTU的IMEI号
|
|||||||
| data | str | SIM卡的手机号码 |
|
| data | str | SIM卡的手机号码 |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 4.1.3 查询固件版本号
|
### 查询固件版本号
|
||||||
|
|
||||||
**说明:**
|
**说明:**
|
||||||
|
|
||||||
@ -142,11 +150,11 @@ DTU的IMEI号
|
|||||||
|
|
||||||
固件版本号格式为: v 1
|
固件版本号格式为: v 1
|
||||||
|
|
||||||
功能码: 2
|
功能码: 0x02
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 2 , "data": "v 1" , "success":1}`
|
`{"code": 0x02 , "data": "v 1" , "success":1}`
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
@ -154,17 +162,17 @@ DTU的IMEI号
|
|||||||
| data | str | 固件版本号 |
|
| data | str | 固件版本号 |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 4.1.4 查询信号强度
|
### 查询信号强度
|
||||||
|
|
||||||
**说明:**
|
**说明:**
|
||||||
|
|
||||||
网络信号强度值范围0~31,值越大表示信号强度越好。
|
网络信号强度值范围0~31,值越大表示信号强度越好。
|
||||||
|
|
||||||
功能码: 3
|
功能码: 0x03
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 3 , "data": " CSQ17 " , "success":1}`
|
`{"code": 0x03 , "data": " CSQ17 " , "success":1}`
|
||||||
|
|
||||||
| **字段** | **字符串** | **含义** |
|
| **字段** | **字符串** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
@ -172,19 +180,21 @@ DTU的IMEI号
|
|||||||
| data | str | CSQ1~CSQ31 |
|
| data | str | CSQ1~CSQ31 |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 4.1.5 查询当前配置参数
|
### 查询当前配置参数
|
||||||
|
|
||||||
功能码: 4
|
功能码: 0x04
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
{"password": "012345",
|
{ "password": "012345",
|
||||||
"cmd_code": 4,
|
|
||||||
|
"data":{}
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 4 , "data": " req config " , "success":1}`
|
`{"code": 0x04 , "data": " req config " , "success":1}`
|
||||||
|
|
||||||
| **字段** | **字符串** | **含义** |
|
| **字段** | **字符串** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
@ -192,17 +202,17 @@ DTU的IMEI号
|
|||||||
| data | str | req config |
|
| data | str | req config |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 4.1.6 诊断查询
|
### 诊断查询
|
||||||
|
|
||||||
说明: 查询当前DTU运行的错误上报信息
|
说明: 查询当前DTU运行的错误上报信息
|
||||||
|
|
||||||
功能码: 5
|
功能码: 0x05
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
```
|
```
|
||||||
{"code":5,
|
{"code":0x05,
|
||||||
|
|
||||||
"data":[{"func_code": "5" , "error_code": " 6001"}],
|
"data":[{"func_code": "0x01" , "error_code": " 6001"}],
|
||||||
|
|
||||||
"success":1}
|
"success":1}
|
||||||
```
|
```
|
||||||
@ -214,15 +224,15 @@ DTU的IMEI号
|
|||||||
| error_code | str | 错误码 |
|
| error_code | str | 错误码 |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 4.1.7 iccid查询
|
### iccid查询
|
||||||
|
|
||||||
说明: 查询iccid
|
说明: 查询iccid
|
||||||
|
|
||||||
功能码: 6
|
功能码: 0x06
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
```
|
```
|
||||||
{"code":6,
|
{"code":0x06,
|
||||||
|
|
||||||
"data": "12456465486561516515153",
|
"data": "12456465486561516515153",
|
||||||
|
|
||||||
@ -235,15 +245,15 @@ DTU的IMEI号
|
|||||||
| data | str | 功能码 |
|
| data | str | 功能码 |
|
||||||
| status | str | 0 失败 1成功 |
|
| status | str | 0 失败 1成功 |
|
||||||
|
|
||||||
### 4.1.8 adc查询
|
### adc查询
|
||||||
|
|
||||||
说明: 查询adc
|
说明: 查询adc
|
||||||
|
|
||||||
功能码: 7
|
功能码: 0x07
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
```
|
```
|
||||||
{"code":7,
|
{"code":0x07,
|
||||||
|
|
||||||
"data": "3.7",
|
"data": "3.7",
|
||||||
|
|
||||||
@ -255,15 +265,15 @@ DTU的IMEI号
|
|||||||
| data | str | adc电压 |
|
| data | str | adc电压 |
|
||||||
| status | str | 0 失败 1成功 |
|
| status | str | 0 失败 1成功 |
|
||||||
|
|
||||||
### 4.1.9 gpio查询
|
### gpio查询
|
||||||
|
|
||||||
说明: 查询gpio
|
说明: 查询gpio
|
||||||
|
|
||||||
功能码: 8
|
功能码: 0x08
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
```
|
```
|
||||||
{"code":8,
|
{"code":0x08,
|
||||||
|
|
||||||
"data": "gpio_msg",
|
"data": "gpio_msg",
|
||||||
|
|
||||||
@ -276,36 +286,15 @@ DTU的IMEI号
|
|||||||
| data | str | gpio获取的信息 |
|
| data | str | gpio获取的信息 |
|
||||||
| status | str | 0 失败 1成功 |
|
| status | str | 0 失败 1成功 |
|
||||||
|
|
||||||
### 4.1.10 电池电压查询
|
### 查询温湿度
|
||||||
|
|
||||||
说明: 查询gpio
|
|
||||||
|
|
||||||
功能码: 9
|
|
||||||
|
|
||||||
返回的数据内容:
|
|
||||||
```
|
|
||||||
{"code":9,
|
|
||||||
|
|
||||||
"data": "3590",
|
|
||||||
|
|
||||||
"status":1}
|
|
||||||
```
|
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| code | int | 状态码 |
|
|
||||||
| data | str | gpio获取的信息 |
|
|
||||||
| status | str | 0 失败 1成功 |
|
|
||||||
|
|
||||||
### 4.1.10 查询温湿度
|
|
||||||
|
|
||||||
说明: 查询温湿度
|
说明: 查询温湿度
|
||||||
|
|
||||||
功能码: 10
|
功能码: 0x010
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
```
|
```
|
||||||
{"code":10,
|
{"code":0x10,
|
||||||
"data": {"temperature": 26.0, "humidity": 60.0},
|
"data": {"temperature": 26.0, "humidity": 60.0},
|
||||||
"status":1}
|
"status":1}
|
||||||
```
|
```
|
||||||
@ -313,18 +302,18 @@ DTU的IMEI号
|
|||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| code | int | 状态码 |
|
| code | int | 状态码 |
|
||||||
| data | dict | 温湿度信息{"temperature": temp, 'humidity': humid} |
|
| data | dict | 温湿度信息{"temperature": temp, &##39;humidity&##39;: humid} |
|
||||||
| status | str | 0 失败 1成功 |
|
| status | str | 0 失败 1成功 |
|
||||||
|
|
||||||
### 4.1.11 查询网络连接信息
|
### 查询网络连接信息
|
||||||
|
|
||||||
说明: 查询网络连接信息,每种连接类型返回对应连接状态
|
说明: 查询网络连接信息,每种连接类型返回对应连接状态
|
||||||
|
|
||||||
功能码: 11
|
功能码: 0x11
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
```
|
```
|
||||||
{"code":11,
|
{"code":0x11,
|
||||||
"data": "200",
|
"data": "200",
|
||||||
"status":1}
|
"status":1}
|
||||||
```
|
```
|
||||||
@ -335,100 +324,36 @@ DTU的IMEI号
|
|||||||
| data | str | 网络连接状态 |
|
| data | str | 网络连接状态 |
|
||||||
| status | str | 0 失败 1成功 |
|
| status | str | 0 失败 1成功 |
|
||||||
|
|
||||||
网络连接状态说明
|
### 查询网络状态
|
||||||
|
|
||||||
| **连接类型** | **含义** |
|
|
||||||
|-----------|--------------------------------|
|
|
||||||
| http | 返回http状态码 |
|
|
||||||
| tcp/udp | 参照套接字状态表 |
|
|
||||||
| mqtt | 0:连接成功 1:连接中 2:服务端连接关闭 -1:连接异常 |
|
|
||||||
| aliyun | 0:连接成功 1:连接中 2:服务端连接关闭 -1:连接异常 |
|
|
||||||
| txyun | 0:连接成功 1:连接中 2:服务端连接关闭 -1:连接异常 |
|
|
||||||
| quecthing | 参照quecthing连接状态表 |
|
|
||||||
|
|
||||||
套接字状态表
|
|
||||||
|
|
||||||
| **状态值** | **状态** | **描述** |
|
|
||||||
|------|------------|---------------------------------------------------------------|
|
|
||||||
|0 | CLOSED | 套接字创建了,但没有使用这个套接字 |
|
|
||||||
|1 | LISTEN | 套接字正在监听连接 |
|
|
||||||
|2 | SYN_SENT | 套接字正在试图主动建立连接,即发送SYN后还没有收到ACK |
|
|
||||||
|3 | SYN_RCVD | 套接字正在处于连接的初始同步状态,即收到对方的SYN,但还没收到自己发过去的SYN的ACK |
|
|
||||||
|4 | ESTABLISHED | 连接已建立 |
|
|
||||||
|5 | FIN_WAIT_1 | 套接字已关闭,正在关闭连接,即发送FIN,没有收到ACK也没有收到FIN |
|
|
||||||
|6 | FIN_WAIT_2 | 套接字已关闭,正在等待远程套接字关闭,即在FIN_WAIT_1状态下收到发过去FIN对应的ACK |
|
|
||||||
|7 | CLOSE_WAIT | 远程套接字已经关闭,正在等待关闭这个套接字,被动关闭的一方收到FIN |
|
|
||||||
|8 | CLOSING | 套接字已关闭,远程套接字正在关闭,暂时挂起关闭确认,即在FIN_WAIT_1状态下收到被动方的FIN |
|
|
||||||
|9 | LAST_ACK | 远程套接字已关闭,正在等待本地套接字的关闭确认,被动方在CLOSE_WAIT状态下发送FIN |
|
|
||||||
|10 | TIME_WAIT | 套接字已经关闭,正在等待远程套接字的关闭,即FIN、ACK、FIN、ACK都完毕,经过2MSL时间后变为CLOSED状态 |
|
|
||||||
|
|
||||||
quecthing连接状态表
|
|
||||||
|
|
||||||
|**整型**| **状态编号** |
|
|
||||||
|---|------------|
|
|
||||||
|0 | 未初始化 |
|
|
||||||
|1 | 已初始化 |
|
|
||||||
|2 | 正在认证 |
|
|
||||||
|3 | 认证成功 |
|
|
||||||
|4 | 认证失败 |
|
|
||||||
|5 | 正在注册 |
|
|
||||||
|6 | 注册成功,等待订阅 |
|
|
||||||
|7 | 注册失败 |
|
|
||||||
|8 | 已订阅,数据可发送 |
|
|
||||||
|9 | 订阅失败 |
|
|
||||||
|10 | 正在注销 |
|
|
||||||
|11 | 注销成功 |
|
|
||||||
|12 | 注销失败 |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 4.1.12 查询网络状态
|
|
||||||
|
|
||||||
说明: 查询网络连接状态,返回基站信息
|
说明: 查询网络连接状态,返回基站信息
|
||||||
|
|
||||||
功能码: 12
|
功能码: 0x12
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
```
|
```
|
||||||
{"code":12,
|
{"code":0x12,
|
||||||
|
|
||||||
"data": {"voice_state": 1, "data_state": 1},
|
"data": ([], [], [(0, 14071232, 1120, 0, 123….),
|
||||||
|
|
||||||
"status":1}
|
"status":1}
|
||||||
```
|
```
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- |---------------------------------------|
|
| --- | --- | --- |
|
||||||
| code | int | 状态码 |
|
| code | int | 状态码 |
|
||||||
| data | turple | voice_state:语音连接状态, data_state:数据连接状态 |
|
| data | turple | 基站连接状态 |
|
||||||
| status | str | 0 失败 1成功 |
|
| status | str | 0 失败 1成功 |
|
||||||
|
|
||||||
状态说明
|
### 查询基站定位信息
|
||||||
|
|
||||||
| **值** | **状态说明** |
|
|
||||||
| --- | --- |
|
|
||||||
| 0 | not registered, MT is not currently searching an operator to register to |
|
|
||||||
| 1 | registered, home network |
|
|
||||||
| 2 | not registered, but MT is currently trying to attach or searching an operator to register to |
|
|
||||||
| 3 | registration denied |
|
|
||||||
| 4 | unknown |
|
|
||||||
| 5 | registered, roaming |
|
|
||||||
| 6 | egistered for “SMS only”, home network (not applicable) |
|
|
||||||
| 7 | registered for “SMS only”, roaming (not applicable) |
|
|
||||||
| 8 | attached for emergency bearer services only |
|
|
||||||
| 9 | registered for “CSFB not preferred”, home network (not applicable) |
|
|
||||||
| 10 | registered for “CSFB not preferred”, roaming (not applicable) |
|
|
||||||
| 11 | emergency bearer services only |
|
|
||||||
|
|
||||||
### 4.1.13 查询基站定位信息
|
|
||||||
|
|
||||||
说明: 查询基站定位信息
|
说明: 查询基站定位信息
|
||||||
|
|
||||||
功能码: 13
|
功能码: 0x13
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
```
|
```
|
||||||
{"code":13,
|
{"code":0x13,
|
||||||
|
|
||||||
"data": (117.1138, 31.82279, 550) ,
|
"data": (117.1138, 31.82279, 550) ,
|
||||||
|
|
||||||
@ -441,16 +366,14 @@ quecthing连接状态表
|
|||||||
| data | str | 基站定位信息 |
|
| data | str | 基站定位信息 |
|
||||||
| status | str | 0 失败 1成功 |
|
| status | str | 0 失败 1成功 |
|
||||||
|
|
||||||
# 5 复位指令
|
## 复位指令
|
||||||
|
|
||||||
功能码: 255
|
功能码: 0xff
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
{ Password: "012345",
|
{ Password: "012345",
|
||||||
|
|
||||||
"code":255,
|
|
||||||
|
|
||||||
"data":{}
|
"data":{}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -458,7 +381,7 @@ quecthing连接状态表
|
|||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
无
|
`{"code": 0x06 , "data": " reset dtu " , "success":1}`
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
@ -466,13 +389,13 @@ quecthing连接状态表
|
|||||||
| data | str | reset dtu |
|
| data | str | reset dtu |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
# 6 设置指令
|
## 设置指令
|
||||||
|
|
||||||
## 6.1 基础设置
|
### 基础设置
|
||||||
|
|
||||||
### 6.1.1 协议短信(SMS)透传 message
|
#### 协议短信(SMS)透传 message
|
||||||
|
|
||||||
功能码: 50
|
功能码: 0x50
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
|
|
||||||
@ -487,7 +410,7 @@ quecthing连接状态表
|
|||||||
|
|
||||||
message: {"number":"12123123", -- 目标号码
|
message: {"number":"12123123", -- 目标号码
|
||||||
|
|
||||||
"sms_msg:" " -- 发送短信
|
"data:" " -- 发送短信
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -496,7 +419,7 @@ message: {"number":"12123123", -- 目标号码
|
|||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 50 , "data": " " , "success":1}`
|
`{"code": 0x50 , "data": " " , "success":1}`
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
@ -504,7 +427,7 @@ message: {"number":"12123123", -- 目标号码
|
|||||||
| data | str | 接收的短信 |
|
| data | str | 接收的短信 |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 6.1.2 配置密码 password
|
#### 配置密码 password
|
||||||
|
|
||||||
**说明:**
|
**说明:**
|
||||||
|
|
||||||
@ -514,13 +437,13 @@ message: {"number":"12123123", -- 目标号码
|
|||||||
|
|
||||||
是否开启自动更新需要密码
|
是否开启自动更新需要密码
|
||||||
|
|
||||||
功能码: 51
|
功能码: 0x51
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
{
|
{
|
||||||
"password":" ",
|
"password":" ",
|
||||||
"data":{"new_password": "012345"}
|
"data":{ "password": "012345"}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
说明:初始密码为固件IMEI的后六位
|
说明:初始密码为固件IMEI的后六位
|
||||||
@ -534,7 +457,7 @@ message: {"number":"12123123", -- 目标号码
|
|||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 51 , "data": " " , "success":1}`
|
`{"code": 0x51 , "data": " " , "success":1}`
|
||||||
|
|
||||||
| **字段** | **含义** |
|
| **字段** | **含义** |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
@ -543,13 +466,13 @@ message: {"number":"12123123", -- 目标号码
|
|||||||
|
|
|
|
||||||
| success | 0 失败 1成功 |
|
| success | 0 失败 1成功 |
|
||||||
|
|
||||||
### 6.1.3 登录服务器发送注册信息 reg
|
#### 登录服务器发送注册信息 reg
|
||||||
|
|
||||||
**说明:**
|
**说明:**
|
||||||
|
|
||||||
首次登陆服务器发送注册信息
|
首次登陆服务器发送注册信息
|
||||||
|
|
||||||
功能码: 53
|
功能码: 0x53
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
@ -567,7 +490,7 @@ message: {"number":"12123123", -- 目标号码
|
|||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 53 , "data": " " , "success":1}`
|
`{"code": 0x53 , "data": " " , "success":1}`
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
@ -575,29 +498,27 @@ message: {"number":"12123123", -- 目标号码
|
|||||||
| data | str | send reg |
|
| data | str | send reg |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 6.1.4 固件版本号 version
|
#### 固件版本号 version
|
||||||
|
|
||||||
**说明:**
|
**说明:**
|
||||||
|
|
||||||
修改固件版本号,用于fota升级(当开启fota升级,版本号小于服务器端的固件版本号就会进行fota升级)
|
修改固件版本号,用于fota升级(当开启fota升级,版本号小于服务器端的固件版本号就会进行fota升级)
|
||||||
|
|
||||||
固件版本号仅支持整数
|
功能码: 0x54
|
||||||
|
|
||||||
功能码: 54
|
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
{
|
{
|
||||||
"password":"",
|
"password":"",
|
||||||
"data":{
|
"data":{
|
||||||
"version ": "100" --- 版本号(使用数字字符串)
|
" version ": "100" --- 版本号(使用数字字符串)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 54 , "data": " " , "success":1}`
|
`{"code": 0x54 , "data": " " , "success":1}`
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
@ -605,13 +526,13 @@ message: {"number":"12123123", -- 目标号码
|
|||||||
| data | str | 固件版本号 |
|
| data | str | 固件版本号 |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 6.1.5 是否启用自动更新 fota
|
#### 是否启用自动更新 fota
|
||||||
|
|
||||||
**说明:**
|
**说明:**
|
||||||
|
|
||||||
Fota升级开关
|
Fota升级开关
|
||||||
|
|
||||||
功能码: 55
|
功能码: 0x55
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
@ -624,7 +545,7 @@ Fota升级开关
|
|||||||
```
|
```
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 55 , "data": " fota" , "success":1}`
|
`{"code": 0x55 , "data": " fota" , "success":1}`
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
@ -632,13 +553,13 @@ Fota升级开关
|
|||||||
| data | str | fota |
|
| data | str | fota |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 6.1.6 日志输出 nolog
|
#### 日志输出 nolog
|
||||||
|
|
||||||
**说明:**
|
**说明:**
|
||||||
|
|
||||||
串口打印日志记录,目前不支持。日志输出连接Debug口
|
串口打印日志记录,目前不支持。日志输出连接Debug口
|
||||||
|
|
||||||
功能码: 56
|
功能码: 0x56
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
@ -659,9 +580,9 @@ Fota升级开关
|
|||||||
| data | str | log |
|
| data | str | log |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 6.1.7 服务器获取配置参数
|
#### 服务器获取配置参数
|
||||||
|
|
||||||
功能码: 57
|
功能码: 0x57
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
@ -688,11 +609,9 @@ Fota升级开关
|
|||||||
| data | str | service acquire |
|
| data | str | service acquire |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 6.1.8 串口参数 uconf
|
#### 串口参数 uconf
|
||||||
|
|
||||||
功能码: 58
|
功能码: 0x58
|
||||||
|
|
||||||
**在透传模式下无法设置串口参数**
|
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
@ -718,32 +637,29 @@ Fota升级开关
|
|||||||
| data | str | uconf |
|
| data | str | uconf |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
### 6.1.9 通道配置参数 conf
|
#### 通道配置参数 conf
|
||||||
|
|
||||||
功能码: 59
|
功能码: 0x59
|
||||||
|
|
||||||
**在透传模式下无法设置串口参数**
|
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
{"password":"",
|
{"password":"",
|
||||||
"data":{
|
"data":{
|
||||||
"conf":{
|
"conf":"1": {
|
||||||
"1": {
|
"protocol": "aliyun",
|
||||||
"protocol": "aliyun",
|
"type": "mos",
|
||||||
"type": "mos",
|
"keepAlive": "",
|
||||||
"keepAlive": "",
|
"clientID": "0",
|
||||||
"clientID": "0",
|
"Devicename": "ec600n",
|
||||||
"Devicename": "ec600n",
|
"ProductKey": "gbh26bFEA4M",
|
||||||
"ProductKey": "gbh26bFEA4M",
|
"DeviceSecret": "b7ff5acc0671d40adfd0eff57e7605f6",
|
||||||
"DeviceSecret": "b7ff5acc0671d40adfd0eff57e7605f6",
|
"ProductSecret": "",
|
||||||
"ProductSecret": "",
|
"cleanSession": true,
|
||||||
"cleanSession": true,
|
"qos": "1",
|
||||||
"qos": "1",
|
"subscribe": {"0": "/gbh26bFEA4M/ec600n/user/subtest"},
|
||||||
"subscribe": {"0": "/gbh26bFEA4M/ec600n/user/subtest"},
|
"publish": {"0": "/gbh26bFEA4M/ec600n/user/pubtest"},
|
||||||
"publish": {"0": "/gbh26bFEA4M/ec600n/user/pubtest"},
|
"serialID": "0"}
|
||||||
"serialID": "0"}
|
}}
|
||||||
}}}
|
|
||||||
```
|
```
|
||||||
**对应通道的配置参数详见6.1.10.1的通道配置详解 :**
|
**对应通道的配置参数详见6.1.10.1的通道配置详解 :**
|
||||||
|
|
||||||
@ -757,9 +673,9 @@ Fota升级开关
|
|||||||
| data | str | conf |
|
| data | str | conf |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
#### 6.1.9.1 通道配置详解
|
##### 通道配置详解
|
||||||
|
|
||||||
##### 6.1.9.1.1 HTTP参数
|
###### HTTP参数
|
||||||
```
|
```
|
||||||
{
|
{
|
||||||
"protocol": "http",
|
"protocol": "http",
|
||||||
@ -778,7 +694,7 @@ Fota升级开关
|
|||||||
| timeout | int | HTTP请求最长等待时间 |
|
| timeout | int | HTTP请求最长等待时间 |
|
||||||
| serialD | int | HTTP绑定的串口号(1~2) |
|
| serialD | int | HTTP绑定的串口号(1~2) |
|
||||||
|
|
||||||
##### 6.1.9.1.2 SOCKET tcp参数
|
###### SOCKET tcp参数
|
||||||
```
|
```
|
||||||
{
|
{
|
||||||
"protocol": "tcp",
|
"protocol": "tcp",
|
||||||
@ -800,10 +716,10 @@ Fota升级开关
|
|||||||
| KeepAlive | int | 链接超时最大时间单位秒,默认300秒 |
|
| KeepAlive | int | 链接超时最大时间单位秒,默认300秒 |
|
||||||
| serialD | int | tcp/udp绑定的串口号(1~2) |
|
| serialD | int | tcp/udp绑定的串口号(1~2) |
|
||||||
|
|
||||||
##### 6.1.9.1.3 SOCKET udp 参数
|
###### SOCKET udp 参数
|
||||||
```
|
```
|
||||||
{
|
{
|
||||||
"protocol": "udp",
|
"protocol": "tcp",
|
||||||
"ping": "",
|
"ping": "",
|
||||||
"heartbeat": 30,
|
"heartbeat": 30,
|
||||||
"url": "220.180.239.212",
|
"url": "220.180.239.212",
|
||||||
@ -822,7 +738,7 @@ Fota升级开关
|
|||||||
| KeepAlive | int | 链接超时最大时间单位秒,默认300秒 (60~600) |
|
| KeepAlive | int | 链接超时最大时间单位秒,默认300秒 (60~600) |
|
||||||
| serialD | int | tcp/udp绑定的串口号(1~2) |
|
| serialD | int | tcp/udp绑定的串口号(1~2) |
|
||||||
|
|
||||||
##### 6.1.9.1.4 MQTT参数
|
###### MQTT参数
|
||||||
```
|
```
|
||||||
{
|
{
|
||||||
"protocol": "mqtt",
|
"protocol": "mqtt",
|
||||||
@ -852,7 +768,7 @@ Fota升级开关
|
|||||||
| retain | int | MQTT的publish参数retain,默认0 |
|
| retain | int | MQTT的publish参数retain,默认0 |
|
||||||
| serialD | int | MQTT通道捆绑的串口ID (1~3) |
|
| serialD | int | MQTT通道捆绑的串口ID (1~3) |
|
||||||
|
|
||||||
##### 6.1.9.1.5 阿里云参数
|
###### 阿里云参数
|
||||||
```
|
```
|
||||||
{
|
{
|
||||||
"protocol": "aliyun",
|
"protocol": "aliyun",
|
||||||
@ -886,7 +802,7 @@ Fota升级开关
|
|||||||
| pubTopic | str | 发布主题 |
|
| pubTopic | str | 发布主题 |
|
||||||
| serialD | int | MQTT通道捆绑的串口ID (1~3) |
|
| serialD | int | MQTT通道捆绑的串口ID (1~3) |
|
||||||
|
|
||||||
##### 6.1.9.1.6 腾讯云参数
|
###### 腾讯云参数
|
||||||
```
|
```
|
||||||
{
|
{
|
||||||
"protocol": "txyun",
|
"protocol": "txyun",
|
||||||
@ -911,7 +827,8 @@ Fota升级开关
|
|||||||
| keepAlive | int | 通信之间允许的最长时间段(以秒为单位),默认为300,范围(60-1200)使用默认值就填""或者" "。 |
|
| keepAlive | int | 通信之间允许的最长时间段(以秒为单位),默认为300,范围(60-1200)使用默认值就填""或者" "。 |
|
||||||
| clientID | str | clientID ,自定义字符(不超过64) |
|
| clientID | str | clientID ,自定义字符(不超过64) |
|
||||||
| Devicename | str | 设备名称 |
|
| Devicename | str | 设备名称 |
|
||||||
| ProductKey | str |产品密钥|
|
| ProductKey | str |
|
||||||
|
|
|
||||||
| DeviceSecret | str | 设备密钥(使用一型一密认证此参数传入"") |
|
| DeviceSecret | str | 设备密钥(使用一型一密认证此参数传入"") |
|
||||||
| ProductSecret | str | 产品密钥(使用一机一密认证时此参数传入"") |
|
| ProductSecret | str | 产品密钥(使用一机一密认证时此参数传入"") |
|
||||||
| cleanSession | int | MQTT 保存会话标志位( 0则客户端是持久客户端,当客户端断开连接时,订阅信息和排队消息将被保留, 1代理将在其断开连接时删除有关此客户端的所有信息 ) |
|
| cleanSession | int | MQTT 保存会话标志位( 0则客户端是持久客户端,当客户端断开连接时,订阅信息和排队消息将被保留, 1代理将在其断开连接时删除有关此客户端的所有信息 ) |
|
||||||
@ -920,44 +837,11 @@ Fota升级开关
|
|||||||
| pubTopic | str | 发布主题 |
|
| pubTopic | str | 发布主题 |
|
||||||
| serialD | int | MQTT通道捆绑的串口ID (1~3) |
|
| serialD | int | MQTT通道捆绑的串口ID (1~3) |
|
||||||
|
|
||||||
|
## 设置APN
|
||||||
##### 6.1.9.1.7 移远云参数
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"protocol": "quecthing",
|
|
||||||
"keepAlive": "", // lifetime
|
|
||||||
"ProductKey": " a1QNbCDxIWM ",
|
|
||||||
"ProductSecret": "",
|
|
||||||
"qos": "1",
|
|
||||||
"SessionFlag": "",
|
|
||||||
"sendMode": "phy",
|
|
||||||
"serialID": "1",
|
|
||||||
}
|
|
||||||
```
|
|
||||||
| **字段** | **类型** | **含义** |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| quecthing | str | 腾讯云IOT的标识 |
|
|
||||||
| keepAlive | int | 通信之间允许的最长时间段(以秒为单位),默认为120,范围(60-1200)使用默认值就填""或者" "。 |
|
|
||||||
| ProductKey | str |产品id|
|
|
||||||
| ProductSecret | str | 产品密钥|
|
|
||||||
| QOS | int | MQTT消息服务质量(默认0,可选择0或1)0:发送者只发送一次消息,不进行重试 1:发送者最少发送一次消息,确保消息到达Broker |
|
|
||||||
| SessionFlag | bool | 配置与云平台通信的数据是否采用session加密(默认值为False),True:加密,False:加密 |
|
|
||||||
| sendMode | str | 移远云数据收发模式,phy:物模型,pass:透传 |
|
|
||||||
| serialD | int | MQTT通道捆绑的串口ID (1~3) |
|
|
||||||
|
|
||||||
|
|
||||||
移远云开发说明请点击以下连接获取文档:
|
|
||||||
|
|
||||||
[Quectel_移远通信物联网设备管理平台设备接入_应用指导_(Python)_2.9.0.pdf](https://quec-pro-oss.oss-cn-shanghai.aliyuncs.com/documentCenter/Quectel_%E7%A7%BB%E8%BF%9C%E9%80%9A%E4%BF%A1%E7%89%A9%E8%81%94%E7%BD%91%E8%AE%BE%E5%A4%87%E7%AE%A1%E7%90%86%E5%B9%B3%E5%8F%B0%E8%AE%BE%E5%A4%87%E6%8E%A5%E5%85%A5_%E5%BA%94%E7%94%A8%E6%8C%87%E5%AF%BC_(Python)_2.9.0.pdf)
|
|
||||||
|
|
||||||
|
|
||||||
# 7 设置APN
|
|
||||||
|
|
||||||
说明:这个指令只适合配置和使用不是同一张卡的场景
|
说明:这个指令只适合配置和使用不是同一张卡的场景
|
||||||
|
|
||||||
**在透传模式下无法设置串口参数**
|
功能码: 0x60
|
||||||
|
|
||||||
功能码: 60
|
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
@ -976,7 +860,7 @@ apn对应列表说明:
|
|||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 60 , "status":1}`
|
`{"code": 0x60 , "status":1}`
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
@ -984,26 +868,22 @@ apn对应列表说明:
|
|||||||
| data | str | set apn |
|
| data | str | set apn |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
# 8 GPIO pins
|
## GPIO pins
|
||||||
|
|
||||||
功能码: 61
|
功能码: 0x61
|
||||||
|
|
||||||
**在透传模式下无法设置串口参数**
|
|
||||||
|
|
||||||
pins的长度必须为3
|
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
{"password": " ",
|
{"password": " ",
|
||||||
"data":{"pins":[
|
"data":{"pins":[
|
||||||
"1", -- 网路指示灯的GPIO (pio1~pio128)
|
"pio2", -- 网路指示灯的GPIO (pio1~pio128)
|
||||||
"2", -- 与服务器连上后通知GPIO (pio1~pio128)
|
"pio4", -- 与服务器连上后通知GPIO (pio1~pio128)
|
||||||
"3" -- 重置DTU参数的GPIO (pio1~pio128)
|
"pio4" -- 重置DTU参数的GPIO (pio1~pio128)
|
||||||
]}}
|
]}}
|
||||||
```
|
```
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 61 , "status":1}`
|
`{"code": 0x61 , "status":1}`
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
@ -1011,9 +891,9 @@ pins的长度必须为3
|
|||||||
| data | str | set gpio pins |
|
| data | str | set gpio pins |
|
||||||
| success | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
# 9 OTA
|
## OTA
|
||||||
|
|
||||||
功能码: 62
|
功能码: 0x62
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
@ -1023,34 +903,30 @@ pins的长度必须为3
|
|||||||
```
|
```
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 62 , "status":1}`
|
`{"code": 0x62 , "status":1}`
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| code | Str | 状态码 |
|
| code | Str | 状态码 |
|
||||||
| data | str | OTA状态 |
|
| data | str | OTA状态 |
|
||||||
| status | int | 0 失败 1成功 |
|
| success | int | 0 失败 1成功 |
|
||||||
|
|
||||||
|
## 参数设置
|
||||||
|
|
||||||
# 10 参数设置
|
功能码: 0x63
|
||||||
|
|
||||||
功能码: 63
|
|
||||||
|
|
||||||
数据内容:
|
数据内容:
|
||||||
```
|
```
|
||||||
{"password": " ",
|
{"password": " ",
|
||||||
"data":{"dtu_config":{完整配置文件内容}
|
"data":{ 完整配置文件(省略)
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
完整配置文件参照《DTU上手说明》
|
|
||||||
|
|
||||||
返回的数据内容:
|
返回的数据内容:
|
||||||
|
|
||||||
`{"code": 63 , "status":1}`
|
`{"code": 0x63 ,"status":1}`
|
||||||
|
|
||||||
| **字段** | **类型** | **含义** |
|
| **字段** | **类型** | **含义** |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| code | Str | 状态码 |
|
| code | Str | 状态码 |
|
||||||
| status | int | 0 失败 1成功 |
|
| data | dict | 完整的配置文件 |
|
||||||
|
| status | int | 0 失败 1成功 |
|
525
docs/DTU_User_Guides.md
Normal file
@ -0,0 +1,525 @@
|
|||||||
|
## 修订历史
|
||||||
|
|
||||||
|
| Version | **Date** | **Author** | **Change expression** |
|
||||||
|
| :------ | ---------- | ---------- | --------------------- |
|
||||||
|
| 1.0 | 2021-11-25 | 陈驰 | 初始版本 |
|
||||||
|
|
||||||
|
## 基本概述
|
||||||
|
|
||||||
|
本文档旨在指导用户如何基于我司的QuecPython开发板进行DTU功能开发。
|
||||||
|
|
||||||
|
## 使用前准备
|
||||||
|
|
||||||
|
### 在NANO SIM卡座中插入SIM卡
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 将天线插入至开发板背面标注为"LTE"的插座中,并用力压紧直到听到"啪"一声
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 使用USB数据线连接开发板至电脑USB接口
|
||||||
|
### 设备开机与QPYcom下载请点击以下连接查看说明
|
||||||
|
|
||||||
|
[QuecPython 开发环境搭建](https://python.quectel.com/doc/doc/Quick_start/zh/QuecPythonStart/dev_env.html)
|
||||||
|
|
||||||
|
## DTU固件、配置文件加载到开发板
|
||||||
|
|
||||||
|
### 打开代码库中的DTU文件夹,按需求编写配置文件
|
||||||
|
|
||||||
|
**配置文件格式与说明如下**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"plate": 1, //是否在报文中添加IMEI
|
||||||
|
"password": "123", //设置密码
|
||||||
|
"conf": { //设置在线连接
|
||||||
|
"1": { //通道序号
|
||||||
|
//HTTP连接设置
|
||||||
|
"protocol": "http", //连接类型,固定为http
|
||||||
|
"method": "get", //请求方式
|
||||||
|
"url": "http://httpbin.org/get", //请求url
|
||||||
|
"reg_data": "", //附带的固定文本
|
||||||
|
"timeout": "", //超时
|
||||||
|
"serialID": 1 //捆绑的串口(1-2)
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
//TCP&UDP连接设置
|
||||||
|
"protocol": "tcp", //连接类型,TCP填写”tcp”,UDP填写”udp”
|
||||||
|
"ping": "", //ping
|
||||||
|
"heartbeat": 30, //心跳时间
|
||||||
|
"url": "220.180.239.212", //请求url
|
||||||
|
"port": "8305", //端口
|
||||||
|
"keepAlive": 300, //保持连接时间
|
||||||
|
"serialID": 2 //捆绑串口
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
//mqtt连接设置
|
||||||
|
"protocol": "mqtt", //连接类型
|
||||||
|
"clientID": "test_mqtt", //客户端id
|
||||||
|
"keepAlive": "", //keep alive超时
|
||||||
|
"url": "mq.tongxinmao.com", //url
|
||||||
|
"port": "18830", //端口
|
||||||
|
"cleanSession": "0", //clean session
|
||||||
|
"subscribe": {"0": "/public/TEST/python"}, //订阅的主题(支持多个)
|
||||||
|
"publish": {"0": "/public/TEST/python"}, //发布的主题(支持多个)
|
||||||
|
"qos": "0", //QoS
|
||||||
|
"retain": "1", //是否使用内部重连
|
||||||
|
"serialID": "1" //捆绑的串口
|
||||||
|
},
|
||||||
|
//阿里云连接设置
|
||||||
|
"4": {
|
||||||
|
"protocol": "aliyun", //连接类型
|
||||||
|
"type": "mos", //一机一密/一型一密设置
|
||||||
|
"keepAlive": "", // keep alive超时
|
||||||
|
"clientID": " test_mos ", //客户端id
|
||||||
|
"Devicename": " light01", //设备名称
|
||||||
|
"ProductKey": " a1QNbCDxIWM ", //product key
|
||||||
|
"DeviceSecret": "0bceb8010ade0df2e6989982e63f7601", //device secret
|
||||||
|
"ProductSecret": "", //product secret
|
||||||
|
"cleanSession": "0", //clean session
|
||||||
|
"qos": "1", //QoS
|
||||||
|
"subscribe": {"0": "/a1QNbCDxIWM/light01/user/get"}, //订阅的主题(支持多个)
|
||||||
|
"publish": {"0": "/a1QNbCDxIWM/light01/user/update"}, //发布的主题(支持多个)
|
||||||
|
"serialID": "1" //捆绑的串口
|
||||||
|
},
|
||||||
|
"5": {
|
||||||
|
//腾讯云设置
|
||||||
|
"protocol": "txyun",
|
||||||
|
"type": "mos",
|
||||||
|
"keepAlive": "",
|
||||||
|
"clientID": "test_tx_mos",
|
||||||
|
"Devicename": "Smart_test01",
|
||||||
|
"ProductKey": "H7MBLRYXN9",
|
||||||
|
"DeviceSecret": "89c7tXT3s3grZTr/YFjxSg==",
|
||||||
|
"ProductSecret": "",
|
||||||
|
"cleanSession": "0",
|
||||||
|
"qos": "1",
|
||||||
|
"subscribe": {"0": "H7MBLRYXN9/Smart_test01/control"},
|
||||||
|
"publish": {"0": "H7MBLRYXN9/Smart_test01/event"},
|
||||||
|
"serialID": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"reg": 1, //发送登陆消息
|
||||||
|
"convert": 0,
|
||||||
|
"version": 100, //固件版本
|
||||||
|
"nolog": 0, //是否输出log
|
||||||
|
"message": {}, //协议短信透传
|
||||||
|
"uconf": { //串口设置
|
||||||
|
"1": {
|
||||||
|
"baudrate": "115200",
|
||||||
|
"databits": "8",
|
||||||
|
"parity": "0",
|
||||||
|
"stopbits": "1",
|
||||||
|
"flowctl": "0"
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"baudrate": "115200",
|
||||||
|
"databits": "8",
|
||||||
|
"parity": "0",
|
||||||
|
"stopbits": "1",
|
||||||
|
"flowctl": "0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fota": 1, //是否启用fota
|
||||||
|
"pins": [ //启用的pio
|
||||||
|
"pio1",
|
||||||
|
"pio2",
|
||||||
|
"pio3"
|
||||||
|
],
|
||||||
|
"direction_pin": {}, //需要控制的方向的GPIO与默认方向
|
||||||
|
"apn": [ //APN设置
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"service_acquire": 0, //是否开启服务器获取参数
|
||||||
|
"work_mode": "command", //工作模式
|
||||||
|
"auto_connect": 1, //自动连接
|
||||||
|
"offline_storage": false //离线存储
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
按需求编写配置文件后将配置文件保存为"dtu_config.json",并保存至DTU代码库中的"dtu"文件夹内
|
||||||
|
|
||||||
|
**注:json文件保存前需要移除注释**
|
||||||
|
|
||||||
|
### 下载代码到设备
|
||||||
|
|
||||||
|
#### 接上数据线,连接至电脑,短按开发板上的"PWK"按键启动设备,并在QPYcom上选择MI05接口连接
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 切换到下载选项卡,点击创建项目,并输入任意项目名称
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 将代码包"dtu"文件夹内所有文件拖入此框内,并应包含图示文件
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 单击箭头,选择"下载脚本",并等待下载完成
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 切换至"文件"选项卡,在右边选中"dtu\_handler.py",点击运行按钮,即可开始dtu调试运行,如果需要上电自动运行,只需要将"dtu\_handler.py"更名为"main.py"即可实现上电自动运行
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 重启开发板
|
||||||
|
|
||||||
|
上面的步骤完成之后,选择USB MI05 COM Port(老版本是USB串行设备),打开串口。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
DTU运行成功,下面为读取的配置文件。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 报文格式
|
||||||
|
|
||||||
|
### 命令模式/modbus模式
|
||||||
|
|
||||||
|
支持多通道透传,通过配置文件中的serialID字段可以对通道与串口进行绑定,每个串口均支持绑定多个通道。在发送数据时需要传入通道id,DTU会向指定的通道发送数据。
|
||||||
|
|
||||||
|
在命令模式与modbus模式下,接受到的报文会先进行命令解析,如果解析失败才会向串口传输数据。
|
||||||
|
|
||||||
|
数据格式说明:
|
||||||
|
|
||||||
|
#### HTTP/TCP/UDP
|
||||||
|
|
||||||
|
- 上行数据报文格式:
|
||||||
|
|
||||||
|
`"<channel_id>,<msg_len>"[,"<crc32>",”<msg_data>”]`
|
||||||
|
|
||||||
|
- 下行数据报文格式:
|
||||||
|
|
||||||
|
`"<channel_id>,<msg_len>"[,"<crc32>",”<msg_data>”]`
|
||||||
|
|
||||||
|
- 字段说明:
|
||||||
|
|
||||||
|
channel_id:通道id,配置文件中通道id
|
||||||
|
|
||||||
|
msg_len:消息体长度,字符串格式,可以为0
|
||||||
|
|
||||||
|
crc32:消息数据crc32校验码,当msg_len为0时,此项可省略
|
||||||
|
|
||||||
|
msg_data:消息体,当msg_len为0时,此项可省略
|
||||||
|
|
||||||
|
- 示例报文:
|
||||||
|
|
||||||
|
**发送报文:**
|
||||||
|
|
||||||
|
`“1,6,376e6e7,abcedf”` (msg_len不为0)
|
||||||
|
|
||||||
|
`“1,0”` (msg_len为0)
|
||||||
|
|
||||||
|
**返回报文:**
|
||||||
|
|
||||||
|
`“5,2e46f5,20001”`
|
||||||
|
|
||||||
|
#### MQTT/Aliyun/Txyun
|
||||||
|
|
||||||
|
- 上行数据报文格式:
|
||||||
|
|
||||||
|
`"<channel_id>,<topic_id>,<msg_len>","<crc32>",<msg_data>"`
|
||||||
|
|
||||||
|
- 下行数据报文格式:
|
||||||
|
|
||||||
|
`"<channel_id>,<topic_id>,<msg_len>","<crc32>",<msg_data>"`
|
||||||
|
|
||||||
|
- 字段说明:
|
||||||
|
|
||||||
|
channel_id:通道id,配置文件中通道id
|
||||||
|
|
||||||
|
topic_id:mqtt通道topic_id,上行为publish topic id,下行为subscribe topic id
|
||||||
|
|
||||||
|
msg_len:消息体长度,字符串格式,可以为0
|
||||||
|
|
||||||
|
crc32:消息数据crc32校验码,当msg_len为0时此项也不可省略
|
||||||
|
|
||||||
|
msg_data:消息体,当msg_len为0时此项也不可省略
|
||||||
|
|
||||||
|
- 示例报文:
|
||||||
|
|
||||||
|
**发送报文:**
|
||||||
|
|
||||||
|
`“1,1,6,376e6e7,abcedf”`
|
||||||
|
|
||||||
|
**返回报文:**
|
||||||
|
|
||||||
|
`“1,1,5,2e46f5,20002”`
|
||||||
|
|
||||||
|
### 透传模式
|
||||||
|
|
||||||
|
支持MQTT/TCP/UDP/HTTP双通道透传(串口1&串口2),透传模式每个串口仅支持绑定一个通道,可在配置文件中配置serialID对通道和串口进行绑定。透传模式如果串口配置了多个通道,只会选择第一个通道配置,后面的配置都会被忽略。
|
||||||
|
|
||||||
|
透传模式传输时无需在数据格式上传入channel\_id,DTU会自动向串口绑定通道发送数据。
|
||||||
|
|
||||||
|
数据格式说明:
|
||||||
|
|
||||||
|
#### HTTP/TCP/UDP
|
||||||
|
|
||||||
|
- 上行数据报文格式:
|
||||||
|
|
||||||
|
`"<msg_len>"[,"<crc32>",”<msg_data>”]"`
|
||||||
|
|
||||||
|
- 下行数据报文格式:
|
||||||
|
|
||||||
|
`"<msg_len>"[,"<crc32>",”<msg_data>”]"`
|
||||||
|
|
||||||
|
- 字段说明:
|
||||||
|
|
||||||
|
msg_len:消息体长度,字符串格式,可以为0
|
||||||
|
|
||||||
|
crc32:消息数据crc32校验码,当msg_len为0时,此项可省略
|
||||||
|
|
||||||
|
msg_data:消息体,当msg_len为0时,此项可省略
|
||||||
|
|
||||||
|
- 示例报文:
|
||||||
|
|
||||||
|
**发送报文:**
|
||||||
|
|
||||||
|
`“6,376e6e7,abcedf”` (msg_len不为0)
|
||||||
|
|
||||||
|
`“0”` (msg_len为0)
|
||||||
|
|
||||||
|
**返回报文:**
|
||||||
|
|
||||||
|
`“5,2e46f5,20001”`
|
||||||
|
|
||||||
|
#### MQTT/Aliyun/Txyun
|
||||||
|
|
||||||
|
- 上行数据报文格式:
|
||||||
|
|
||||||
|
`<topic_id>,<msg_len>,<crc32>,<msg_data>`
|
||||||
|
|
||||||
|
- 下行数据报文格式:
|
||||||
|
|
||||||
|
`<topic_id>,<msg_len>,<crc32>,<msg_data>`
|
||||||
|
|
||||||
|
- 字段说明:
|
||||||
|
|
||||||
|
topic_id:mqtt通道topic_id,上行为publish topic id,下行为subscribe topic id
|
||||||
|
|
||||||
|
msg_len:消息体长度,字符串格式,可以为0
|
||||||
|
|
||||||
|
crc32:消息数据crc32校验码,当msg_len为0时此项也不可省略
|
||||||
|
|
||||||
|
msg_data:消息体,当msg_len为0时此项也不可省略
|
||||||
|
|
||||||
|
- 示例报文:
|
||||||
|
|
||||||
|
**发送报文:**
|
||||||
|
|
||||||
|
`“6,376e6e7,abcedf”`
|
||||||
|
|
||||||
|
**返回报文:**
|
||||||
|
|
||||||
|
`“5,2e46f5,20002”`
|
||||||
|
|
||||||
|
### 与云端通信报文
|
||||||
|
|
||||||
|
DTU与云端通信报文使用json格式
|
||||||
|
|
||||||
|
#### 云端下行报文
|
||||||
|
|
||||||
|
- 命令模式与modbus模式:
|
||||||
|
|
||||||
|
`{“msg_id”: msg_id, “data”: “1234”[, “cmd_code”: 0X40, “topic_id”: 1]}`
|
||||||
|
|
||||||
|
- 透传模式:
|
||||||
|
|
||||||
|
`{“msg_id”: msg_id, “data”: “1234”}`
|
||||||
|
|
||||||
|
- 字段说明:
|
||||||
|
|
||||||
|
msg_id:报文id,一般为时间戳+3位随机数
|
||||||
|
|
||||||
|
data:报文消息字段
|
||||||
|
|
||||||
|
cmd_code:可选字段,填写对应功能码,并又DTU执行相应的操作,此字段仅在命令模式下生效
|
||||||
|
|
||||||
|
topic_id:可选字段,填写mqtt返回需要publish的topic\_id,此字段仅在命令模式与使用MQTT/Aliyun/Txyun时生效
|
||||||
|
|
||||||
|
#### 云端上行报文
|
||||||
|
|
||||||
|
命令模式与modbus模式:
|
||||||
|
|
||||||
|
`{“msg_id”: msg_id, “data”: “1234”[, “cmd_code”: 0X40, “status”: 1]}`
|
||||||
|
|
||||||
|
透传模式:
|
||||||
|
|
||||||
|
`{“msg_id”: msg_id, “data”: “1234”}`
|
||||||
|
|
||||||
|
- 字段说明:
|
||||||
|
|
||||||
|
msg_id:报文id,一般为时间戳+3位随机数,回复报文会使用相同的msg\_id
|
||||||
|
|
||||||
|
data:报文消息字段
|
||||||
|
|
||||||
|
cmd_code:可选字段,填写对应功能码,并又DTU执行相应的操作,此字段仅在命令模式下生效
|
||||||
|
|
||||||
|
status:可选字段,仅在命令模式下生效,用于反馈命令是否执行成功
|
||||||
|
|
||||||
|
## 阿里云MQTT案例说明
|
||||||
|
|
||||||
|
### 连接设备
|
||||||
|
|
||||||
|
本案例使用EC600N开发板与CP2102 USB to TTL模块进行调试
|
||||||
|
|
||||||
|
使用3根杜邦线分别连接CP2102的TX,RX和GND针脚
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
将CP2102的TX引出线连接至EC600N开发板的RX0针脚(编号7),将CP2102的RX引出线连接至开发板的TX0针脚(编号6),将CP2101的GND引出线连接至开发板的GND针脚(编号1)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
将开发板与CP2102分别连接至电脑的USB口,开发板按下PWK按键开机
|
||||||
|
|
||||||
|
### 获得阿里云连接参数
|
||||||
|
|
||||||
|
用户需要在阿里云上注册账户,新建项目,注册设备名称并获得以下参数
|
||||||
|
|
||||||
|
设备名称(Devicename)
|
||||||
|
|
||||||
|
产品秘钥(ProductKey)
|
||||||
|
|
||||||
|
设备秘钥(DeviceSecret):使用一机一密认证时需要提供的参数,使用一型一密时不存在此参数
|
||||||
|
|
||||||
|
产品秘钥(ProductSecret):使用一型一密认证时需要提供的参数,使用一机一密时不存在此参数
|
||||||
|
|
||||||
|
获得阿里云pk/ps
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
获得DeviceName
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 编写配置文件
|
||||||
|
|
||||||
|
编写配置文件,并将其命名为dtu_config.json
|
||||||
|
|
||||||
|
配置文件包含信息如下:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"plate": 1,
|
||||||
|
"password": "123",
|
||||||
|
"conf": {
|
||||||
|
"1": {
|
||||||
|
"protocol": "aliyun",
|
||||||
|
"type": "mos",
|
||||||
|
"keepAlive": "",
|
||||||
|
"clientID": "0",
|
||||||
|
"Devicename": " ec600n",
|
||||||
|
"ProductKey": " gbh26bFEA4M",
|
||||||
|
"DeviceSecret": " b7ff5acc0671d40adfd0eff57e7605f6",
|
||||||
|
"ProductSecret": "",
|
||||||
|
"cleanSession": true,
|
||||||
|
"qos": "1",
|
||||||
|
"subscribe": {"0": " /gbh26bFEA4M/ec600n/user/subtest"},
|
||||||
|
"publish": {"0": " /gbh26bFEA4M/ec600n/user/pubtest"},
|
||||||
|
"serialID": "0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"reg": 0,
|
||||||
|
"convert": 0,
|
||||||
|
"version": 100,
|
||||||
|
"nolog": 0,
|
||||||
|
"message": {},
|
||||||
|
"uconf": {
|
||||||
|
"0": {
|
||||||
|
"baudrate": "115200",
|
||||||
|
"databits": "8",
|
||||||
|
"parity": "0",
|
||||||
|
"stopbits": "1",
|
||||||
|
"flowctl": "0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fota": 1,
|
||||||
|
"pins": [
|
||||||
|
"pio1",
|
||||||
|
"pio2",
|
||||||
|
"pio3"
|
||||||
|
],
|
||||||
|
"direction_pin": {},
|
||||||
|
"apn": [
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"service_acquire": 0,
|
||||||
|
"work_mode": "through",
|
||||||
|
"auto_connect": 1,
|
||||||
|
"offline_storage": false
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### 烧录代码
|
||||||
|
|
||||||
|
#### 连接开发板至电脑,开机,打开QPYCom,选择Qutctel USB MI05 Port端口,并点击连接
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 切换到下载选项卡,点击"创建项目",输入项目名称,并点击"确定"
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 将dtu文件夹内所有内容拖入"用户脚本/文件"框内
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 点击"下载脚本"
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 运行
|
||||||
|
|
||||||
|
#### 切换至"文件"选项卡,选中"dtu_handler.py",并点击运行
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 运行结果输出
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 向云端发送消息
|
||||||
|
|
||||||
|
#### 打开串口调试工具,选择CP210X USB to UART 连接至CP2102转换板,并打开串口
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 在uart调试工具中按指定格式传入topic_id, msg_length, crc32值, 需要发送的数据,并点击"send";
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### DTU收到数据,并发送至云端
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 云端接收到的消息
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### 云端向设备发送信息
|
||||||
|
|
||||||
|
#### 在阿里云topic列表中向自定义topic发送消息
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### DTU成功收到消息并向串口透传数据
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 串口收到透传消息
|
||||||
|
|
||||||
|

|
@ -1,146 +0,0 @@
|
|||||||
## 1. DTU和RTU的概念
|
|
||||||
|
|
||||||
### 1.1 DTU
|
|
||||||
|
|
||||||
- 英文全称Data Transfer Unit,数据传输单元。是专门用于将来自于设备端MCU的串口数据通过无线通信网络传送至服务器的无线终端设备。
|
|
||||||
- 业务逻辑:传感器采集数据发送给设备端MCU,设备端MCU通过串口将采集到的数据通过DTU发送到服务器;服务器接收到数据可以进行分析、处理、显示、保存等操作。
|
|
||||||
|
|
||||||
![image_1fl8ad0ct150a195i169m1hk2i3g33.png-40.8kB][1]
|
|
||||||
|
|
||||||
### 1.2 RTU
|
|
||||||
|
|
||||||
- 英文全称Remote Terminal Unit,远程终端单元。
|
|
||||||
- 业务逻辑包括数据采集上报和远程指令控制两部分:
|
|
||||||
- 数据采集上报:和DTU的数据采集上报功能完全一致
|
|
||||||
- 远程指令控制:服务器下发控制指令,RTU接收到指令后,触发控制设备执行动作
|
|
||||||
- RTU功能 = DTU功能 + 控制单元。
|
|
||||||
|
|
||||||
![image_1fl8bn24285j2a23qrvd5pcd29.png-33.4kB][2]
|
|
||||||
|
|
||||||
### 1.3 应用行业和场景
|
|
||||||
|
|
||||||
- 水利水电
|
|
||||||
- 矿产资源开发
|
|
||||||
- 地质灾害检测预警
|
|
||||||
- 环境保护
|
|
||||||
- 消防安全
|
|
||||||
- 市政管网等
|
|
||||||
|
|
||||||
![image_1fl8i96dc1kheeb5109pb281mjs2j.png-99kB][3]
|
|
||||||
|
|
||||||
## 2. 移远DTU及其能力
|
|
||||||
|
|
||||||
### 2.1 产品线
|
|
||||||
|
|
||||||
目前支持DTU的模组列表:
|
|
||||||
|
|
||||||
- EC200U_CNLB
|
|
||||||
- EC200U_EUAB
|
|
||||||
- EC600U_CNLB
|
|
||||||
- EC600U_CNLC
|
|
||||||
- EC600N_CNLA
|
|
||||||
- EC600N_CNLC
|
|
||||||
- EC600S_CNLA
|
|
||||||
- EC600S_CNLB
|
|
||||||
|
|
||||||
### 2.2 产品能力
|
|
||||||
|
|
||||||
- **2个串口通道**
|
|
||||||
|
|
||||||
- **通道支持HTTP、TCP、UDP、MQTT、阿里云、腾讯云、移远云多种协议和云平台**
|
|
||||||
|
|
||||||
- **支持多个云端通道传输**
|
|
||||||
|
|
||||||
- **支持本地和远程参数配置**
|
|
||||||
|
|
||||||
- **支持OTA升级**
|
|
||||||
|
|
||||||
- **支持数据离线存储**
|
|
||||||
- 在网络连接不稳定情况下,将发送失败的数据暂存至本地,在网络恢复后优先将本地数据发送至云端
|
|
||||||
- 离线存储的数据量可通过配置文件配置
|
|
||||||
|
|
||||||
- **支持modbus协议**
|
|
||||||
|
|
||||||
- **支持命令模式和透传模式,方便不支持modbus协议的设备接入**
|
|
||||||
- 命令模式下,支持对DTU的控制和参数读取;对比友商的DTU,我司的DTU支持指定云端通道、指定MQTT主题,而非向所有的通道或主题推送同一个报文数据
|
|
||||||
- 透传模式下,每个串口仅支持单通道透传,但对比友商的DTU,我司的DTU仍然支持指定MQTT主题
|
|
||||||
|
|
||||||
- **支持常用的传感器、执行单元和输入设备**
|
|
||||||
|
|
||||||
- 传感器:
|
|
||||||
- 照度传感器(BH1750、OPT3001、GL5516、GL5528)
|
|
||||||
- 三轴加速度传感器(ADXL346、BMA250、LIS2DH12TR)
|
|
||||||
- 温湿度传感器(HDC1080、HDC2080、AHT10、DHT11)
|
|
||||||
- 可燃气体传感器
|
|
||||||
- CO2气体传感器
|
|
||||||
- GNSS定位模块
|
|
||||||
- ...
|
|
||||||
|
|
||||||
- 执行单元:
|
|
||||||
- 功放
|
|
||||||
- 电机
|
|
||||||
- LED
|
|
||||||
- LCD(ILI9225、ST7735、ST7789、SSD1306、UC1628)
|
|
||||||
- ...
|
|
||||||
|
|
||||||
- 输入设备:
|
|
||||||
- 麦克风
|
|
||||||
- 摄像头(GC032A、BF3901)
|
|
||||||
- 矩阵键盘
|
|
||||||
- ...
|
|
||||||
|
|
||||||
- **支持QuecPython,可以使用Python代码快速实现二次开发**
|
|
||||||
|
|
||||||
- **开放了GPIO、SPI、IIC、PWM等各种外设接口,方便外设扩充**
|
|
||||||
|
|
||||||
### 2.3 产品优势
|
|
||||||
|
|
||||||
- **支持网页生成DTU配置文件(即将上线)**
|
|
||||||
|
|
||||||
- **支持云端通道选择与MQTT topic选择**
|
|
||||||
- 在命令模式下,DTU支持向指定云端通道发送数据,可节省流量及减少垃圾数据产生
|
|
||||||
- MQTT、阿里云与腾讯云类型通道支持topic选择,DTU可支持向指定的topic发布数据
|
|
||||||
- 通道可绑定串口,绑定串口后仅会向绑定的串口发送数据
|
|
||||||
|
|
||||||
- **透传时增加校验机制,保证上传数据的正确性**
|
|
||||||
- 与串口通信双重校验机制,同时校验数据长度与CRC32
|
|
||||||
- 校验失败重发机制,发送失败时可自动重连
|
|
||||||
|
|
||||||
- **modbus模式和命令模式自适应,用户直接进行通信即可**
|
|
||||||
|
|
||||||
- **RTU可直接做主控,摒弃MCU,降低软硬件开发成本**
|
|
||||||
- RTU可直接作为主控,省去MCU及其周边电路,降低硬件成本
|
|
||||||
|
|
||||||
![image_1fl87kl5c1f6p1t3c26ahga7951s.png-39.9kB][4]
|
|
||||||
|
|
||||||
- 使用Python开发,降低软件开发成本
|
|
||||||
|
|
||||||
![image_1fl8c92841mic1r8d1r0h177i8qs2m.png-13.5kB][5]
|
|
||||||
|
|
||||||
- 我司多平台模组适用,使用Python开发,无需修改代码即可快速切换至不同模组
|
|
||||||
|
|
||||||
- **业务功能扩充方便**
|
|
||||||
- 开放了GPIO、SPI、IIC、PWM等各种外设接口,方便外设扩充
|
|
||||||
|
|
||||||
- **强大的客户服务和技术支持能力**
|
|
||||||
|
|
||||||
## 3. 移远DTU的工作原理
|
|
||||||
|
|
||||||
### 3.1 命令模式
|
|
||||||
|
|
||||||
![image_1fl8lu3af1tgmgoruqeofq15qof1.png-139.4kB][6]
|
|
||||||
|
|
||||||
### 3.2 透传模式
|
|
||||||
|
|
||||||
![image_1fl8lh3nn1kmbullse416vq105nbu.png-92.6kB][7]
|
|
||||||
|
|
||||||
## 4. 附件链接
|
|
||||||
|
|
||||||
|
|
||||||
[1]: http://static.zybuluo.com/chenchi/pinotn6ajcibu0rgo122vvj0/image_1fl8ad0ct150a195i169m1hk2i3g33.png
|
|
||||||
[2]: http://static.zybuluo.com/chenchi/0312gv62wstwsh1mfgdz2g6m/image_1fl8bn24285j2a23qrvd5pcd29.png
|
|
||||||
[3]: http://static.zybuluo.com/chenchi/6vkjl7repti62n6eonpc3d55/image_1fl8i96dc1kheeb5109pb281mjs2j.png
|
|
||||||
[4]: http://static.zybuluo.com/chenchi/kovfl64tqfzp4alalml14rf9/image_1fl87kl5c1f6p1t3c26ahga7951s.png
|
|
||||||
[5]: http://static.zybuluo.com/chenchi/ucyn1otc6oj1yib97bz45loi/image_1fl8c92841mic1r8d1r0h177i8qs2m.png
|
|
||||||
[6]: http://static.zybuluo.com/chenchi/8h3rkym31o6hjdurnmtcuw26/image_1fl8lu3af1tgmgoruqeofq15qof1.png
|
|
||||||
[7]: http://static.zybuluo.com/chenchi/70f0is2vbkla2q5tgunykvl8/image_1fl8lh3nn1kmbullse416vq105nbu.png
|
|
@ -1,638 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
# **DTU上手说明_V1.0**
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 1.基本概述
|
|
||||||
|
|
||||||
本文档主要基于介绍DTU上手使用说明。
|
|
||||||
|
|
||||||
## 2.使用前准备
|
|
||||||
|
|
||||||
### 2.1 在NANO SIM卡座中插入SIM卡
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 2.2. 将天线插入至开发板背面标注为"LTE"的插座中,并用力压紧直到听到"啪"一声
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 2.3. 使用USB数据线连接开发板至电脑USB接口
|
|
||||||
### 2.4. 设备开机与QPYcom下载请点击以下连接查看说明
|
|
||||||
|
|
||||||
[QuecPython开发环境搭建](https://python.quectel.com/doc/doc/Quick_start/zh/QuecPythonStart/dev_env.html)
|
|
||||||
|
|
||||||
## 3. DTU固件、配置文件加载到开发板
|
|
||||||
|
|
||||||
### 3.1 打开代码库中的DTU文件夹,按需求编写配置文件
|
|
||||||
|
|
||||||
**配置文件格式与说明如下**
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"plate": 1, //是否在报文中添加IMEI
|
|
||||||
"password": "123", //设置密码
|
|
||||||
"conf": { //设置在线连接
|
|
||||||
"1": { //通道序号
|
|
||||||
//HTTP连接设置
|
|
||||||
"protocol": "http", //连接类型,固定为http
|
|
||||||
"method": "get", //请求方式
|
|
||||||
"url": "http://httpbin.org/get", //请求url
|
|
||||||
"reg_data": "", //附带的固定文本
|
|
||||||
"timeout": "", //超时
|
|
||||||
"serialID": 1 //捆绑的串口(1-2),需要为配置文件中uconf中存在的key
|
|
||||||
},
|
|
||||||
"2": {
|
|
||||||
//TCP&UDP连接设置
|
|
||||||
"protocol": "tcp", //连接类型,TCP填写”tcp”,UDP填写”udp”
|
|
||||||
"ping": "", //ping
|
|
||||||
"heartbeat": 30, //心跳时间
|
|
||||||
"url": "220.180.239.212", //请求url
|
|
||||||
"port": "8305", //端口
|
|
||||||
"keepAlive": 300, //保持连接时间
|
|
||||||
"serialID": 2 //捆绑串口,需要为配置文件中uconf中存在的key
|
|
||||||
},
|
|
||||||
"3": {
|
|
||||||
//mqtt连接设置
|
|
||||||
"protocol": "mqtt", //连接类型
|
|
||||||
"clientID": "test_mqtt", //客户端id
|
|
||||||
"keepAlive": "", //keep alive超时
|
|
||||||
"url": "mq.tongxinmao.com", //url
|
|
||||||
"port": "18830", //端口
|
|
||||||
"cleanSession": "0", //clean session
|
|
||||||
"subscribe": {"0": "/public/TEST/python"}, //订阅的主题(支持多个)
|
|
||||||
"publish": {"0": "/public/TEST/python"}, //发布的主题(支持多个)
|
|
||||||
"qos": "0", //QoS
|
|
||||||
"retain": "1", //是否使用内部重连
|
|
||||||
"serialID": "1" //捆绑的串口
|
|
||||||
},
|
|
||||||
"4": {
|
|
||||||
//阿里云连接设置
|
|
||||||
"protocol": "aliyun", //连接类型
|
|
||||||
"type": "mos", //一机一密/一型一密设置
|
|
||||||
"keepAlive": "", // keep alive超时
|
|
||||||
"clientID": " test_mos ", //客户端id
|
|
||||||
"Devicename": " light01", //设备名称
|
|
||||||
"ProductKey": " a1QNbCDxIWM ", //product key
|
|
||||||
"DeviceSecret": "0bceb8010ade0df2e6989982e63f7601", //device secret
|
|
||||||
"ProductSecret": "", //product secret
|
|
||||||
"cleanSession": "0", //clean session
|
|
||||||
"qos": "1", //QoS
|
|
||||||
"subscribe": {"0": "/a1QNbCDxIWM/light01/user/get"}, //订阅的主题(支持多个)
|
|
||||||
"publish": {"0": "/a1QNbCDxIWM/light01/user/update"}, //发布的主题(支持多个)
|
|
||||||
"serialID": "1" //捆绑的串口
|
|
||||||
},
|
|
||||||
"5": {
|
|
||||||
//腾讯云设置
|
|
||||||
"protocol": "txyun",
|
|
||||||
"type": "mos",
|
|
||||||
"keepAlive": "",
|
|
||||||
"clientID": "test_tx_mos",
|
|
||||||
"Devicename": "Smart_test01",
|
|
||||||
"ProductKey": "H7MBLRYXN9",
|
|
||||||
"DeviceSecret": "89c7tXT3s3grZTr/YFjxSg==",
|
|
||||||
"ProductSecret": "",
|
|
||||||
"cleanSession": "0",
|
|
||||||
"qos": "1",
|
|
||||||
"subscribe": {"0": "H7MBLRYXN9/Smart_test01/control"},
|
|
||||||
"publish": {"0": "H7MBLRYXN9/Smart_test01/event"},
|
|
||||||
"serialID": "1"
|
|
||||||
},
|
|
||||||
"6": {
|
|
||||||
//移远云设置
|
|
||||||
"protocol": "quecthing", //连接类型
|
|
||||||
"keepAlive": "", //心跳时间
|
|
||||||
"ProductKey": "p1118c", //product key
|
|
||||||
"ProductSecret": "c3Jzd3ZaNzVrV2Vj", //product secret
|
|
||||||
"qos": "1", //qos
|
|
||||||
"SessionFlag": false, //是否采用session加密
|
|
||||||
"sendMode": "phy", //发送模式
|
|
||||||
"serialID": "1" //捆绑的串口
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"reg": 1, //发送登陆消息
|
|
||||||
"convert": 0,
|
|
||||||
"version": 100, //固件版本
|
|
||||||
"nolog": 0, //是否输出log
|
|
||||||
"message": {}, //协议短信透传
|
|
||||||
"uconf": { //串口设置
|
|
||||||
"1": { //key为UART编号,使用UART0填入:“0”,使用UART1则填入“1”,以此类推;同时,
|
|
||||||
//该值同时在通道配置的serialID项中使用
|
|
||||||
"baudrate": "115200",
|
|
||||||
"databits": "8",
|
|
||||||
"parity": "0",
|
|
||||||
"stopbits": "1",
|
|
||||||
"flowctl": "0"
|
|
||||||
},
|
|
||||||
"2": {
|
|
||||||
"baudrate": "115200",
|
|
||||||
"databits": "8",
|
|
||||||
"parity": "0",
|
|
||||||
"stopbits": "1",
|
|
||||||
"flowctl": "0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fota": 1, //是否启用fota
|
|
||||||
"pins": [ //启用的pio
|
|
||||||
"pio1",
|
|
||||||
"pio2",
|
|
||||||
"pio3"
|
|
||||||
],
|
|
||||||
"direction_pin": {}, //需要控制的方向的GPIO与默认方向
|
|
||||||
"apn": [ //APN设置
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
""
|
|
||||||
],
|
|
||||||
"service_acquire": 0, //是否开启服务器获取参数
|
|
||||||
"work_mode": "command", //工作模式
|
|
||||||
"auto_connect": 1, //自动连接
|
|
||||||
"offline_storage": false //离线存储
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
配置文件中"serialID"字段配置说明:
|
|
||||||
|
|
||||||
conf通道配置中的“serialID”字段为捆绑的UART口编号,serialID中的数值必须是uconf串口配置中已经配置的UART口编号
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
按需求编写配置文件后将配置文件保存为"dtu_config.json",并保存至DTU代码库中的"dtu"文件夹内
|
|
||||||
|
|
||||||
**注:json文件保存前需要移除注释**
|
|
||||||
|
|
||||||
### 3.2 下载代码到设备
|
|
||||||
|
|
||||||
#### 3.2.1 接上数据线,连接至电脑,短按开发板上的"PWK"按键启动设备,并在QPYcom上选择MI05接口连接
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 3.2.2 切换到下载选项卡,点击创建项目,并输入任意项目名称
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 3.2.3 将代码包"dtu"文件夹内所有文件拖入此框内,并应包含图示文件
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 3.2.4 单击箭头,选择"下载脚本",并等待下载完成
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 3.2.5 切换至"文件"选项卡,在右边选中"dtu\_handler.py",点击运行按钮,即可开始dtu调试运行,如果需要上电自动运行,只需要将"dtu\_handler.py"更名为"main.py"即可实现上电自动运行
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## 4. 重启开发板
|
|
||||||
|
|
||||||
上面的步骤完成之后,选择USB MI05 COM Port(老版本是USB串行设备),打开串口。
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
DTU运行成功,下面为读取的配置文件。
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## 5 .报文格式
|
|
||||||
|
|
||||||
### 5.1 命令模式/modbus模式
|
|
||||||
|
|
||||||
支持多通道透传,通过配置文件中的serialID字段可以对通道与串口进行绑定,每个串口均支持绑定多个通道。在发送数据时需要传入通道id,DTU会向指定的通道发送数据。
|
|
||||||
|
|
||||||
在命令模式与modbus模式下,接受到的报文会先进行命令解析,如果解析失败才会向串口传输数据。
|
|
||||||
|
|
||||||
#### 5.1.1 HTTP/TCP/UDP
|
|
||||||
|
|
||||||
- 上行数据报文格式:
|
|
||||||
|
|
||||||
`"<channel_id>,<msg_len>"[,"<crc32>",”<msg_data>”]`
|
|
||||||
|
|
||||||
- 下行数据报文格式:
|
|
||||||
|
|
||||||
`"<channel_id>,<msg_len>"[,"<crc32>",”<msg_data>”]`
|
|
||||||
|
|
||||||
- 字段说明:
|
|
||||||
|
|
||||||
channel_id:通道id,配置文件中通道id
|
|
||||||
|
|
||||||
msg_len:消息体长度,字符串格式,可以为0
|
|
||||||
|
|
||||||
crc32:消息数据crc32校验码,当msg_len为0时,此项可省略
|
|
||||||
|
|
||||||
msg_data:消息体,当msg_len为0时,此项可省略
|
|
||||||
|
|
||||||
**示例报文:**
|
|
||||||
|
|
||||||
- 上行报文:
|
|
||||||
|
|
||||||
`“1,6,1398235801,abcedf”` (msg_len不为0)
|
|
||||||
|
|
||||||
`“1,0”` (msg_len为0)
|
|
||||||
|
|
||||||
- 下行报文:
|
|
||||||
|
|
||||||
`“1,6,2584251182,ijklmn”`
|
|
||||||
|
|
||||||
#### 5.1.2 MQTT/Aliyun/Txyun
|
|
||||||
|
|
||||||
- 上行数据报文格式:
|
|
||||||
|
|
||||||
`"<channel_id>,<topic_id>,<msg_len>","<crc32>",<msg_data>"`
|
|
||||||
|
|
||||||
- 下行数据报文格式:
|
|
||||||
|
|
||||||
`"<channel_id>,<topic_id>,<msg_len>","<crc32>",<msg_data>"`
|
|
||||||
|
|
||||||
- 字段说明:
|
|
||||||
|
|
||||||
channel_id:通道id,配置文件中通道id
|
|
||||||
|
|
||||||
topic_id:mqtt通道topic_id,上行为publish topic id,下行为subscribe topic id
|
|
||||||
|
|
||||||
msg_len:消息体长度,字符串格式,可以为0
|
|
||||||
|
|
||||||
crc32:消息数据crc32校验码,当msg_len为0时此项也不可省略
|
|
||||||
|
|
||||||
msg_data:消息体,当msg_len为0时此项也不可省略
|
|
||||||
|
|
||||||
**示例报文:**
|
|
||||||
|
|
||||||
- 上行报文:
|
|
||||||
|
|
||||||
`“1,1,6,1398235801,abcedf”`
|
|
||||||
|
|
||||||
- 下行报文:
|
|
||||||
|
|
||||||
`“1,1,6,2584251182,ijklmn”`
|
|
||||||
|
|
||||||
#### 5.1.3 quecthing
|
|
||||||
|
|
||||||
- 上行数据报文格式:
|
|
||||||
|
|
||||||
`"<channel_id>,<pkgid>,<msg_len>","<crc32>",<msg_data>"`
|
|
||||||
|
|
||||||
- 下行数据报文格式:
|
|
||||||
|
|
||||||
`"<channel_id>,<pkgid>,<msg_len>","<crc32>",<msg_data>"`
|
|
||||||
|
|
||||||
- 字段说明:
|
|
||||||
|
|
||||||
channel_id:通道id,配置文件中通道id
|
|
||||||
|
|
||||||
pkgid:quecthing物模型pkgid,透传模式上行、下行报文与物模型上行非应答报文时该字段固定值为0
|
|
||||||
|
|
||||||
msg_len:消息体长度,字符串格式,可以为0
|
|
||||||
|
|
||||||
crc32:消息数据crc32校验码,当msg_len为0时此项也不可省略
|
|
||||||
|
|
||||||
msg_data:消息体,当msg_len为0时此项也不可省略
|
|
||||||
|
|
||||||
**示例报文:**
|
|
||||||
|
|
||||||
- 上行报文:
|
|
||||||
|
|
||||||
`“1,0,6,1398235801,abcedf”` (透传&物模型非应答)
|
|
||||||
|
|
||||||
`“1,16929,6,1398235801,abcedf”` (物模型应答)
|
|
||||||
|
|
||||||
- 下行报文:
|
|
||||||
|
|
||||||
`“1,0,6,2584251182,ijklmn”` (透传报文)
|
|
||||||
|
|
||||||
`“1,16930,6,2584251182,ijklmn”` (物模型报文)
|
|
||||||
|
|
||||||
#### 5.1.4 从串口执行控制命令
|
|
||||||
|
|
||||||
- 上行命令报文格式:
|
|
||||||
|
|
||||||
`"<identify>,<msg_len>","<crc32>",<msg_data>"`
|
|
||||||
|
|
||||||
- 下行命令报文格式:
|
|
||||||
|
|
||||||
`"<msg_len>","<crc32>",<msg_data>"`
|
|
||||||
|
|
||||||
- 字段说明:
|
|
||||||
|
|
||||||
identify: 串口控制命令识别码,固定值为"99"
|
|
||||||
|
|
||||||
msg_len:消息体长度,字符串格式,可以为0
|
|
||||||
|
|
||||||
crc32:消息数据crc32校验码,当msg_len为0时此项也不可省略
|
|
||||||
|
|
||||||
msg_data:消息体,当msg_len为0时此项也不可省略
|
|
||||||
|
|
||||||
- 上行报文:
|
|
||||||
|
|
||||||
`“99,6,1398235801,abcedf”`
|
|
||||||
|
|
||||||
- 下行报文:
|
|
||||||
|
|
||||||
`“99,6,2584251182,ijklmn”`
|
|
||||||
|
|
||||||
|
|
||||||
### 5.2 **透传模式**
|
|
||||||
|
|
||||||
支持MQTT/TCP/UDP/HTTP双通道透传(串口1&串口2),透传模式每个串口仅支持绑定一个通道,可在配置文件中配置serialID对通道和串口进行绑定。透传模式如果串口配置了多个通道,只会选择第一个通道配置,后面的配置都会被忽略。
|
|
||||||
|
|
||||||
透传模式传输时无需在数据格式上传入channel\_id,DTU会自动向串口绑定通道发送数据。
|
|
||||||
|
|
||||||
|
|
||||||
#### 5.2.1 HTTP/TCP/UDP
|
|
||||||
|
|
||||||
- 上行数据报文格式:
|
|
||||||
|
|
||||||
`"<msg_len>"[,"<crc32>",”<msg_data>”]"`
|
|
||||||
|
|
||||||
- 下行数据报文格式:
|
|
||||||
|
|
||||||
`"<msg_len>"[,"<crc32>",”<msg_data>”]"`
|
|
||||||
|
|
||||||
- 字段说明:
|
|
||||||
|
|
||||||
msg_len:消息体长度,字符串格式,可以为0
|
|
||||||
|
|
||||||
crc32:消息数据crc32校验码,当msg_len为0时,此项可省略
|
|
||||||
|
|
||||||
msg_data:消息体,当msg_len为0时,此项可省略
|
|
||||||
|
|
||||||
**示例报文:**
|
|
||||||
|
|
||||||
- 发送报文:
|
|
||||||
|
|
||||||
`“6,1398235801,abcedf”` (msg_len不为0)
|
|
||||||
|
|
||||||
`“0”` (msg_len为0)
|
|
||||||
|
|
||||||
- 返回报文:
|
|
||||||
|
|
||||||
`“6,2584251182,ijklmn”`
|
|
||||||
|
|
||||||
#### 5.2.2 MQTT/Aliyun/Txyun
|
|
||||||
|
|
||||||
- 上行数据报文格式:
|
|
||||||
|
|
||||||
`<topic_id>,<msg_len>,<crc32>,<msg_data>`
|
|
||||||
|
|
||||||
- 下行数据报文格式:
|
|
||||||
|
|
||||||
`<topic_id>,<msg_len>,<crc32>,<msg_data>`
|
|
||||||
|
|
||||||
- 字段说明:
|
|
||||||
|
|
||||||
topic_id:mqtt通道topic_id,上行为publish topic id,下行为subscribe topic id
|
|
||||||
|
|
||||||
msg_len:消息体长度,字符串格式,可以为0
|
|
||||||
|
|
||||||
crc32:消息数据crc32校验码,当msg_len为0时此项也不可省略
|
|
||||||
|
|
||||||
msg_data:消息体,当msg_len为0时此项也不可省略
|
|
||||||
|
|
||||||
**示例报文:**
|
|
||||||
|
|
||||||
- 发送报文:
|
|
||||||
|
|
||||||
`“6,1398235801,abcedf”`
|
|
||||||
|
|
||||||
- 返回报文:
|
|
||||||
|
|
||||||
`“6,2584251182,ijklmn”`
|
|
||||||
|
|
||||||
#### 5.2.3 quecthing
|
|
||||||
|
|
||||||
- 上行数据报文格式:
|
|
||||||
|
|
||||||
`"<pkgid>,<msg_len>","<crc32>",<msg_data>"`
|
|
||||||
|
|
||||||
- 下行数据报文格式:
|
|
||||||
|
|
||||||
`"<pkgid>,<msg_len>","<crc32>",<msg_data>"`
|
|
||||||
|
|
||||||
- 字段说明:
|
|
||||||
|
|
||||||
pkgid:quecthing物模型pkgid,透传模式上行、下行报文与物模型上行非应答报文时该字段固定值为0
|
|
||||||
|
|
||||||
msg_len:消息体长度,字符串格式,可以为0
|
|
||||||
|
|
||||||
crc32:消息数据crc32校验码,当msg_len为0时此项也不可省略
|
|
||||||
|
|
||||||
msg_data:消息体,当msg_len为0时此项也不可省略
|
|
||||||
|
|
||||||
**示例报文:**
|
|
||||||
|
|
||||||
- 上行报文:
|
|
||||||
|
|
||||||
`“0,6,1398235801,abcedf”` (透传&物模型非应答)
|
|
||||||
|
|
||||||
`“16929,6,1398235801,abcedf”` (物模型应答)
|
|
||||||
|
|
||||||
- 下行报文:
|
|
||||||
|
|
||||||
`“0,6,2584251182,ijklmn”` (透传报文)
|
|
||||||
|
|
||||||
`“16930,6,2584251182,ijklmn”` (物模型报文)
|
|
||||||
|
|
||||||
### 5.3 与云端通信报文
|
|
||||||
|
|
||||||
DTU与云端通信报文使用json格式
|
|
||||||
|
|
||||||
#### 5.3.1 云端下行报文
|
|
||||||
|
|
||||||
- 命令模式与modbus模式:
|
|
||||||
|
|
||||||
`{“msg_id”: msg_id, “data”: “1234”[, “cmd_code”: 0X40, “topic_id”: 1]}`
|
|
||||||
|
|
||||||
- 透传模式:
|
|
||||||
|
|
||||||
`{“msg_id”: msg_id, “data”: “1234”}`
|
|
||||||
|
|
||||||
- 字段说明:
|
|
||||||
|
|
||||||
msg_id:报文id,一般为时间戳+3位随机数
|
|
||||||
|
|
||||||
data:报文消息字段
|
|
||||||
|
|
||||||
cmd_code:可选字段,填写对应功能码,并又DTU执行相应的操作,此字段仅在命令模式下生效
|
|
||||||
|
|
||||||
topic_id:可选字段,填写mqtt返回需要publish的topic\_id,此字段仅在命令模式与使用MQTT/Aliyun/Txyun时生效
|
|
||||||
|
|
||||||
#### 5.3.2 云端上行报文
|
|
||||||
|
|
||||||
- 命令模式与modbus模式:
|
|
||||||
|
|
||||||
`{“msg_id”: msg_id, “data”: “1234”[, “cmd_code”: 0X40, “status”: 1]}`
|
|
||||||
|
|
||||||
- 透传模式:
|
|
||||||
|
|
||||||
`{“msg_id”: msg_id, “data”: “1234”}`
|
|
||||||
|
|
||||||
- 字段说明:
|
|
||||||
|
|
||||||
msg_id:报文id,一般为时间戳+3位随机数,回复报文会使用相同的msg\_id
|
|
||||||
|
|
||||||
data:报文消息字段
|
|
||||||
|
|
||||||
cmd_code:可选字段,填写对应功能码,并又DTU执行相应的操作,此字段仅在命令模式下生效
|
|
||||||
|
|
||||||
status:可选字段,仅在命令模式下生效,用于反馈命令是否执行成功
|
|
||||||
|
|
||||||
## 6阿里云MQTT案例说明
|
|
||||||
|
|
||||||
### 6.1 连接设备
|
|
||||||
|
|
||||||
本案例使用EC600N开发板与CP2102 USB to TTL模块进行调试
|
|
||||||
|
|
||||||
使用3根杜邦线分别连接CP2102的TX,RX和GND针脚
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
将CP2102的TX引出线连接至EC600N开发板的RX0针脚(编号7),将CP2102的RX引出线连接至开发板的TX0针脚(编号6),将CP2101的GND引出线连接至开发板的GND针脚(编号1)
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
将开发板与CP2102分别连接至电脑的USB口,开发板按下PWK按键开机
|
|
||||||
|
|
||||||
### 6.2 获得阿里云连接参数
|
|
||||||
|
|
||||||
用户需要在阿里云上注册账户,新建项目,注册设备名称并获得以下参数
|
|
||||||
|
|
||||||
设备名称(Devicename)
|
|
||||||
|
|
||||||
产品秘钥(ProductKey)
|
|
||||||
|
|
||||||
设备秘钥(DeviceSecret):使用一机一密认证时需要提供的参数,使用一型一密时不存在此参数
|
|
||||||
|
|
||||||
产品秘钥(ProductSecret):使用一型一密认证时需要提供的参数,使用一机一密时不存在此参数
|
|
||||||
|
|
||||||
获得阿里云pk/ps
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
获得DeviceName
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 6.3 编写配置文件
|
|
||||||
|
|
||||||
编写配置文件,并将其命名为dtu_config.json
|
|
||||||
|
|
||||||
配置文件包含信息如下:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"plate": 1,
|
|
||||||
"password": "123",
|
|
||||||
"conf": {
|
|
||||||
"1": {
|
|
||||||
"protocol": "aliyun",
|
|
||||||
"type": "mos",
|
|
||||||
"keepAlive": "",
|
|
||||||
"clientID": "0",
|
|
||||||
"Devicename": " ec600n",
|
|
||||||
"ProductKey": " gbh26bFEA4M",
|
|
||||||
"DeviceSecret": " b7ff5acc0671d40adfd0eff57e7605f6",
|
|
||||||
"ProductSecret": "",
|
|
||||||
"cleanSession": true,
|
|
||||||
"qos": "1",
|
|
||||||
"subscribe": {"0": " /gbh26bFEA4M/ec600n/user/subtest"},
|
|
||||||
"publish": {"0": " /gbh26bFEA4M/ec600n/user/pubtest"},
|
|
||||||
"serialID": "0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"reg": 0,
|
|
||||||
"convert": 0,
|
|
||||||
"version": 100,
|
|
||||||
"nolog": 0,
|
|
||||||
"message": {},
|
|
||||||
"uconf": {
|
|
||||||
"0": {
|
|
||||||
"baudrate": "115200",
|
|
||||||
"databits": "8",
|
|
||||||
"parity": "0",
|
|
||||||
"stopbits": "1",
|
|
||||||
"flowctl": "0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fota": 1,
|
|
||||||
"pins": [
|
|
||||||
"pio1",
|
|
||||||
"pio2",
|
|
||||||
"pio3"
|
|
||||||
],
|
|
||||||
"direction_pin": {},
|
|
||||||
"apn": [
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
""
|
|
||||||
],
|
|
||||||
"service_acquire": 0,
|
|
||||||
"work_mode": "through",
|
|
||||||
"auto_connect": 1,
|
|
||||||
"offline_storage": false
|
|
||||||
}
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### 6.4 烧录代码
|
|
||||||
|
|
||||||
#### 6.4.1 连接开发板至电脑,开机,打开QPYCom,选择Qutctel USB MI05 Port端口,并点击连接
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 6.4.2 切换到下载选项卡,点击"创建项目",输入项目名称,并点击"确定"
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 6.4.3 将dtu文件夹内所有内容拖入"用户脚本/文件"框内
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 6.4.4 点击"下载脚本"
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 6.5 运行
|
|
||||||
|
|
||||||
#### 6.5.1 切换至"文件"选项卡,选中"dtu_handler.py",并点击运行
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 6.6 运行结果输出
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 6.7 向云端发送消息
|
|
||||||
|
|
||||||
#### 6.7.1 打开串口调试工具,选择CP210X USB to UART 连接至CP2102转换板,并打开串口
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 6.7.2 在uart调试工具中按指定格式传入topic_id, msg_length, crc32值, 需要发送的数据,并点击"send";
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 6.7.3 DTU收到数据,并发送至云端
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 6.7.4 云端接收到的消息
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 6.8 云端向设备发送信息
|
|
||||||
|
|
||||||
#### 6.8.1 在阿里云topic列表中向自定义topic发送消息
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 6.8.2 DTU成功收到消息并向串口透传数据
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 6.8.3 串口收到透传消息
|
|
||||||
|
|
||||||

|
|
BIN
docs/md/img.png
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 139 KiB |
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 141 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
BIN
docs/media/QPYCom_V1.8.png
Normal file
After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 84 KiB |
BIN
docs/media/aptu_01.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
docs/media/aptu_02.png
Normal file
After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 2.4 MiB After Width: | Height: | Size: 2.4 MiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
BIN
docs/media/gui_rtu.png
Normal file
After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 914 B After Width: | Height: | Size: 914 B |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 360 KiB After Width: | Height: | Size: 360 KiB |
Before Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 21 KiB |