找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1428|回复: 3
收起左侧

GPS WiFi LCD 温度传感器 更新频率能不能快一点 求帮助

[复制链接]
ID:353926 发表于 2019-5-31 17:31 | 显示全部楼层 |阅读模式
用LCD显示GPS和温湿度信息,用WiFi将这些数据传到网络调试助手中。现在WiFi大概半分钟能传输一次,LCD显示的温度和GPS半分钟更新一次,我想问一下这是怎么回事。更新频率能不能快一点。
回复

使用道具 举报

ID:353926 发表于 2019-5-31 18:36 | 显示全部楼层
  1. int nmea_decode_test(void)
  2. {
  3.                 double deg_lat;//转换成[degree].[degree]格式的纬度
  4.                 double deg_lon;//转换成[degree].[degree]格式的经度

  5.     nmeaINFO info;          //GPS解码后得到的信息
  6.     nmeaPARSER parser;      //解码时使用的数据结构  
  7.     uint8_t new_parse=0;    //是否有新的解码数据标志
  8.   
  9.     nmeaTIME beiJingTime;    //北京时间
  10.   
  11.                 uint8_t ucStatus;
  12.                 char cStr [ 1000 ] ;
  13.                 char str_buff[100];
  14.                
  15.                 LCD_SetFont(&Font8x16);
  16.                 LCD_SetColors(RED,BLACK);
  17.                
  18.                 ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH);        /* 清屏,显示全黑 */

  19.     /*设置字体颜色及字体的背景颜色*/
  20.     LCD_SetColors(RED,BLACK);
  21.        
  22.           ILI9341_DispStringLine_EN(LINE(1)," Wildfire STM32-F103");
  23.     ILI9341_DispStringLine_EN(LINE(2),"  GPS module");

  24.   
  25.     /* 设置用于输出调试信息的函数 */
  26.     nmea_property()->trace_func = &trace;
  27.     nmea_property()->error_func = &error;
  28.     nmea_property()->info_func = &gps_info;

  29.     /* 初始化GPS数据结构 */
  30.     nmea_zero_INFO(&info);
  31.     nmea_parser_init(&parser);

  32.     while(1)
  33.     {
  34.                                
  35.       if(GPS_HalfTransferEnd)     /* 接收到GPS_RBUFF_SIZE一半的数据 */
  36.       {
  37.         /* 进行nmea格式解码 */
  38.         nmea_parse(&parser, (const char*)&gps_rbuff[0], HALF_GPS_RBUFF_SIZE, &info);
  39.         
  40.         GPS_HalfTransferEnd = 0;   //清空标志位
  41.         new_parse = 1;             //设置解码消息标志
  42.       }
  43.       else if(GPS_TransferEnd)    /* 接收到另一半数据 */
  44.       {

  45.         nmea_parse(&parser, (const char*)&gps_rbuff[HALF_GPS_RBUFF_SIZE], HALF_GPS_RBUFF_SIZE, &info);
  46.       
  47.         GPS_TransferEnd = 0;
  48.         new_parse =1;
  49.       }
  50.       
  51.       if(new_parse )                //有新的解码消息   
  52.       {   
  53.         /* 对解码后的时间进行转换,转换成北京时间 */
  54.         GMTconvert(&info.utc,&beiJingTime,8,1);
  55.         
  56.         /* 输出解码得到的信息 */
  57.                                 printf("\r\n时间%d-%02d-%02d,%d:%d:%d\r\n", beiJingTime.year+1900, beiJingTime.mon,beiJingTime.day,beiJingTime.hour,beiJingTime.min,beiJingTime.sec);
  58.                                 //info.lat lon中的格式为[degree][min].[sec/60],使用以下函数转换成[degree].[degree]格式
  59.                                
  60.                                 deg_lat = nmea_ndeg2degree(info.lat);
  61.                                 deg_lon = nmea_ndeg2degree(info.lon);
  62.                        
  63.                                 printf("\r\n纬度:%f,经度%f\r\n",deg_lat,deg_lon);
  64.         printf("\r\n海拔高度:%f 米 ", info.elv);
  65.         printf("\r\n速度:%f km/h ", info.speed);
  66.         printf("\r\n航向:%f 度", info.direction);
  67.                                
  68.                                 printf("\r\n正在使用的GPS卫星:%d,可见GPS卫星:%d",info.satinfo.inuse,info.satinfo.inview);

  69.                           printf("\r\n正在使用的北斗卫星:%d,可见北斗卫星:%d",info.BDsatinfo.inuse,info.BDsatinfo.inview);
  70.                                 printf("\r\nPDOP:%f,HDOP:%f,VDOP:%f",info.PDOP,info.HDOP,info.VDOP);
  71.         
  72.         /* 液晶输出 */
  73.         
  74.         /* 设置前景颜色(字体颜色)*/
  75.         LCD_SetTextColor(BLUE);
  76.         
  77.         ILI9341_DispStringLine_EN(LINE(5)," GPS Info:");

  78.         /* 设置前景颜色(字体颜色)*/
  79.         LCD_SetTextColor(WHITE);
  80.         
  81.         /* 显示时间日期 */
  82.         sprintf(str_buff," Date:%4d/%02d/%02d ", beiJingTime.year+1900, beiJingTime.mon,beiJingTime.day);
  83.         ILI9341_DispStringLine_EN(LINE(6),str_buff);
  84.       
  85.                           sprintf(str_buff," Time:%02d:%02d:%02d", beiJingTime.hour,beiJingTime.min,beiJingTime.sec);
  86.         ILI9341_DispStringLine_EN(LINE(7),str_buff);

  87.         /* 纬度 经度*/
  88.         sprintf(str_buff," latitude :%.6f ", deg_lat);
  89.         ILI9341_DispStringLine_EN(LINE(8),str_buff);
  90.         
  91.         sprintf(str_buff," longitude :%.6f",deg_lon);
  92.         ILI9341_DispStringLine_EN(LINE(9),str_buff);
  93.         
  94.         /* 正在使用的卫星 可见的卫星*/
  95.         sprintf(str_buff," GPS  Satellite in use :%2d ", info.satinfo.inuse);
  96.         ILI9341_DispStringLine_EN(LINE(10),str_buff);   
  97.         
  98.                                 sprintf(str_buff," GPS Satellite in view :%2d", info.satinfo.inview);
  99.                                 ILI9341_DispStringLine_EN(LINE(11),str_buff);   

  100. //        /* 正在使用的卫星 可见的卫星*/
  101. //        sprintf(str_buff," BDS  Satellite in use :%2d ", info.BDsatinfo.inuse);
  102. //        ILI9341_DispStringLine_EN(LINE(12),str_buff);   
  103. //        
  104. //       sprintf(str_buff," BDS Satellite in view :%2d", info.BDsatinfo.inview);
  105. //        ILI9341_DispStringLine_EN(LINE(13),str_buff);   
  106.         
  107.         /* 海拔高度 */
  108.         sprintf(str_buff," Altitude:%4.2f m", info.elv);
  109.         ILI9341_DispStringLine_EN(LINE(12),str_buff);
  110.         
  111.         /* 速度 */
  112.         sprintf(str_buff," speed:%4.2f km/h", info.speed);
  113.         ILI9341_DispStringLine_EN(LINE(13),str_buff);
  114.          
  115.         /* 航向 */
  116. //        sprintf(str_buff," Track angle:%3.2f deg", info.direction);
  117. //        ILI9341_DispStringLine_EN(LINE(14),str_buff);
  118.                                         DHT11_Data_TypeDef DHT11_Data;//声明
  119.                                         DHT11_Read_TempAndHumidity ( & DHT11_Data );
  120.                                         a1=DHT11_Data.humi_int;
  121.                                         b1=DHT11_Data.humi_deci;
  122.                                         c1=DHT11_Data.temp_int;
  123.                                         d1=DHT11_Data.temp_deci;       
  124.                                         LCD_SetFont(&Font8x16);       
  125.                                         LCD_SetColors(WHITE ,BLACK);       
  126.                                         sprintf(dispBuff," humi:%d.%dRH  temp:%d.%dC",a1,b1,c1,d1);
  127.                                         LCD_ClearLine(LINE(14));       
  128.                                         ILI9341_DispStringLine_EN(LINE(14),dispBuff);  //14行显示英文字符串
  129.                                
  130.                                
  131.                                 printf ( "\r\n正在配置 ESP8266 ......\r\n" );

  132.                                 macESP8266_CH_ENABLE();
  133.                                
  134.                                 ESP8266_AT_Test ();
  135.                                
  136.                                 ESP8266_Net_Mode_Choose ( STA );

  137.                                 while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );       
  138.                                
  139.                                 ESP8266_Enable_MultipleId ( DISABLE );
  140.                                
  141.                                 while ( !        ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );
  142.                                
  143.                                 while ( ! ESP8266_UnvarnishSend () );
  144.                                
  145.                                 printf ( "\r\n配置 ESP8266 完毕\r\n" );                       
  146.                                        
  147.                                         if ( DHT11_Read_TempAndHumidity ( & DHT11_Data ) == SUCCESS )       //读取 DHT11 温湿度信息
  148.                                         {       
  149.                                         sprintf ( cStr, "\r\n检测成功!\r\n\r\n湿度为%d.%d %RH ,温度为 %d.%d℃ \r\n经度是%f ,纬度是%f\r\n",
  150.                                                                                 DHT11_Data .humi_int, DHT11_Data .humi_deci, DHT11_Data .temp_int, DHT11_Data.temp_deci, deg_lat,deg_lon);

  151.                                         }

  152.                                         printf ( "%s", cStr );                  //打印读取 DHT11 温湿度信息       
  153.                                        
  154.                                         ESP8266_SendString ( ENABLE, cStr, 0, Single_ID_0 );                       //发送 DHT11 温湿度信息和GPS信息到网络调试助手
  155.                                        
  156.                                         if ( ucTcpClosedFlag )                                             //检测是否失去连接
  157.                                         {
  158.                                                 ESP8266_ExitUnvarnishSend ();                                    //退出透传模式
  159.                                                
  160.                                                 do ucStatus = ESP8266_Get_LinkStatus ();                         //获取连接状态
  161.                                                 while ( ! ucStatus );
  162.                                                
  163.                                                 if ( ucStatus == 4 )                                             //确认失去连接后重连
  164.                                                 {
  165.                                                         printf ( "\r\n正在重连热点和服务器 ......\r\n" );
  166.                                                        
  167.                                                         while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );
  168.                                                        
  169.                                                         while ( !        ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );
  170.                                                        
  171.                                                         printf ( "\r\n重连热点和服务器成功\r\n" );

  172.                                                 }
  173.                                                
  174.                                                 while ( ! ESP8266_UnvarnishSend () );               
  175.                                                
  176.                                         }

  177.                                 }

  178.                                
  179.                                                         new_parse = 0;
  180.                                                 }

  181.                                         }
  182. 这是GPS解析数据、LCD显示GPS和温度、WiFi传输GPS和温度的程序。有了WiFi传输函数LCD更新显示GPS和温度信息的频率变慢了。
复制代码
回复

使用道具 举报

ID:330198 发表于 2019-6-1 09:17 | 显示全部楼层
你把所有while(!........);这些换个方式写,不然程序就死在这里了。
回复

使用道具 举报

ID:353926 发表于 2019-6-1 21:44 | 显示全部楼层
zhanghyg 发表于 2019-6-1 09:17
你把所有while(!........);这些换个方式写,不然程序就死在这里了。

可以说下怎么写吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表