基于STM32单片机智能手表手环GSM短信上报GPS定位校时

1. 系统功能介绍

随着物联网和智能穿戴设备的广泛应用,基于单片机的智能手表或手环不仅需要具备时间显示功能,还应支持位置定位、远程通信和应急报警等功能。本系统以STM32单片机为核心控制单元,结合GPS模块、GSM模块、LCD1602液晶显示器、LED灯、按键电路等,实现了一套具备定位、短信上报、手电筒、时钟显示等多功能的智能手环系统。

系统的主要功能如下:

  1. GPS定位功能:通过GPS模块获取当前经纬度信息,用户可将数据输入到地图浏览器中查看当前位置。如果GPS定位失败,LCD1602显示屏会提示“gps link…”,以提示用户注意GPS信号接收环境。

  2. LCD1602液晶显示功能:液晶屏可显示经纬度信息与日期时间,用户通过按键切换显示内容。LCD还支持对比度调节,借助电位器调节屏幕清晰度,方便在不同光照条件下查看。

  3. 手电筒功能:系统配备LED灯,通过按键实现点亮与熄灭的切换,方便在夜间或光线不足环境下使用。

  4. 短信上报功能:通过按键触发,系统将当前的经纬度信息打包后发送到指定手机号,便于外部人员实时获知使用者位置。

  5. 远程短信查询功能:外部人员可向设备SIM卡号码发送“GET”指令,设备解析后自动回复当前定位与时间信息,确保双向交互的便利性与实用性。

  6. 指示灯提示:在GSM短信处理过程(如发送与接收)中,指示灯闪烁提示,用户可直观了解系统运行状态。

  7. 供电与稳定性: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 按键电路

系统设有三组按键,分别对应不同功能:

  1. 切换显示按键:在经纬度与时间日期显示之间切换;
  2. 手电筒控制按键:用于LED手电筒开关切换;
  3. 短信发送按键:触发发送经纬度短信。

按键电路采用下拉电阻方式,确保稳定识别高低电平。

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模块,实现了一款多功能智能手环。其特点在于:

  1. 功能全面:具备定位、校时、短信上报与远程查询功能。
  2. 交互友好:LCD显示、按键切换与手电筒功能,方便日常使用。
  3. 实用性强:通过短信交互实现远程监控,适合老人、小孩与户外人员的安全定位与求助。
  4. 扩展性好:未来可增加心率检测、蓝牙通信、数据存储等功能,提升系统应用价值。

该设计不仅满足了智能穿戴设备对轻便化与智能化的要求,也为基于STM32的物联网应用提供了可借鉴的参考方案。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐