基于STM32单片机智能手表GSM短信上报GPS定位防丢器设计
1 基于STM32单片机智能手表GSM短信上报GPS定位防丢器设计
本系统是一款以STM32单片机为核心的智能手表类设备,集成了GPS定位、GSM短信通信、LCD1602液晶显示、LED灯手电筒功能、按键交互及电源管理等多个模块,能够实现定位、防丢失提醒以及远程短信上报。其核心目标是为用户提供便捷、安全的随身防护方案,在老人、儿童以及重要物品的看护方面具有广泛的应用价值。
2 系统功能介绍
该设计的主要功能如下:
- 液晶显示:通过LCD1602液晶屏实时显示时钟、日期和GPS模块提供的经纬度信息,用户可通过按键在两类信息之间进行切换。
- GPS定位:通过GPS模块获取当前位置的经纬度坐标,结合网络浏览器即可查询到精确地理位置。
- 液晶清晰度调节:通过电位器调节LCD1602的对比度,以适应不同光照环境。
- 手电筒功能:利用LED灯实现手电筒功能,按下按键后点亮,再次按下即可关闭。
- 短信上报:通过第三个按键实现短信发送功能,将实时经纬度信息上报至指定手机号码。
- 短信指令获取:绑定的手机号码可以主动发送“GET”指令到设备,设备会自动回复当前经纬度信息。
- 短信状态指示:短信发送和接收过程中有独立的LED灯进行状态提示。
该系统不仅能作为个人防丢器使用,还能为老人或儿童提供紧急情况下的位置信息上报,增强安全保障。
3 系统电路设计
系统的电路设计分为以下几个模块,每个模块各自独立,又通过STM32单片机进行统一管理与协调。
3.1 STM32单片机最小系统电路
STM32单片机作为整个系统的控制核心,负责采集GPS数据、控制LCD1602显示、管理按键输入、驱动LED手电筒以及与GSM模块进行串口通信。
- 主控芯片:STM32F103C8T6
- 主要外设接口:USART串口通信(GPS、GSM)、GPIO接口(按键、LED)、ADC(电位器读取对比度)
- 电源部分:采用3.3V稳压电源模块,保证单片机及外设稳定运行。
3.2 LCD1602液晶显示电路
LCD1602用于显示日期时间和经纬度信息。由于LCD1602为并行接口,通过数据线与STM32连接。系统通过一个按键实现两类显示信息的切换。
- 显示内容:第一屏为时钟+日期;第二屏为GPS经纬度坐标。
- 对比度调节:通过电位器调节Vo引脚电压,实现液晶对比度的调节。
3.3 GPS模块电路
GPS模块用于获取实时经纬度信息,常用型号为NEO-6M。
- 通信接口:通过USART串口与STM32通信。
- 输出数据:标准NMEA0183协议字符串(包括经纬度、时间、卫星数等信息)。
- 电源电压:3.3V供电,避免与单片机电平不兼容。
3.4 GSM模块电路
GSM模块用于短信的发送和接收,常用模块为SIM900A或A6。
- 功能:短信发送(上报经纬度)、短信接收(处理GET指令)。
- 通信接口:与STM32通过USART串口连接,使用AT指令完成短信控制。
- 指示电路:通过外接LED灯实时显示模块工作状态和短信收发状态。
3.5 按键电路
系统设有三个独立按键:
- 信息切换键:在LCD显示的时间日期和经纬度信息之间切换。
- 手电筒控制键:控制LED手电筒的开关,每次按下进行状态翻转。
- 短信发送键:手动触发短信发送功能,将当前位置信息上报到指定手机。
按键电路采用下拉电阻方式,按键按下时为低电平输入,便于STM32检测。
3.6 LED电路
LED部分包含两类:
- 手电筒LED:高亮白光LED,通过限流电阻与GPIO控制。
- 指示灯LED:用于显示短信发送、接收和初始化等状态。
3.7 电源电路
系统电源采用锂电池+稳压电路方案。
- 锂电池:为系统提供便携供电。
- 稳压模块:输出3.3V供电给STM32、GPS和部分外围电路,输出4V左右电压给GSM模块。
- 充电电路:可选用TP4056模块,实现USB充电功能。
4 程序设计
本系统程序以STM32为核心,通过C语言编写,主要包含LCD显示、GPS数据解析、GSM短信处理、按键扫描、LED控制等模块。
4.1 LCD1602显示程序设计
LCD1602通过8位并行总线与STM32通信,显示内容包括时钟日期和GPS经纬度。
void LCD_ShowTime(char *time, char *date) {LCD_SetCursor(0,0);LCD_WriteString(time);LCD_SetCursor(1,0);LCD_WriteString(date);
}void LCD_ShowGPS(char *latitude, char *longitude) {LCD_SetCursor(0,0);LCD_WriteString("Lat:");LCD_WriteString(latitude);LCD_SetCursor(1,0);LCD_WriteString("Lon:");LCD_WriteString(longitude);
}
4.2 GPS数据解析程序设计
GPS模块输出的NMEA格式数据需要通过字符串解析获取经纬度信息。
void GPS_ParseData(char *nmea) {char *lat, *lon;if (strstr(nmea, "$GPGGA")) {lat = strtok(nmea, ",");for(int i=0;i<2;i++) lat = strtok(NULL, ",");lon = strtok(NULL, ",");strcpy(latitude, lat);strcpy(longitude, lon);}
}
4.3 GSM短信程序设计
GSM模块通过AT指令实现短信发送与接收。
void GSM_SendMessage(char *number, char *message) {USART_SendString("AT+CMGF=1\r"); delay_ms(100);USART_SendString("AT+CMGS=\"");USART_SendString(number);USART_SendString("\"\r");delay_ms(100);USART_SendString(message);USART_SendChar(0x1A); // Ctrl+Z结束
}
4.4 按键扫描程序设计
按键扫描采用轮询方式,按下后执行相应功能。
void Key_Scan() {if(KEY1_Pressed) {displayMode = !displayMode; // 切换显示内容}if(KEY2_Pressed) {LED_Toggle(); // 手电筒开关}if(KEY3_Pressed) {GSM_SendMessage("138XXXXXXXX", gpsData); // 短信上报}
}
4.5 LED控制程序设计
LED控制采用GPIO翻转方式。
void LED_Toggle() {if(LED_Status) {GPIO_ResetBits(GPIOB, GPIO_Pin_0);LED_Status = 0;} else {GPIO_SetBits(GPIOB, GPIO_Pin_0);LED_Status = 1;}
}
4.6 短信接收与指令处理程序设计
当设备接收到短信时,解析其内容,若为“GET”,则自动回复当前GPS坐标。
void GSM_ReceiveMessage(char *msg) {if(strstr(msg, "GET")) {GSM_SendMessage("138XXXXXXXX", gpsData);}
}
5 总结
本系统以STM32单片机为核心,结合GPS与GSM模块,实现了位置信息的采集、显示与短信上报功能,具有定位防丢、短信报警等实用功能。系统在电路设计上结构清晰,模块划分明确;在程序设计上实现了对各功能模块的有效管理和协调。通过该智能手表的实现,可以为用户提供可靠的位置信息安全保障,在儿童看护、老人防走失及物品防丢失等场景中具有实际应用价值。