基于STM32单片机智能手表手环GSM短信上报GPS定位校时
基于STM32单片机智能手表手环GSM短信上报GPS定位校时
1. 系统功能介绍
随着物联网和智能穿戴设备的广泛应用,基于单片机的智能手表或手环不仅需要具备时间显示功能,还应支持位置定位、远程通信和应急报警等功能。本系统以STM32单片机为核心控制单元,结合GPS模块、GSM模块、LCD1602液晶显示器、LED灯、按键电路等,实现了一套具备定位、短信上报、手电筒、时钟显示等多功能的智能手环系统。
系统的主要功能如下:
-
GPS定位功能:通过GPS模块获取当前经纬度信息,用户可将数据输入到地图浏览器中查看当前位置。如果GPS定位失败,LCD1602显示屏会提示“gps link…”,以提示用户注意GPS信号接收环境。
-
LCD1602液晶显示功能:液晶屏可显示经纬度信息与日期时间,用户通过按键切换显示内容。LCD还支持对比度调节,借助电位器调节屏幕清晰度,方便在不同光照条件下查看。
-
手电筒功能:系统配备LED灯,通过按键实现点亮与熄灭的切换,方便在夜间或光线不足环境下使用。
-
短信上报功能:通过按键触发,系统将当前的经纬度信息打包后发送到指定手机号,便于外部人员实时获知使用者位置。
-
远程短信查询功能:外部人员可向设备SIM卡号码发送“GET”指令,设备解析后自动回复当前定位与时间信息,确保双向交互的便利性与实用性。
-
指示灯提示:在GSM短信处理过程(如发送与接收)中,指示灯闪烁提示,用户可直观了解系统运行状态。
-
供电与稳定性:GSM模块上电时需要一定时间初始化,且由于通信功耗较大,电源设计至少需满足5V/2A,以保证系统稳定运行。GPS天线必须放置在露天环境,以确保有效接收信号。
2. 系统电路设计
整个系统由单片机最小系统、GPS定位电路、GSM通信电路、LCD1602显示电路、按键电路、LED手电筒电路、电位器调节电路及电源电路组成。下面对每个部分进行详细介绍。
2.1 单片机核心电路
系统核心控制器为STM32F103C8T6单片机,主频72MHz,内置丰富的外设接口。其主要任务包括:
- 控制GPS和GSM模块的数据收发;
- 驱动LCD1602显示数据;
- 管理按键输入与LED手电筒控制;
- 实现定时功能,结合GPS时间校时。
单片机通过UART与GPS模块和GSM模块通信,I/O口控制按键与LED灯。
2.2 GPS定位电路
GPS模块负责采集当前位置的经纬度数据,并通过UART串口输出NMEA标准格式字符串(如 $GPRMC
、$GPGGA
)。单片机对这些字符串进行解析,提取经纬度与时间数据:
- 经度、纬度用于定位;
- 时间数据用于手表时间校时。
GPS天线要求放置于露天位置,以确保接收到足够的卫星信号。
2.3 GSM通信电路
GSM模块(如SIM900A或AIR系列)通过UART与STM32通信,支持短信发送与接收功能:
- 在用户按下发送按键后,STM32通过AT指令控制GSM模块发送包含经纬度信息的短信;
- 当接收到“GET”短信时,STM32解析并自动回复最新的定位与时间数据。
由于GSM模块在工作时瞬时电流较大,电源电路必须保证5V/2A输出,以避免掉电或复位。
2.4 LCD1602显示电路
LCD1602用于显示经纬度信息与时间日期。其显示逻辑如下:
- 默认显示GPS定位数据;
- 用户通过按键可切换显示内容(位置与时间);
- 当GPS未定位成功时显示“gps link…”。
LCD对比度通过接入电位器调节,用户可在不同光照环境下获得最佳视觉效果。
2.5 按键电路
系统设有三组按键,分别对应不同功能:
- 切换显示按键:在经纬度与时间日期显示之间切换;
- 手电筒控制按键:用于LED手电筒开关切换;
- 短信发送按键:触发发送经纬度短信。
按键电路采用下拉电阻方式,确保稳定识别高低电平。
2.6 LED手电筒电路
LED灯作为手电筒功能实现,直接由单片机I/O口控制。按键按下一次点亮,再次按下熄灭,适合夜间照明与应急使用。
2.7 电源电路
系统采用5V直流供电,并通过稳压芯片为单片机与外设提供3.3V或5V电源。特别是GSM模块,因其功耗波动大,电源必须保证足够的电流输出能力(2A),同时增加电容滤波以避免电压波动。
3. 系统程序设计
程序设计分为主控流程、GPS解析程序、GSM通信程序、LCD显示程序、按键控制程序和手电筒控制程序。整体采用模块化编程思路,提升代码的可维护性与扩展性。
3.1 主程序设计
主程序初始化各模块并进入循环任务,包括:
- 采集GPS数据并解析;
- 驱动LCD显示;
- 检测按键输入;
- 处理GSM短信收发;
- 控制LED手电筒。
#include "stm32f10x.h"
#include "gps.h"
#include "gsm.h"
#include "lcd1602.h"
#include "key.h"
#include "led.h"char gps_info[50];
char time_info[20];
uint8_t display_mode = 0;int main(void) {SystemInit();LCD1602_Init();GPS_Init();GSM_Init();Key_Init();LED_Init();while(1) {GPS_Update(gps_info, time_info);if(display_mode == 0) {LCD1602_ShowString(0,0,"GPS:");LCD1602_ShowString(0,1,gps_info);} else {LCD1602_ShowString(0,0,"TIME:");LCD1602_ShowString(0,1,time_info);}Key_Scan();GSM_Process();}
}
3.2 GPS解析程序
GPS输出数据为标准NMEA字符串,单片机需对其解析以提取经纬度。
void GPS_Update(char* gps_info, char* time_info) {char buffer[100];if(UART_ReadLine(buffer)) {if(strstr(buffer,"$GPRMC")) {GPS_ParseRMC(buffer, gps_info, time_info);}}
}
3.3 GSM通信程序
通过AT指令控制短信收发。
void GSM_SendLocation(char* gps_info) {UART_SendString("AT+CMGF=1\r\n"); // 设置短信文本模式UART_SendString("AT+CMGS=\"+8613800000000\"\r\n"); // 目标手机号UART_SendString(gps_info);UART_SendChar(26); // Ctrl+Z结束
}void GSM_Process(void) {char buffer[100];if(UART_ReadLine(buffer)) {if(strstr(buffer,"GET")) {GSM_SendLocation(gps_info);}}
}
3.4 LCD显示程序
通过切换按键在显示GPS信息和时间信息之间切换。
void LCD1602_Display(uint8_t mode) {if(mode == 0) {LCD1602_ShowString(0,0,"GPS:");LCD1602_ShowString(0,1,gps_info);} else {LCD1602_ShowString(0,0,"TIME:");LCD1602_ShowString(0,1,time_info);}
}
3.5 按键控制程序
void Key_Scan(void) {if(KEY1_Pressed()) {display_mode = !display_mode;}if(KEY2_Pressed()) {LED_Toggle();}if(KEY3_Pressed()) {GSM_SendLocation(gps_info);}
}
3.6 LED手电筒控制程序
void LED_Toggle(void) {static uint8_t state = 0;if(state) {LED_Off();state = 0;} else {LED_On();state = 1;}
}
4. 总结
本系统基于STM32单片机,结合GPS与GSM模块,实现了一款多功能智能手环。其特点在于:
- 功能全面:具备定位、校时、短信上报与远程查询功能。
- 交互友好:LCD显示、按键切换与手电筒功能,方便日常使用。
- 实用性强:通过短信交互实现远程监控,适合老人、小孩与户外人员的安全定位与求助。
- 扩展性好:未来可增加心率检测、蓝牙通信、数据存储等功能,提升系统应用价值。
该设计不仅满足了智能穿戴设备对轻便化与智能化的要求,也为基于STM32的物联网应用提供了可借鉴的参考方案。