你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】基于STM32单片机智能手表GSM短信上报GPS定位设计

[复制链接]
STMCU小助手 发布时间:2022-5-11 13:45
一.硬件方案
本设计介绍了基于单片机的智能手表定位系统的设计与实现,控制系统采用STM32核心芯片,外围电路含有液晶显示器LCD1602,GPS,GSM电路,按键和LED灯电路组成,通过LCD模块能够将实时时间以及定位经纬度显示出来。系统可以通过GSM模块直接发送定位信息到指定的手机用户上。
主要由STM32单片机+LCD1602液晶显示电路+GPS模块+GSM模块+按键电路+LED灯电路+电源电路组成;如图:

8]M2S1TVKXSO3[T1F34{Z[T.png

二.设计功能
(1)液晶1602显示时钟,带日期,且可以显示经纬度信息,两个信息通过一个按键切换显示。
(2)通过GPS定位,获取当前的经纬度信息(可以通过浏览器查看具体位置)。
(3)通过电位器可以调节液晶屏的清晰度。
(4)具有手电筒功能,通过另外一个按键,按下,灯亮,再次按下,灯灭。
(5)通过第3个按键来发送经纬度信息给指定手机,按下后,开始发短信;
(6)短信处理过程有指示灯显示;
(7)接受短信的手机号码可以主动获取经纬度信息,发送"GET"给设备手机号,设备会回复信息给发送者.

三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:

~RJR[M4YCW}D`J5)VSNZ)}Y.png

四.软件设计
(1)程序流程图

3TMGYVF[Z{_FIG`ETNX[N{V.png

(2)主程序源码

  1. int main(void)
  2. {         
  3.         unsigned char i ;         
  4.         delay_init();                     //延时函数初始化         
  5.         uart_init(115200);                 //串口初始化为115200
  6.         uart2_init(9600)        ;
  7.          
  8.   TIM3_Int_Init(499,7199);//50ms           
  9.         
  10.         LED_Init();                                  //初始化与LED连接的硬件接口         
  11.         KEY_Init();
  12.          
  13.         led_gsm =0 ; ligh =1;//上电初始化
  14.         Lcd_GPIO_init();  //初始化lcd 接口
  15.         Lcd_Init();                 //初始化函数
  16.         delay_ms(200);
  17.         ligh =0;//关闭led
  18.         Lcd_Puts(0,0,(u8 *)Lin0_No);//显示                                
  19.         Lcd_Puts(0,1,(u8 *)Lin1_Ea);//显示
  20.          
  21.         i=60;
  22.         while(i--) delay_ms(100);//延时

  23.         UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集
  24.         i=7;
  25.         while(i--) delay_ms(100);//延时
  26.         UART_SendStr(USART1 ,"AT+CSCS="GSM"\r\n",15);//设置文本
  27.         i=7;
  28.         while(i--) delay_ms(100);//延时

  29.         UART_SendStr(USART1 , "AT+CMGDA="DEL ALL"\r\n",20); //删除所有短信
  30.         for(i=0;i<5;i++)
  31.         delay_ms(100);          //延时有助于稳定
  32.         
  33.   led_gsm = 1;
  34.         while(1)
  35.         {        
  36.                 key_scan();        
  37.                 if(disFlag ==1)        //定时更新显示
  38.                 {
  39.                         disFlag =0;
  40.             if(sysmode_GPS==1)                //gps有效
  41.       {
  42. //        sysmode_GPS=0;        
  43.                                 dealGps();
  44.                                 if(disNum==0)
  45.                                 {
  46.                                         Lcd_Puts(0,0,(u8 *)Lin0_No);//显示                                
  47.                                         Lcd_Puts(0,1,(u8 *)Lin1_Ea);//显示                                
  48.                                 }
  49.                                 else
  50.                                 {
  51.                                         Lcd_Puts(0,0,(u8 *)dis0);//显示                                
  52.                                         Lcd_Puts(0,1,(u8 *)dis1);//显示                                                        
  53.                                 }        
  54.                         }                                       
  55.                 }
  56.                
  57.     if(key_m==0)        //发送按键按下
  58.     {
  59.                         delay_ms(10);
  60.                         if(key_m==0)        
  61.                         {                        
  62.                                 led_gsm =  0;
  63.                                 UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11); //设置字符集
  64.                                 i=3;
  65.                                 while(i--) delay_ms(100);//延时
  66.                                 UART_SendStr(USART1 ,"AT+CSCS="GSM"\r\n",15);//设置文本
  67.                                 i=3;
  68.                                 while(i--) delay_ms(100);//延时

  69.                                 UART_SendStr(USART1 ,"AT+CMGS="+8618105140357"\r\n",26); //测试号码                                       
  70. //                  UART_SendStr(USART1 ,"AT+CMGS="+8615296556420"\r\n",26); //发送短信号码
  71.                                 
  72.                                 i=3;
  73.                                 while(i--) delay_ms(100);//延时
  74.                                 if(sysmode_GPS==1)                //gps有效
  75.                                 {
  76.                                         sysmode_GPS=0;                        
  77.                                         dealGps();
  78.                                         UART_SendStr(USART1 ,Lin0_No,12); //发送纬度
  79.                                         UART_SendStr(USART1 ,Lin1_Ea,12); //发送经度
  80.                                 }
  81.                                 else
  82.                                 {
  83.                                         UART_SendStr(USART1 ,"gps linking...",14); //gps无信号
  84.                                 }
  85.                                 delay_ms(200);
  86.                                 UART_SendStr(USART1 ,( char *)Crtl_Z, 1);        //发送
  87.                                 i=30;
  88.                                 while(i--) delay_ms(100);//延时发送
  89.                                 led_gsm = 1;
  90.                         }
  91.                 }
  92.                
  93.                 if(readFlag==1)    //读取短信息标志
  94.           {            
  95.                         readFlag=0;         //读取标志清零
  96.                         readMesIng = 1;//读取短信过程中
  97.                         timeCount++ ;
  98.                         if((stepNum == 0)&&(timeCount>=4))        //定时读取短信
  99.                         {                                       
  100.                                 UART_SendStr(USART1 , "AT+CMGF=1\r\n",11);   //设置字符集
  101.                                 timeCount = 0;//延时设置量        
  102.                                 stepNum++;//进入操作过程1
  103.                         }                        
  104.                         else if((stepNum == 1)&&(timeCount>=4))        //定时读取短信
  105.                         {
  106.                                 for(i=0;i<SIZEBUF;i++)
  107.                                 {
  108.                                         timebuf<i>='0';   //清空timebuf
  109.                                 }                                       
  110.                                 UART_SendStr(USART1 ,"AT+CMGR=1\r\n",11);        
  111.                                 timeCount = 0;//延时设置量        
  112.                                 stepNum++;//进入操作过程1
  113.                         }
  114.                         else if((stepNum == 2)&&(timeCount >= 4))        //定时读取短信
  115.                         {        
  116.                                 rebackMesFlag=INIT;        
  117.                                 for(i=0;i<(SIZEBUF-3);i++)
  118.                                 {
  119.                                         if((timebuf<i>=='G')&&(timebuf[i+1]=='E')&&(timebuf[i+2]=='T'))        //查询是否接收到GET
  120.                                         {
  121.                                                 rebackMesFlag=OPEN_01;        //状态标识打开
  122.                                                 break ;
  123.                                         }
  124.                                         if((timebuf<i>=='+')&&(timebuf[i+1]=='8')&&(timebuf[i+2]=='6'))//查询短信息中的号码
  125.                                         {
  126.                                                 led_gsm = 0;
  127.                                                 rebackMesFlag = SOMEONE; //有人发送短信
  128.                                                 AT_CMGS[9]=timebuf[i+0]; //提取号码
  129.                                                 AT_CMGS[10]=timebuf[i+1];
  130.                                                 AT_CMGS[11]=timebuf[i+2];
  131.                                                 AT_CMGS[12]=timebuf[i+3];
  132.                                                 AT_CMGS[13]=timebuf[i+4];
  133.                                                 AT_CMGS[14]=timebuf[i+5];
  134.                                                 AT_CMGS[15]=timebuf[i+6];
  135.                                                 AT_CMGS[16]=timebuf[i+7];
  136.                                                 AT_CMGS[17]=timebuf[i+8];
  137.                                                 AT_CMGS[18]=timebuf[i+9];
  138.                                                 AT_CMGS[19]=timebuf[i+10];
  139.                                                 AT_CMGS[20]=timebuf[i+11];         
  140.                                                 AT_CMGS[21]=timebuf[i+12];
  141.                                                 AT_CMGS[22]=timebuf[i+13];
  142.                                         }
  143.                                 }
  144.                                 AT_CMGS[23]='"';         //整理字符串
  145.                                 AT_CMGS[24]=0x0d;
  146.                                 AT_CMGS[25]=0x0a;
  147.         
  148.                                 if(rebackMesFlag != INIT)
  149.                                 {               
  150.                                         UART_SendStr(USART1 ,"AT+CMGDA="DEL ALL"\r\n",20);//删除所有短信                                                                                                                        
  151.                                         for(i=0;i<5;i++)
  152.                                         delay_ms(100);          //延时有助于稳定
  153.                                                         
  154.                                         UART_SendStr(USART1 ,"AT+CMGF=1\r\n",11);   //设置字符集
  155.                                         for(i=0;i<3;i++)
  156.                                         delay_ms(100);          //延时有助于稳定
  157.                                 
  158.                                         UART_SendStr(USART1 ,"AT+CSCS="GSM"\r\n",15); //设置干什么、
  159.                                         for(i=0;i<3;i++)
  160.                                         delay_ms(100);          //延时有助于稳定
  161.                                                                
  162.                                    UART_SendStr(USART1 , ( char *)AT_CMGS,26);//准备发送短信
  163.                                         for(i=0;i<2;i++)
  164.                                         delay_ms(100);          //延时有助于稳定
  165.         
  166.                                         if(rebackMesFlag==OPEN_01)
  167.                                         {
  168.                                                 UART_SendStr(USART1 ,Lin0_No,12); //发送纬度
  169.                                                 UART_SendStr(USART1 ,Lin1_Ea,12); //发送经度                                                                                       
  170.                                         }
  171.                                         else
  172.                                         {
  173.                                                 UART_SendStr(USART1 ,"CMD_ERR",7); //发送短信息命令错误
  174.                                         }
  175.                                         delay_ms(100);  
  176.                             UART_SendStr(USART1 ,(char *)Crtl_Z, 1);        //发送
  177.                                         for(i=0;i<20;i++)
  178.                                         delay_ms(100);          //延时有助于稳定        
  179.                                 }
  180.                                 timeCount = 0;//延时设置量        
  181.                                 stepNum++        ;//进入操作过程1
  182.                         }
  183.                         else if((stepNum == 3)&&(timeCount >= 4))        //定时读取短信
  184.                         {
  185.                                 clearMesFlag++;
  186.                                 if(clearMesFlag>10)
  187.                                 {
  188.                                   clearMesFlag = 0;
  189.                                         UART_SendStr(USART1 ,"AT+CMGDA="DEL ALL"\r\n",20);//删除所有短信
  190.                                 }
  191.                                 timeCount = 0;//延时设置量        
  192.                                 stepNum = 0        ;//进入操作过程1                                                        
  193.                                 led_gsm=1;          //关闭指示灯
  194.                                 readMesIng = 0;//读取短信过程中
  195.                         }                                                                                    
  196.                  }
  197.                                        
  198.         }                                                                                            
  199. }
  200. </i></i></i>
复制代码

收藏 评论0 发布时间:2022-5-11 13:45

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版