|
- int nmea_decode_test(void)
- {
- double deg_lat;//轉(zhuǎn)換成[degree].[degree]格式的緯度
- double deg_lon;//轉(zhuǎn)換成[degree].[degree]格式的經(jīng)度
- nmeaINFO info; //GPS解碼后得到的信息
- nmeaPARSER parser; //解碼時(shí)使用的數(shù)據(jù)結(jié)構(gòu)
- uint8_t new_parse=0; //是否有新的解碼數(shù)據(jù)標(biāo)志
-
- nmeaTIME beiJingTime; //北京時(shí)間
-
- uint8_t ucStatus;
- char cStr [ 1000 ] ;
- char str_buff[100];
-
- LCD_SetFont(&Font8x16);
- LCD_SetColors(RED,BLACK);
-
- ILI9341_Clear(0,0,LCD_X_LENGTH,LCD_Y_LENGTH); /* 清屏,顯示全黑 */
- /*設(shè)置字體顏色及字體的背景顏色*/
- LCD_SetColors(RED,BLACK);
-
- ILI9341_DispStringLine_EN(LINE(1)," Wildfire STM32-F103");
- ILI9341_DispStringLine_EN(LINE(2)," GPS module");
-
- /* 設(shè)置用于輸出調(diào)試信息的函數(shù) */
- nmea_property()->trace_func = &trace;
- nmea_property()->error_func = &error;
- nmea_property()->info_func = &gps_info;
- /* 初始化GPS數(shù)據(jù)結(jié)構(gòu) */
- nmea_zero_INFO(&info);
- nmea_parser_init(&parser);
- while(1)
- {
-
- if(GPS_HalfTransferEnd) /* 接收到GPS_RBUFF_SIZE一半的數(shù)據(jù) */
- {
- /* 進(jìn)行nmea格式解碼 */
- nmea_parse(&parser, (const char*)&gps_rbuff[0], HALF_GPS_RBUFF_SIZE, &info);
-
- GPS_HalfTransferEnd = 0; //清空標(biāo)志位
- new_parse = 1; //設(shè)置解碼消息標(biāo)志
- }
- else if(GPS_TransferEnd) /* 接收到另一半數(shù)據(jù) */
- {
- nmea_parse(&parser, (const char*)&gps_rbuff[HALF_GPS_RBUFF_SIZE], HALF_GPS_RBUFF_SIZE, &info);
-
- GPS_TransferEnd = 0;
- new_parse =1;
- }
-
- if(new_parse ) //有新的解碼消息
- {
- /* 對(duì)解碼后的時(shí)間進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換成北京時(shí)間 */
- GMTconvert(&info.utc,&beiJingTime,8,1);
-
- /* 輸出解碼得到的信息 */
- printf("\r\n時(shí)間%d-%02d-%02d,%d:%d:%d\r\n", beiJingTime.year+1900, beiJingTime.mon,beiJingTime.day,beiJingTime.hour,beiJingTime.min,beiJingTime.sec);
- //info.lat lon中的格式為[degree][min].[sec/60],使用以下函數(shù)轉(zhuǎn)換成[degree].[degree]格式
-
- deg_lat = nmea_ndeg2degree(info.lat);
- deg_lon = nmea_ndeg2degree(info.lon);
-
- printf("\r\n緯度:%f,經(jīng)度%f\r\n",deg_lat,deg_lon);
- printf("\r\n海拔高度:%f 米 ", info.elv);
- printf("\r\n速度:%f km/h ", info.speed);
- printf("\r\n航向:%f 度", info.direction);
-
- printf("\r\n正在使用的GPS衛(wèi)星:%d,可見GPS衛(wèi)星:%d",info.satinfo.inuse,info.satinfo.inview);
- printf("\r\n正在使用的北斗衛(wèi)星:%d,可見北斗衛(wèi)星:%d",info.BDsatinfo.inuse,info.BDsatinfo.inview);
- printf("\r\nPDOP:%f,HDOP:%f,VDOP:%f",info.PDOP,info.HDOP,info.VDOP);
-
- /* 液晶輸出 */
-
- /* 設(shè)置前景顏色(字體顏色)*/
- LCD_SetTextColor(BLUE);
-
- ILI9341_DispStringLine_EN(LINE(5)," GPS Info:");
- /* 設(shè)置前景顏色(字體顏色)*/
- LCD_SetTextColor(WHITE);
-
- /* 顯示時(shí)間日期 */
- sprintf(str_buff," Date:%4d/%02d/%02d ", beiJingTime.year+1900, beiJingTime.mon,beiJingTime.day);
- ILI9341_DispStringLine_EN(LINE(6),str_buff);
-
- sprintf(str_buff," Time:%02d:%02d:%02d", beiJingTime.hour,beiJingTime.min,beiJingTime.sec);
- ILI9341_DispStringLine_EN(LINE(7),str_buff);
- /* 緯度 經(jīng)度*/
- sprintf(str_buff," latitude :%.6f ", deg_lat);
- ILI9341_DispStringLine_EN(LINE(8),str_buff);
-
- sprintf(str_buff," longitude :%.6f",deg_lon);
- ILI9341_DispStringLine_EN(LINE(9),str_buff);
-
- /* 正在使用的衛(wèi)星 可見的衛(wèi)星*/
- sprintf(str_buff," GPS Satellite in use :%2d ", info.satinfo.inuse);
- ILI9341_DispStringLine_EN(LINE(10),str_buff);
-
- sprintf(str_buff," GPS Satellite in view :%2d", info.satinfo.inview);
- ILI9341_DispStringLine_EN(LINE(11),str_buff);
- // /* 正在使用的衛(wèi)星 可見的衛(wèi)星*/
- // sprintf(str_buff," BDS Satellite in use :%2d ", info.BDsatinfo.inuse);
- // ILI9341_DispStringLine_EN(LINE(12),str_buff);
- //
- // sprintf(str_buff," BDS Satellite in view :%2d", info.BDsatinfo.inview);
- // ILI9341_DispStringLine_EN(LINE(13),str_buff);
-
- /* 海拔高度 */
- sprintf(str_buff," Altitude:%4.2f m", info.elv);
- ILI9341_DispStringLine_EN(LINE(12),str_buff);
-
- /* 速度 */
- sprintf(str_buff," speed:%4.2f km/h", info.speed);
- ILI9341_DispStringLine_EN(LINE(13),str_buff);
-
- /* 航向 */
- // sprintf(str_buff," Track angle:%3.2f deg", info.direction);
- // ILI9341_DispStringLine_EN(LINE(14),str_buff);
- DHT11_Data_TypeDef DHT11_Data;//聲明
- DHT11_Read_TempAndHumidity ( & DHT11_Data );
- a1=DHT11_Data.humi_int;
- b1=DHT11_Data.humi_deci;
- c1=DHT11_Data.temp_int;
- d1=DHT11_Data.temp_deci;
- LCD_SetFont(&Font8x16);
- LCD_SetColors(WHITE ,BLACK);
- sprintf(dispBuff," humi:%d.%dRH temp:%d.%dC",a1,b1,c1,d1);
- LCD_ClearLine(LINE(14));
- ILI9341_DispStringLine_EN(LINE(14),dispBuff); //14行顯示英文字符串
-
-
- printf ( "\r\n正在配置 ESP8266 ......\r\n" );
- macESP8266_CH_ENABLE();
-
- ESP8266_AT_Test ();
-
- ESP8266_Net_Mode_Choose ( STA );
- while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );
-
- ESP8266_Enable_MultipleId ( DISABLE );
-
- while ( ! ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );
-
- while ( ! ESP8266_UnvarnishSend () );
-
- printf ( "\r\n配置 ESP8266 完畢\r\n" );
-
- if ( DHT11_Read_TempAndHumidity ( & DHT11_Data ) == SUCCESS ) //讀取 DHT11 溫濕度信息
- {
- sprintf ( cStr, "\r\n檢測(cè)成功!\r\n\r\n濕度為%d.%d %RH ,溫度為 %d.%d℃ \r\n經(jīng)度是%f ,緯度是%f\r\n",
- DHT11_Data .humi_int, DHT11_Data .humi_deci, DHT11_Data .temp_int, DHT11_Data.temp_deci, deg_lat,deg_lon);
- }
- printf ( "%s", cStr ); //打印讀取 DHT11 溫濕度信息
-
- ESP8266_SendString ( ENABLE, cStr, 0, Single_ID_0 ); //發(fā)送 DHT11 溫濕度信息和GPS信息到網(wǎng)絡(luò)調(diào)試助手
-
- if ( ucTcpClosedFlag ) //檢測(cè)是否失去連接
- {
- ESP8266_ExitUnvarnishSend (); //退出透?jìng)髂J?br />
-
- do ucStatus = ESP8266_Get_LinkStatus (); //獲取連接狀態(tài)
- while ( ! ucStatus );
-
- if ( ucStatus == 4 ) //確認(rèn)失去連接后重連
- {
- printf ( "\r\n正在重連熱點(diǎn)和服務(wù)器 ......\r\n" );
-
- while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );
-
- while ( ! ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );
-
- printf ( "\r\n重連熱點(diǎn)和服務(wù)器成功\r\n" );
- }
-
- while ( ! ESP8266_UnvarnishSend () );
-
- }
- }
-
- new_parse = 0;
- }
- }
- 這是GPS解析數(shù)據(jù)、LCD顯示GPS和溫度、WiFi傳輸GPS和溫度的程序。有了WiFi傳輸函數(shù)LCD更新顯示GPS和溫度信息的頻率變慢了。
復(fù)制代碼 |
|