2018年5月11日 星期五

DIY - ESP8266:ESP-12F u-blox5 GPS 模組程式(九十三)

DIY - ESP8266:ESP-12F u-blox5 GPS 模組程式(九十三):

ESP8266 ESP-12F u-blox5 GPS 模組程式主要是從 UART 接收資料,ESP8266 便會拆解資料,然後顯示在 SSD1306 OLED 顯示屏上。u-blox5 GPS 模組是可以接收到 GPGGA(Global Positioning System Fix Data)、GPGSA(GPS DOP and active satellites)、GPGSV(GPS Satellites in view)、GPRMC(Recommended minimum specific GPS/Transit data)、GPVTG(Track Made Good and Ground Speed)、GPGLL(Geographic Position, Latitude / Longitude and time)、和 GPZDA(Date & Time UTC,day,month,year and local time zone),筆者現在祇是將 GPGGA 的資料訊息拆解,其他未有拆解,等需要便會加入程式內。

ESP8266 u-blox5 GPS 模組
NMEA 標準格式:
大部份的 GPS receiver 都具被有美國國家海洋電子學會(National Marine Electronics Association,NMEA)所制定的標準規格,其制定了所有航海電子儀器間的通訊標準,包括了資料的格式及傳輸資料的通訊協定。NMEA 規格有 0180、0182、0183 等三種,目前廣泛使用的 NMEA-0183 的版本為 Ver. 2.01。

NMEA 格式所傳輸的資料為美國國家標準資訊交換碼(American Standard Code for Information Interchange,ASCII),以「句子(Sentence)」的方式傳輸資料,每一個句子以「$」為起始位置,而以 16進位控制碼「13」、「10」為終止,及 ASCII 中的 Carriage Return{CR} 和 Line Feed{LF} 碼。

GPS 資料信息:
GPS
Description
說明
最大幀長
1
$GPGGA
GPS定位信息
72
2
$GPGSA
當前衛星信息
65
3
$GPGSV
可見衛星信息
210
4
$GPRMC
推薦定位信息
70
5
$GPVTG
地面速度信息
34
6
$GPGLL
大地坐標信息

7
$GPZDA
當前時間 UTC信息


$GPGGA(GPS定位信息 / Global Positioning System Fix Data):
  1. UTC 時間,hhmmss(時分秒)格式
  2. 緯度 ddmm.mmmm(度分)格式(前面的0也將被傳輸)
  3. 緯度半球 N(北半球)或 S(南半球) 經度 dddmm.mmmm(度分)格式(前面的0也將被傳輸)
  4. 經度半球 E(東經)或 W(西經)
  5. GPS 狀態:0=未定位,1=非差分定位,2=差分定位,6=正在估算
  6. 正在使用解算位置的衛星數量(00~12)(前面的0也將被傳輸)
  7. DOP 水準精度因數(0.5~99.9)
  8. 海拔高度(-9999.9~99999.9)
  9. 地球橢球面相對大地水準面的高度
  10. 差分時間(從最近一次接收到差分信號開始的秒數,如果不是差分定位將為空)
  11. 差分站 ID 號 0000~1023(前面的 0 也將被傳輸,如果不是差分定位將為空)

ESP8266 ESP-12F u-blox5 GPS 模組初始化程式:
//  UART0 TX0 - GPIO1
//  UART0 RX0 - GPIO3
//  Init UART Baud Rate = 9600
    uart_init(9600, 9600);

ESP8266 ESP-12F u-blox5 GPS 模組讀取數據程式:
/******************************************************************************
* GPGGA (Global positioning system fix data)
*
* Field Name               Format             Unit     Description
* 0       $GPGGA         string               -           Message ID, GGA protocol header
* 1       hhmmss.ss       hhmmss.sss      -           UTC Time
* 2       Latitude           ddmm.mmmm -           Latitude
* 3       N                     char                 -           N/S Indicator
* 4       Longitude        dddmm.mmmm-          Longitude
* 5       E                      char                 -           E/W indicator
* 6       FS                    digit                 -           Position Fix Status Indicator
* 7       NoSV               numeric           -           Satellites Used
* 8       HDOP              numeric           -           Horizontal Dilution of Precision
* 9       msl                   numeric           m         MSL Altitude
* 10     uMsl                char                 -           Units, Meters
* 11     Altref               numeric           m         Geoid Separation
* 12     uSep                char                 -           Units, Meters
* 13     DiffAge           numeric           s           Age of Differential Corrections
* 14     DiffStation       numeric           -           Diff. Reference Station ID
* 15     cs                     hexadecimal    -           Checksum
* 16            char                 -           Carriage Return and Line Feed
******************************************************************************/
void ICACHE_FLASH_ATTR parse_gga(uint8 *nmea)
{
    uint8 nmealen = os_strlen(nmea);
    uint8 *p = nmea;
    uint8 q[20] = {0};

    // get time
    p = os_strchr(p, ',')+1;

    uint8 spos, epos, pstr, nstr, nfield;
    spos=0;
    nfield=0;
    for(epos=0; epos
    {
            //os_memcpy(&q, p, 9);
            pstr=p[epos];
            if (pstr == ',')
            {
                        nfield++;
                        nstr=epos-spos;
                        if (nstr>0)
                        {
                                    substring(p, q, spos,nstr);                    
                                    switch(nfield){
                                    case 1:
                                                parse_utc(&gps_string, q);
                                                break;
                                    case 2:
                                                parse_latitude(&gps_string, q);
                                                break;
                                    case 3:
                                                gps_string.gps_latitudeD[0] = q[0];
                                                gps_string.gps_latitudeD[1] = '\0';
                                                break;                                     
                                    case 4:
                                                parse_longitude(&gps_string, q);
                                                break;
                                    case 5:
                                                gps_string.gps_longitudeD[0] = q[0];
                                                gps_string.gps_longitudeD[1] = '\0';
                                                break;
                                    case 7:
                                                gps_string.gps_NoSV[0] = q[0];
                                                gps_string.gps_NoSV[1] = '\0';
                                    case 9:
                                                parse_altitude(&gps_string, q);
                                                break;
                                    default:
                                                break;
                                   
                                    } // End Switch
                                    spos=epos+1;
                        }

            }         
}
}

u-blox5 GPS 模組放置在窗簾上
ESP8266 u-blox5 GPS 模組顯示 GPS 資料
ESP8266 u-blox5 GPS 模組顯示 GPS 資料
ESP8266 程式:DIY – ESP12F – 017 GPS 03 - GGA Parse Data - 20180405

全球衛星系統:
  • 全球導航衛星系統 - (GNSS)Global Navigation Satellite System (GNSS)
  • 全球定位系統(GPS) - Global Positioning System (GPS) 
  • GLONASS(俄羅斯) - GLONASS (Russian)
  • 北斗(BDS) - (中國)BeiDou (BDS) (Chinese)
  • 伽利略(歐洲) - Galileo (European)
  • 印度區域導航衛星系統(IRNSS) - Indian Regional Navigation Satellite System (IRNSS) (India)
  • 準天頂衛星系統 (QZSS) - (Japan) Quasi-Zenith Satellite System (QZSS) (Japan)
  • 中國區域定位系統 - (CAPS)
  • X射線脈衝星導航 - (X-ray Pulsar-based Navigation)
相關網址:
※ Snooper Shotsaver Tour Pro S320 拆解(一)
※ DIY - ESP8266:ESP-12F u-blox5 GPS 模組介紹(八十九)
※ DIY - ESP8266:ESP-12F u-blox5 GPS 模組組裝(九十)
※ DIY - ESP8266:ESP-12F u-blox5 GPS 模組 u-center 測試(九十一)
※ DIY - ESP8266:ESP-12F u-blox5 GPS 模組電路(九十二)

2018年 5月 11日 天氣報告
氣溫:24.5@ 21:20
相對濕度:百分之 88%
天氣:大致多雲

沒有留言:

張貼留言