基于STM32单片机智能手表GSM短信上报GPS定位温湿度检测记步设计
1 系统功能介绍
本设计是基于 STM32 单片机 的多功能智能手表系统,融合了 GSM 短信上报、GPS 定位、温湿度检测、计步器功能 等多种实用特性,并结合 LCD1602 液晶显示、LED 手电筒及按键控制,实现了一个功能丰富、交互性强的可穿戴设备。系统不仅可以实时显示时间与日期,还能获取经纬度信息并通过 GSM 短信发送至指定手机,实现远程位置查询。除此之外,手表还具备温湿度检测、步数统计以及 LED 手电筒等生活化功能。
主要功能如下:
-
LCD1602 显示功能
- 显示当前时钟、日期信息
- 可切换显示 GPS 获取的经纬度信息
- 显示温湿度数据及步数统计
- 通过电位器调节对比度,保证不同光照条件下的可读性
-
GPS 定位功能
- 通过 GPS 模块获取当前经纬度信息
- 可将数据通过短信上报至手机
- 经纬度可在浏览器地图上直接查看位置
-
GSM 短信通讯功能
- 通过按键发送经纬度短信至预设手机号码
- 支持手机主动发送
GET
指令查询位置信息,系统自动回复经纬度 - 短信处理过程有 LED 指示灯提示状态
-
LED 手电筒功能
- 独立按键控制 LED 开关
- 方便夜间使用
-
温湿度检测
- 使用 DHT11 模块检测环境温湿度
- 数据实时显示在 LCD1602
-
计步器功能
- 使用 ADXL345 三轴加速度传感器进行步数统计
- 实时显示累计步数
2 系统电路设计
系统硬件采用模块化结构,主要由 单片机核心控制电路、LCD1602 显示模块、GPS 模块、GSM 模块、按键模块、LED 灯模块、ADXL345 计步模块、DHT11 温湿度模块及电源电路 构成。
2.1 单片机核心电路
- 核心芯片:STM32F103C8T6,ARM Cortex-M3 内核,主频 72MHz,内置丰富的外设接口(USART、I2C、SPI、GPIO、ADC 等)。
- 晶振电路:外接 8MHz 晶振 + 20pF 电容,保证系统稳定运行。
- 复位电路:采用上电复位电路及独立复位按键,保证系统在异常状态下可恢复正常。
2.2 LCD1602 液晶显示模块
- 功能:用于显示时间、日期、经纬度、温湿度和步数。
- 接口方式:4 位并行模式,节省 I/O 口资源。
- 对比度调节:通过电位器调整显示清晰度。
2.3 GPS 定位模块
- 功能:通过卫星获取当前经纬度信息。
- 接口:串口 UART 与 STM32 通讯,波特率可配置(常用 9600bps)。
- 数据格式:标准 NMEA-0183 协议,STM32 程序解析
$GPRMC
或$GPGGA
数据。
2.4 GSM 短信通讯模块
- 功能:发送与接收短信,实现位置上报与查询。
- 接口:UART 串口与 STM32 通讯,AT 指令控制。
- 状态指示:发送、接收过程通过 LED 指示灯显示。
2.5 按键控制模块
系统设计三枚功能按键:
- 显示切换键:切换 LCD 显示内容(时间/经纬度/温湿度/步数)。
- 手电筒控制键:按下开灯,再次按下关灯。
- 短信发送键:按下发送经纬度短信至预设号码。
按键均采用下拉电阻接地方式,软件实现去抖动处理。
2.6 LED 手电筒模块
- 功能:作为夜间照明使用。
- 驱动方式:通过 MOSFET 或三极管驱动大功率白光 LED,由单片机 I/O 控制。
2.7 ADXL345 计步器模块
- 功能:检测佩戴者运动步数。
- 接口:I2C 总线与 STM32 通讯。
- 原理:采集三轴加速度数据,算法判断步伐次数。
2.8 DHT11 温湿度模块
- 功能:测量环境温度与湿度。
- 接口:单总线协议,与 STM32 单片机通过 GPIO 端口进行数据传输。
2.9 电源电路
-
功能:提供 3.3V 和 5V 电压供给不同模块。
-
设计方案:
- 锂电池供电 + 充电管理模块
- 5V 电源供给 LCD1602、部分传感器
- 3.3V LDO 稳压供给 STM32、ADXL345、GPS 模块
3 程序设计
软件设计分为 主程序、显示管理、GPS 数据解析、GSM 短信处理、按键扫描、LED 控制、温湿度检测、计步算法 等模块,采用 事件驱动 + 循环查询 的方式实现。
3.1 主程序框架
- 初始化所有外设(LCD、USART、I2C、GPIO、定时器等)
- 循环执行按键检测、显示更新、GPS 定位、短信处理、温湿度采集、步数统计等任务
int main(void) {System_Init();while(1) {Key_Scan();Display_Update();GPS_Process();GSM_Process();TempHumi_Update();StepCounter_Update();}
}
3.2 显示管理模块
功能
- 根据按键切换显示内容
- 支持时间/日期、经纬度、温湿度、步数等多种信息显示
void Display_Update(void) {switch(display_mode) {case MODE_TIME:LCD_ShowString(0,0,"TIME:");LCD_ShowTime(current_time);break;case MODE_GPS:LCD_ShowString(0,0,"LAT:");LCD_ShowFloat(latitude);LCD_ShowString(1,0,"LON:");LCD_ShowFloat(longitude);break;case MODE_TEMP:LCD_ShowString(0,0,"TEMP:");LCD_ShowNum(temp);LCD_ShowString(1,0,"HUMI:");LCD_ShowNum(humi);break;case MODE_STEP:LCD_ShowString(0,0,"STEPS:");LCD_ShowNum(step_count);break;}
}
3.3 GPS 数据解析模块
功能
- 从 GPS 模块接收 NMEA 数据
- 解析
$GPRMC
获取经纬度信息
void GPS_Process(void) {if(GPS_Data_Ready) {Parse_GPRMC(gps_buffer, &latitude, &longitude);GPS_Data_Ready = 0;}
}
3.4 GSM 短信处理模块
功能
- 发送经纬度短信至预设手机
- 接收短信内容,若为 “GET” 则回复位置
void GSM_Process(void) {if(send_sms_flag) {LED_Status(1);GSM_SendLocation(latitude, longitude, phone_number);LED_Status(0);send_sms_flag = 0;}if(GSM_NewSMS()) {char msg[20];GSM_ReadSMS(msg);if(strcmp(msg, "GET") == 0) {GSM_SendLocation(latitude, longitude, sender_number);}}
}
3.5 按键扫描模块
功能
- 检测按键状态
- 实现去抖动
- 控制模式切换、LED 开关、短信发送
void Key_Scan(void) {if(Key1_Pressed()) {display_mode++;if(display_mode > MODE_STEP) display_mode = MODE_TIME;}if(Key2_Pressed()) {led_state = !led_state;LED_Control(led_state);}if(Key3_Pressed()) {send_sms_flag = 1;}
}
3.6 温湿度检测模块
void TempHumi_Update(void) {if(DHT11_Read(&temp, &humi) == SUCCESS) {// 数据更新成功}
}
3.7 计步算法模块
void StepCounter_Update(void) {float ax, ay, az;ADXL345_Read(&ax, &ay, &az);if(Detect_Step(ax, ay, az)) {step_count++;}
}
4 总结与特点
- 功能集成度高:集成时间显示、GPS 定位、GSM 短信、温湿度检测、计步功能,适合多场景应用。
- 交互设计合理:按键控制简洁直观,LCD1602 显示信息丰富且可切换。
- 远程交互能力:可被动接收短信查询位置,实现物联网式位置追踪。
- 低功耗与可扩展性:通过优化软件可降低功耗,并可扩展如蓝牙、WiFi 等通信方式。
- 适合可穿戴应用:便携性高,生活实用功能丰富,具有较高应用价值。