智能定位器解决方案
方案介绍
本文档主要描述移远通信QuecPython定位器的设计框架, 包含软硬件系统框架、关键组件功能描述、系统初始化流程和业务流程的介绍以及功能示例, 方便用户快速了解QuecPython定位器的整体架构与功能。
产品概述
- Tracker智能定位器。
- 终端设备功能涵盖绝大部分定位器应用场景
- 可视化运营平台+手机APP, 设备管理和数据查看更方便
产品功能
- 多重定位、安全围栏、危险报警、紧急求救、语音监听、录音、轨迹回放、远程控制等
- 智能定位
- 系统利用4G通信/多重定位/分布式服务等技术, 为智能定位器行业提供从端到服务的一站式解决方案
- 全平台支持
- 设备运营平台和手机APP功能齐全, 终端设备厂商无需自行搭建服务平台即可快速实现对设备和终端用户的管理
- 可靠稳定
- 终端设备定位精度高、危险感知灵敏度高、功耗低、运行稳定, 终端设备厂商可套壳即用, 极大缩短硬件开发周期
产品特点
- 位置信息、危险警情智能感知、识别和上报
- 支持阿里Iot平台、ThingsBoard、私有服务等多种Iot平台对接
- QuecPython二次开发, 模块化、定制化、缩短开发周期
- 可视化运营平台、手机APP控制终端
应用行业
- 车载定位
- 物流货运
- 人员定位
- 电子学生证
- 宠物定位
- 特殊行业(农业灌溉, 稀有物种监控等)
应用框架
功能简介
智能定位器方案中的软件功能介绍如下图所示, 方案根据定位器实际业务进行功能拆分, 模块化开发实现。
- 传输协议解析
- 阿里Iot平台连接与数据交互
- ThingsBoard平台连接与数据交互
- GT06协议
- JT/T808协议
- 网络管理
- MQTT协议(阿里Iot/ThingsBoard/其他平台)
- TCP/UDP协议(GT06/JTT808协议)
- APN设置(用于注网拨号)
- LTE NET(4G注网拨号)
- 外设管理
- GNSS定位数据的读取, 使能, AGPS注入等
- G-Sensor传感器数据读取
- Charge IC充电管理, 获取设备充电状态
- Battery电池管理, 读取电池电压, 换算电量
- LED指示灯
- 数据存储
- 系统配置参数存储
- 定位数据补传存储
- AGPS下载存储
- 日志信息存储
- 设备升级
- OTA升级
- 业务功能管理
- 网络与IoT 平台的连接与重连
- 设备数据采集与上报
- 报警检测与上报
- IoT 平台下行指令处理
- 设备低功耗休眠
数据交互流程
模组、IoT 平台之间数据交互流程如下图介绍:
流程描述:
- 手机APP发送指令到IoT 平台, 服务端通过TCP/UDP/MQTT协议下发指令数据到模组端接收, 模组进行解析处理;
- 模组通过TCP/UDP/MQTT协议上报数据到IoT 平台, IoT 平台进行处理, 同步显示到手机端
设计思想与模式
- 本系统采用监听者模式设计, 通过回调函数进行消息的传递事件的监听
- 软件根据定位器业务需求对其功能进行拆分, 主要分模块来实现, 每个部分独立开发实现, 相互之间减少依赖, 可独立调试运行, 达到解耦合的效果;
- 功能之间的事件交互都通过回调函数来完成, 所有的业务功能处理全部在
Tracker
类中进行处理, 如下行的指令处理, 报警检测, 数据采集与上报, 设备的控制等。
- 所有的功能模块通过
Tracker.add_module
注册到Tracker
类中进行控制 - Server模块(IoT 平台交互模块)通过回调将服务型下行的数据传递到
Tracker.server_callback
中进行处理 - NetManage模块通过回调将网络断开连接事件传递到
Tracker.net_callback
中进行处理
软件架构图
软件系统框架介绍描述如下:
- 展现层, 对接不同的 Iot 平台, 进行可视化展示
- 传输层, 支持使用不同的协议进行交互
- 业务功层, 主要用于采集设备数据, 控制设备模块, 接收处理IoT 平台下行指令, 数据的整合上报
- 设备层, 主要为设备数据的信息的采集与设备功能设置, 主要是定位数据的获取与解析, 传感器数据的读取, 电池管理, 历史数据存储, 外设控制, 设备的基础数据, 如设备的版本信息, IMEI号, APN设置, 网络拨号, 设备低功耗等
业务流程
业务流程说明:
- 设备上电启动
- 网络(APN)配置与(驻网拨号)连接, IoT 平台配置与连接, 失败重试
- 设备模块启动检测与数据采集
- GNSS定位模块启动, 等待定位数据
- G-Sensor三轴加速传感器模块启动与校准检测
- LED指示灯(网络状态/定位状态/充电状态等)启动
- 电池电量采集与充电状态检测
- 报警检测(超速检测/震动检测/围栏检测/低电检测等)
- IoT 平台连接成功后, 检测是否有历史数据需要上报进行上报
- IoT 平台连接成功, 上报当前设备信息(定位/告警)
- IoT 平台连接失败则存储当前设备信息(定位/告警)
- 设备无任务, 进入低功耗模式, 定时唤醒设备进行设备信息检测与上报
- IoT 平台连接成功后, 等待IoT 平台下发指令信息
- 指令信息的解析
- 设备控制指令, 如修改设备业务参数, 控制设备关机重启等
- 下发OTA升级指令, 进行OTA升级
- 设备信息查询指令, 应答设备信息
系统初始化流程
- 基础功能模块初始化, 低功耗管理, 配置参数, 电池, 历史文件, 定位, 传感器。
- 初始化IoT 平台客户端模块, 阿里Iot或ThingsBoard平台或私有服务平台(GT06、JT/T808等)
- 初始化核心业务模块(Tracker), 将各个功能模块通过add_module接口添加到Tracker对象中, 再将Tracker.server_callback注册到Server对象中, 用于接收服务端下行的消息指令。
应用开发
方案资源获取
定位器解决方案资源下载地址: https://github.com/QuecPython/solution-tracker
该方案项目有一个
modules
子仓库, 在下载时需要注意同步下载子仓库同步下载指令
git clone --recursive https://github.com/QuecPython/solution-tracker.git
资源包目录展示:
- code 文件夹:
该目录下包含软件方案代码
- docs 文件夹:
该目录下包含用户指导手册与功能接口说明的项目文档
- object_model_demo 文件夹:
该目录下提供了一个阿里Iot平台的物模型文件, 可以直接导入阿里Iot平台, 方便调试
方案说明
此方案为定位器公版方案, 不包含全部业务功能, 方案提供定位器业务核心组件的功能实现以及与服务端完成数据交互, 事件转发等功能, 使用者应基于此框架继续开发业务功能, 当前软件框架完成功能如下:
- MQTT协议通讯(当前方案支持阿里Iot平台/ThingsBoard平台)
- 配置文件读写
- OTA远程升级
- LED指示灯
- 设备网络管理
- 设备信息管理
- 电池电量与充电管理
- 备份信息存储
- GNSS定位/基站定位/Wifi定位
- 低功耗管理
- 日志存储记录
环境搭建
USB驱动安装
请根据调试模组平台进行驱动下载安装, 点击此处下载
开发调试工具
推荐使用QPYcom进行开发调试, 此文档中的流程介绍均使用该工具进行, 且成功安装USB驱动
工具下载链接: 点击此处下载
工具使用说明: 点击此处访问
代码配置参数修改
目前方案代码使用的配置参数未进行配置, 请按照下面说明进行更改。
找到code中的以settings_
开头的配置文件进行配置, 根据实际参数进行调整, 如下图:
settings_server.py
用于配置连接的 IoT 平台连接信息
class AliIotConfig:
product_key = ""
product_secret = ""
device_name = ""
device_secret = ""
server = "iot-as-mqtt.cn-shanghai.aliyuncs.com"
qos = 1
class ThingsBoardConfig:
host = ""
port = 1883
username = ""
qos = 0
client_id = ""
settings_loc.py
用于配置定位模块的配置信息(外挂GNSS串口, 基站/Wifi定位的认证信息)
gps_cfg = {
"UARTn": UART.UART1,
"buadrate": 115200,
"databits": 8,
"parity": 0,
"stopbits": 1,
"flowctl": 0,
"gps_mode": _gps_mode.external,
"nmea": 0b010111,
"PowerPin": None,
"StandbyPin": None,
"BackupPin": None,
}
cell_cfg = {
"serverAddr": "www.queclocator.com",
"port": 80,
"token": "xxxxxxxxxx",
"timeout": 3,
"profileIdx": profile_idx,
}
wifi_cfg = {
"token": "xxxxxxxxxx"
}
settings_user.py
用于配置用户业务功能的相关配置参数(如报警开关, 低电阈值等)
class _server:
none = 0x0
AliIot = 0x1
ThingsBoard = 0x2
class _drive_behavior_code:
none = 0x0
sharply_start = 0x1
sharply_stop = 0x2
sharply_turn_left = 0x3
sharply_turn_right = 0x4
class _ota_upgrade_module:
none = 0x0
sys = 0x1
app = 0x2
debug = 1
log_level = "DEBUG"
checknet_timeout = 60
server = _server.AliIot
phone_num = ""
low_power_alert_threshold = 20
low_power_shutdown_threshold = 5
over_speed_threshold = 50
sw_ota = 1
sw_ota_auto_upgrade = 1
sw_voice_listen = 0
sw_voice_record = 0
sw_fault_alert = 1
sw_low_power_alert = 1
sw_over_speed_alert = 1
sw_sim_abnormal_alert = 1
sw_disassemble_alert = 1
sw_drive_behavior_alert = 1
drive_behavior_code = _drive_behavior_code.none
loc_method = _loc_method.all
loc_gps_read_timeout = 300
work_mode = _work_mode.cycle
work_mode_timeline = 3600
work_cycle_period = 30
user_ota_action = -1
ota_status = {
"sys_current_version": "",
"sys_target_version": "--",
"app_current_version": "",
"app_target_version": "--",
"upgrade_module": _ota_upgrade_module.none,
"upgrade_status": _ota_upgrade_status.none,
}
烧录固件
根据当前调试模组型号下载对应QuecPython固件, 并使用Qpycom工具进行烧录
固件下载地址: 点击此处访问
使用QPYcom工具下载固件
- 选择固件
- 下载固件
- 等待固件烧录
- 烧录成功
- 连接交互口
- 查看烧录信息
烧录代码
建议在下载代码前将文件中的
main.py
重命名为_main.py
, 因为main.py
会上电自运行, 不方便调试, 我们测试阶段可以手动执行_main.py
来运行, 方便调试问题通过USB下载代码需要设备预留USB接口或测试点, 或使用开发板进行调试, 并提前安装好驱动
- 选择
Quectel USB NMEA PORT
, 该串口为交互口, 程序LOG也会通过该串口输出
- 将业务功能代码批量烧录设备, 点击下载脚本后等待下载完成, 下载完成后在文件中查看
- 烧录成功后建议重启设备, 然后运行功能(如烧录了
main.py
, 则重启设备后, 功能会自动运行, 如已将main.py
重命名后烧录, 则需手动运行_main.py
启动功能)
- 运行结果展示