Tracker_codes.zip
(1010.7 KB, 下载次数: 13)
2025-5-23 13:45 上传
点击文件名下载附件
源码
下载积分: 吾爱币 -1 CB
https://github.com/sunhanaix/GPS_Tracker
一、简述
本项目基于合宙Air780EG开发。Air780EG实时获得轨迹数据,并通过MQTT协议上传至服务器。
服务器通过mqtt协议订阅air780eg的几个主题,并把air780eg上传的数据进行解析,
然后将数据保存至sqlite3数据库中。
用户访问web前端,选择时间段,点击查询,将时间段内数据进行查询,返回给前端。
考虑到电脑和手机的访问,没有用app或者小程序,直接用的网页访问。
建议电脑和手机端,都使用chrome/edge浏览器访问。
目前我用了两种设备:
是一个小模块+一个电池的,这个是封装到一个小盒子里面,给狗狗定位用的。
成本合计在¥66.8+¥11.6=¥78.4。
这个是U盘样子的,是直接插汽车上,给汽车定位的。
成本是¥58.8
[img][/img]

iot_prototypes.png (96.81 KB, 下载次数: 0)
下载附件
2025-5-23 13:24 上传
" alt="设备外观" target="_blank" rel="noopener noreferrer nofollow" />
二、相关截图示例
2.1 位置信息
用户登录后,可以查看当前定位器的位置信息。
![位置信息]

location.png (290.2 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
点击“分享”按钮,分享当前位置信息。
![分享位置]

share_tracker_location.png (76.78 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
选择分享百度地图还是高德地图的链接,生成链接地址。
![生成分享位置链接地址]

share_tracker_location_addr.png (12.29 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
将链接地址粘贴到微信或者浏览器中
![微信分享位置]

share_tracker_location_baidu.png (21.09 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
2.2 测距
点击“测距”按钮,将会进入测距功能。
![测距功能]
2.3 导航到定位器位置
点击“导航”按钮,将会引导用户导航到定位器位置。
由于跨app调用,需要一些授权
![提示call百度地图]

brower_call_baidu_map.jpg (145.44 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
选择打开外部应用后,可以进入百度地图进行导航
![导航过去]

baidu_map_navigator.jpg (224.5 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
2.4 历史轨迹
点击“轨迹”按钮,可以选择时间范围,查看当前定位器的历史轨迹。
![选择时间范围]

select_history.png (41.49 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
![轨迹信息]

his_tracks.png (357.33 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
点击“播放轨迹”按钮,播放轨迹。
播放轨迹视频
点击“分享轨迹”按钮,分享轨迹。
![分享轨迹]

share_tracks.png (23.59 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
2.5 设备信息
点击“设备”按钮,查看当前定位器的设备信息。
可以查看定位器的IMEI,设备描述,最近update时间,当前GPS坐标情况。工作的温度,电池状态等信息。
也可以看到设备的配置参数信息。
![设备信息]

dev.png (125.62 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
2.5.1 设备别名、手机、邮箱等信息设置
点击“设置”按钮,进入设备别名、手机、邮箱等信息设置。
![设备别名、手机、邮箱等信息设置]

setting.png (69.69 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
2.5.2 展开配置查看详细参数
点击“展开配置”按钮,查看详细参数。
![查看详细参数]

toggle_out.png (120.33 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
2.5.3 电子围栏设置
点击“电子围栏设置”按钮,进入电子围栏设置。
当定位器处于设定的任意一个电子围栏内时,不会触发告警。
当定位器位于所有的围栏之外时,会触发告警。
(告警的设置在2.5.1中设置)
![电子围栏设置]

fenc_overview.png (241.84 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
默认进入的概览模式,可以查看所有的围栏。
可以选中具体某一个围栏,定位到这个围栏,查看详细信息。
![某个围栏]

fenc_zoom_out.png (200.19 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
点击“添加电子围栏”按钮,进入围栏设置。
可以直接在地图上选点,也可以在地址栏中输入地址,然后点“搜索地址”,会自动定位到位置。给出对应的坐标。
![添加电子围栏]

fence_setting.png (178.19 KB, 下载次数: 0)
下载附件
2025-5-23 13:25 上传
三、 功能描述
3.1. Air780EG代码部分
主要实现了以下功能:
程序流程
[ol]
[/ol]
特殊功能
固件更新(FOTA)
看门狗(WDT)
配置管理
日志记录
3.1.1 主要文件组成
IotDevice/
├── config.lua # 配置文件,包含MQTT、GNSS等配置参数
├── main.lua # 主程序入口文件
├── myGNSS.lua # GNSS定位相关功能模块
├── myWIFI.lua # WiFi扫描相关功能模块
└── myMQTT.lua # MQTT通信核心功能模块
3.1.2 config.lua - 配置文件
该文件定义了设备的主要配置参数,包括:
特点:
3.1.3 main.lua - 主程序入口
作为程序入口,主要职责:
3.1.4 myGNSS.lua - GNSS定位模块
该模块实现了GNSS定位的所有功能:
核心功能:
关键特性:
定位流程:
[ol]
[/ol]
3.1.5 myWIFI.lua - WiFi扫描模块
该模块实现了WiFi网络扫描功能:
特点:
3.1.6 myMQTT.lua - MQTT通信模块
该模块是整个设备与云端通信的核心,实现了:
连接管理:
数据上报:
命令处理:
电源管理:
3.2. 公网服务器部分
这部分部署在一个公网服务器上(自己的VPS,上面装mosquitto的MQTT服务器),用于做web前端展现以及后端监听mqtt的几个主题进行响应。
3.2.1 程序文件结构
PubServer/
├── air780eg.py # 主程序,处理设备数据和Web请求
├── air_config.py # 配置文件,包含MQTT、数据库等配置
├── Baidu.py # 百度地图相关功能,包括坐标转换和地址解析
├── models.py # 数据库模型定义
├── zip_data.py # 数据压缩和历史轨迹生成
├── check_fence.py # 电子围栏检查
├── gen_baidu_link.py # 生成百度地图链接
├── battery_estimate.py # 电池电量估算
├── alert.py # 告警通知(短信、邮件、虾推)
├── templates/ # HTML模板
│ ├── baidu_templ.html
│ ├── dev.html
│ ├── history_templ.html
│ └── ...其他HTML模板...
└── static/ # 静态资源
├── css/
├── js/
└── img/
3.2.2 程序逻辑说明
3.2.2.1. air780eg.py - 主程序
这是整个系统的主入口,负责以下核心功能:
主要模块功能:
# MQTT消息处理
def on_mqtt_connect(client, userdata, flags, rc): # MQTT连接成功后订阅主题
def on_mqtt_message(client, userdata, msg): # 处理MQTT消息,区分状态消息和命令消息
def save_to_db(data): # 将设备数据保存到数据库
def save_cfg_to_db(data): # 将设备配置保存到数据库
# Web API路由
@app.route('/dev') # 设备信息页面
@app.route('/api/data/realtime') # 获取实时数据
@app.route('/api/data/history') # 获取历史数据
@app.route('/api/data/GetDevicesHistory') # 获取设备历史数据
@app.route('/api/data/GetTracking') # 获取跟踪数据
@app.route('/api/config/get') # 获取设备配置
@app.route('/api/config/set') # 设置设备配置
@app.route('/api/address/get') # 获取地址信息
@app.route('/') # 首页,显示设备位置
@app.route('/his') # 历史轨迹页面
@app.route('/fence') # 电子围栏管理
@app.route('/api/geofence/add') # 添加电子围栏
@app.route('/api/geofence/delete') # 删除电子围栏
@app.route('/api/geofence/update') # 更新电子围栏
@app.route('/login') # 登录接口
@app.route('/logout') # 登出接口
@app.route('/change_password') # 修改密码
@app.route('/alert') # 告警设置页面
@app.route('/api/alert/get') # 获取告警设置
@app.route('/api/alert/update') # 更新告警设置
@app.route('/api/battery/estimate') # 电池电量估算
@app.route('/api/firmware/latest') # 获取最新固件信息
3.2.2.2. air_config.py - 配置文件
包含系统运行所需的各种配置:
3.2.2.3. Baidu.py - 百度地图相关功能
提供百度地图集成所需的功能:
3.2.2.4. models.py - 数据库模型
定义所有数据库表的模型:
3.2.2.5. zip_data.py - 数据压缩和历史轨迹
负责将原始设备数据进行压缩,生成便于查询的历史轨迹数据。包含两个主要功能:
比如7:10:00、7:15:00、7:20:00上报的数据都记录在了iot_data表中,位置停留不动时,其中的坐标没有变化,
进行压缩时,只记录最后7:20:00时间的坐标记录到zip_data表中。
3.2.2.6. check_fence.py - 电子围栏检查
定期检查设备是否超出预设的电子围栏范围,并在超出时发送告警通知。
3.2.2.7. gen_baidu_link.py - 生成百度地图链接
提供生成百度地图链接的功能,包括:
3.2.2.8. [battery_estimate.py] - 电池电量估算
基于电压值估算电池剩余时间和百分比:
3.2.2.9. alert.py - 告警通知
实现多种告警通知方式:
3.2.2.10. HTML模板 (templates/)
提供Web界面的HTML模板:
3.2.2.11. 静态资源 (static/)
包含前端所需的静态资源:
3.2.3 系统工作流程
[ol]
[/ol]
3.2.4 特色功能