1. 项目背景与核心需求
宠物走失是困扰现代养宠家庭的一大痛点。根据2023年宠物行业白皮书数据显示,我国每年约有120万只宠物犬猫走失,找回率不足30%。传统GPS项圈存在续航短、定位精度低、功能单一等问题。这个毕业设计项目正是针对这一痛点,结合微信小程序和物联网技术,构建了一套完整的宠物定位与健康监测解决方案。
系统需要实现三个核心能力:
- 实时定位:通过GPS+北斗双模定位,精度控制在5米范围内
- 健康监测:采集宠物活动量、体温等基础生理数据
- 电子围栏:当宠物离开设定安全区域时自动告警
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 整体技术栈
采用分层架构设计,主要包含四个层次:
code复制移动端(微信小程序)
↑↓ HTTP/WebSocket
业务层(Spring Boot+MyBatis)
↑↓ MQTT
物联网层(ESP32+GPS模块)
↑↓ 4G/NB-IoT
硬件设备(定位终端)
2.2 关键技术选型
- 定位模块:选用ATGM336H模组,支持GPS/北斗双模定位,冷启动时间<30秒
- 通信方案:采用移远EC20 4G模组,相比NB-IoT更适合移动场景
- 小程序端:使用Vant Weapp组件库加速UI开发
- 服务端:采用Spring Boot 2.7 + Redis 6.2实现高并发位置数据处理
特别注意:GPS模块天线需要外置且远离金属物体,实测内置天线会导致定位精度下降60%
3. 硬件系统实现
3.1 终端硬件组成
核心部件清单:
- 主控芯片:ESP32-WROOM-32D(双核240MHz)
- 定位模块:ATGM336H(定位精度2.5m CEP)
- 通信模块:EC20 4G LTE(支持TCP/IP协议栈)
- 传感器:MPU6050(运动监测)+ DS18B20(体温)
- 电源:1000mAh锂电池(续航72小时)
3.2 关键电路设计
电源管理部分采用TPS63020升降压芯片,实现3.7V锂电池到3.3V的稳定转换。实测表明,加入LC滤波电路后,模块工作电流波动降低42%。
定位数据采集代码示例:
c复制void getGPSData() {
while(Serial2.available()) {
char c = Serial2.read();
if(gps.encode(c)) {
float latitude, longitude;
gps.f_get_position(&latitude, &longitude);
// 数据通过4G模块上传
mqttPublish("pet/tracker1", latitude, longitude);
}
}
}
4. 软件系统实现
4.1 服务端核心接口
采用RESTful风格设计主要API:
java复制@RestController
@RequestMapping("/api/pet")
public class PetController {
@PostMapping("/location")
public Response updateLocation(@RequestBody LocationDTO dto) {
// 使用GeoTools进行地理围栏判断
boolean inFence = geoFenceService.checkInFence(
dto.getLat(), dto.getLng());
redisTemplate.opsForValue().set(
"pet:"+dto.getDeviceId(), dto);
return Response.success(inFence);
}
}
4.2 小程序关键功能实现
地图组件采用腾讯地图JS API,优化策略包括:
- 使用WebSocket实现位置实时推送
- 采用点聚合技术处理密集点位
- 加入轨迹平滑算法消除GPS漂移
电子围栏绘制代码片段:
javascript复制// 创建圆形电子围栏
createFence(lat, lng, radius) {
this.map.addOverlay(new qq.maps.Circle({
center: new qq.maps.LatLng(lat, lng),
radius: radius,
fillColor: new qq.maps.Color(255,0,0,0.2)
}));
// 绑定越界事件监听
this.fenceListener = new qq.maps.event.addListener(...);
}
5. 系统测试与优化
5.1 定位精度测试
在不同环境下的实测数据:
| 环境 | 平均误差(m) | 最大误差(m) |
|---|---|---|
| 开阔广场 | 3.2 | 6.5 |
| 城市街道 | 7.8 | 15.4 |
| 室内靠窗 | 12.6 | 28.3 |
5.2 功耗优化方案
通过以下措施延长续航:
- 动态采样策略:静止时30秒/次,运动时5秒/次
- 深度睡眠模式:夜间自动进入(电流<5mA)
- 数据压缩:采用Delta编码减少传输量
实测优化后,设备续航从24小时提升至68小时。
6. 项目部署指南
6.1 硬件烧录步骤
- 安装CP2102 USB驱动
- 使用PlatformIO编译固件
- 通过Arduino IDE烧录(波特率115200)
6.2 服务端部署
推荐使用Docker-compose一键部署:
yaml复制version: '3'
services:
redis:
image: redis:6.2
mysql:
image: mysql:5.7
app:
build: .
ports:
- "8080:8080"
6.3 常见问题解决
- Q:GPS模块无法定位
A:检查天线连接,确保在室外开阔环境初始化 - Q:小程序地图加载慢
A:启用腾讯地图SDK的离线缓存功能 - Q:设备频繁掉线
A:调整MQTT的keepalive参数至120秒
7. 项目扩展方向
在实际开发中,我发现几个有价值的扩展点:
- 加入AI行为分析:通过运动模式识别宠物状态(如剧烈奔跑可能表示受惊)
- 多主人共享:支持家庭成员共同查看宠物状态
- 社区联动:接入宠物救助站数据库,自动匹配附近走失信息
硬件方面可升级为太阳能充电版本,我们测试发现1W的太阳能板在晴天可维持设备持续工作。
