中文 | English
SimpleDTU是一款简单的数据传输单元,支持TCP和MQTT数据纯透传。
本文档旨在指导用户如何基于我司的QuecPython开发板进行SimpleDTU功能开发。
| 功能 | 备注 |
|---|---|
| TCP透传 | 单连接透传 |
| MQTT透传 | 单主题透传 |
| 参数配置 | —— |
硬件准备:
- 一块开发板 (
QuecPython_EC2X_EVB或者Open EVB) - USB 数据线 (USB-A TO USB-C)
- PC (Windows7 & Windows10 & Windows11)
软件准备:
- 下载安装 USB驱动,用于开发调试QuecPython模组
- 下载**调试工具QPYcom ** —— QuecPython全栈式开发调试工具
- 串口调试工具QCOM —— 用于模拟MCU。
- 获取下载 QuecPython 固件和相关软件资源
- 安装Python语言的 文本编辑器,例如 VSCode、Pycharm
驱动、工具、固件等资源下载请访问:https://python.quectel.com/download
采用Open EVB开发板搭载EC600N-CN-TEA模组。
注意事项:
- 在SIM卡座中插入SIM卡。
- 接入天线。
- 使用USB数据线连接开发板至电脑USB接口。
- 通过TTL转USB模块连接串口至PC。
采用搭载了EC200U模组的QuecPython_EC2X_EVB_V2.0开发板(EC2X开发板介绍:https://python.quectel.com/doc/Quick_start/zh/EC2X_BOARD.html)。
使用type-c给模块供电,UART与TTL转USB模块的连接 ,如下图(仅供参考)。
| 开发板上的PIN脚 | TTL转USB模块 | 图中线的颜色 |
|---|---|---|
| J7的13脚(TX) | RX | 红线 |
| J7的14脚(RX) | TX | 橙线 |
| J7的3脚(GND) | GND | 黄线 |
注意事项:
- 在SIM卡座中插入SIM卡。
- 接入天线。
- 使用USB数据线连接开发板至电脑USB接口。
- 通过TTL转USB模块连接串口至PC。
本实验项目代码仓库:https://github.com/QuecPython/SimpleDTU。
DTU配置文件路径:code/dtu_config.json。
本实验案例,基于mqtt私有云做如下配置:
参数说明:
system_config.config: 指定当前使用的私有云类型。目前支持tcp和mqtt。
mqtt_private_cloud_config: MQTT私有云配置。
socket_private_cloud_config: tcp私有云配置。
uart_config:串口参数配置。
启动QPYcom调试工具,按如下方式操作。
操作步骤:
- 接上数据线,连接至电脑。
- 短按开发板上的PWRKEY按键启动设备。
- 选择并打开串口。
EC600N模组选择Quectel USB MI05 COM Port串口连接。EC200U模组选择Quectel USB NMEA Port串口连接。
- 选择
下载标签页,新建项目(名称自定义),在右侧/usr目录下右键选择一键导入后选择code目录即可一键导入应用脚本代码。
运行main2.py启动DTU服务。
注意:如果将
main2.py命名为main.py,则模组上电后会自动执行该脚本运行服务。
操作步骤:
- 选择
文件标签页。 - 选中
main2.py应用主脚本。 - 在主脚本右键下拉菜单选择
运行或者点击上方运行快捷按钮,即可运行。
DTU服务中有2个线程处理数据,一个是用于检测读取串口数据并转发数据给云端,一个是检测云端下行数据透传给串口,如下图所示。
使用QCOM串口调试工具模拟数据透传。
使用串口调试工具模拟mcu给模组发送上行数据。
- 在
Input String输入框中输入hello world!字符串。 - 点击
Send Command按钮通过串口发送数据。
QpyCom日志输出。
- DTU接收串口数据,直接透传。
云端接收上行数据日志。
云端发送下行数据。
- 设置云端下行数据主题(与DTU应用配置的订阅主题一致)。
- 输入下行数据。
- 发布。
DTU下行数据日志。
使用串口调试工具模拟mcu接收模组下行数据。
SimpleDTU是一款简单的数据传输单元,目前支持TCP和MQTT数据纯透传模式。DTU应用有2个核心线程:上行数据处理线程、下行数据处理线程,应用与云端对象之间数据交换采用队列方式解耦。
流程描述:
- 读取配置文件:
code/dtu_config.json。- 打开串口: 根据配置文件中的
uart_confg配置参数项打开串口。- 检查注网:如失败则间隔20s重新检查直至成功。
- 检查拨号:如失败建间隔20s重新拨号直至成功。
- 连接云端:云端在接收到下行消息后会将消息放入一个队列中,待后续业务线程从队列中读取消息。
- 启动业务线程。
- 上行数据处理线程:监听并读取mcu通过串口发送的上行数据,并发送给云端。
- 下行数据处理线程:监听并读取云端队列下行数据,通过串口发送给mcu。
- code
- common.py 通用工具
- dtu.py DTU应用类实现
- dtu_config.json 模板配置文件
- error.py 错误码及描述
- logging.py 日志
- main2.py 应用主脚本(demo)
- mqttIot.py mqtt客户端实现
- serial.py 串口读写实现
- settings.py 配置文件读写实现
- socketIot.py tcp客户端实现新建应用主脚本,如main2.py。
导入usr.dtu.DTU以及usr.settings.ConfigureHandler。
使用ConfigureHandler构建配置对象(配置文件模板参阅dtu_config.json),并作为DTU对象的初始化参数,构建DTU对象。再通过DTU对象的run方法,运行实例。
建议编写一个工厂函数来构造DTU应用对象,如下:
from usr.dtu import DTU
from usr.settings import ConfigureHandler
def create_app(config_path):
config = ConfigureHandler(config_path)
dtu = DTU(config)
return dtu
app = create_app('/usr/dtu_config.json')
if __name__ == '__main__':
app.run()将main2.py在内的所有脚本下载进模组并启动应用主脚本即可(参阅第四章:四、应用指导)。
如果应用异常,如网络连接中断导致的云端读写错误,会给mcu返回错误信息(json格式),如:{"code": 1, "desc": "connect error."}。详细定义见error.py模块。
| 错误码 | 描述 |
|---|---|
| 0x01 | connect error. |
| 0x02 | subscribe error. |
| 0x03 | listen error. |
| 0x04 | publish error. |
| 0x05 | network status error. |
| 0x06 | set socket option error. |
| 0x07 | tcp send data error. |
| 文档描述 | 链接 |
|---|---|
| QuecPython官网wiki(包含各种api供开发使用) | https://python.quectel.com/doc/API_reference/zh/index.html |
| QuecPython入门开发教程 | https://python.quectel.com/doc/Quick_start/zh/index.html |
| 资源下载(固件、工具、驱动等) | https://python.quectel.com/download |
| DTU产品介绍 | https://python.quectel.com/doc/Product_case/zh/dtu/DTU_Product_Introduction.html |
| EC2X开发板介绍 | https://python.quectel.com/doc/Quick_start/zh/EC2X_BOARD.html |
| EC200U-CN模组介绍 | https://python.quectel.com/products/ec200u-cn |
1、串口通信问题。
Q: 通过TTL转USB模块连接串口至PC后,QCOM串口调试工具无法接收、发送数据。
A: 通常可以采用如下方式检查:
- 检查QCOM是否选择正确的端口打开。
- 检查接线是否正确,模组RX接TTL转USB设备的TX,模组TX接TTL转USB设备的RX。
- 应用代码配置的QuecPython串口编号选择是否正确。参阅:
https://python.quectel.com/doc/API_reference/zh/peripherals/machine.UART.html中针对不同的模组,开放的UART列表 。
2、网络问题
Q: 连接网络异常。
A:可以通过
checkNet的waitNetworkReady函数返回值判定,返回值代表含义详情参阅:https://python.quectel.com/doc/API_reference/zh/iotlib/checkNet.html
3、MQTT连接异常
Q: MQTT连接成功后反复重连。
A: 如果存在多个相同id的客户端同时连接,那么服务端会踢掉之前的连接。检查是否存在使用相同客户id连接的情况。
Q: MQTT连接成功但过一段时间就会被服务器踢下线。
A: 检查客户端是否有心跳。不同服务供应商对心跳时间有一定要求,具体根据服务供应商的文档描述设置。












