« Wemos Lolin32 OLED module に RobotDyn microSD boardを接続テスト | Main | 2018年7月、プリンスルートを使って富士登山 »

08/02/2018

Wemos Lolin32 を使ってNMEAデータの","区切り

Img_20180802_133910 Img_20180802_133950 天頂衛星が受信できるのかを調べたいと思い、Wemos Lolin32 OLED module を使って、
①NMEAのRawデータを受信しシリアルモニター表示する、
②受信したデータを後処理するために、”,” 区切りし、シリアルモニターに表示する

をやってみた。

受信データ間隔は極めて短いので、②の処理を、全てのデータについて一律に処理するのでは、データ区切りと判別処理で『もたついて』いる間に、受信データの取りこぼしをしてしまうことがわかった。

データを区切って、その後の処理に繋げるためには、「処理を行いたい部分のデータに特化したデータの読み込み」などを行わないと、受信データは正確性に欠けるように思う。


使ったパーツは、

Wemos Lolin32 ESP32 OLED display付き  Banggood から購入@1791円

②GPS module「
AE-GYSFDMAXB 」 秋月電子から購入@2100円
③ブレッドボード
④ジャンパー線


結線は、

①Lolin32とGPS moduleとの電源線の接続
②Lolin32の16番ピンとGPS module「AE-GYSFDMAXB
」 のTXDとの接続



ボードの設定、他

①WEMOS LOLIN32  を使う

②GPSとのSerial通信は、HardwareSerial GPSRaw(2) を使う

③赤字で「connecting ...」となったら、ボードの裏側の『Boot』ボタンを長押しして、次のステップに進むようにすること。

《Sketch-1:NMEAのRawデータを受信しシリアルモニター表示》

// for Wemos Lolin-EPS32
static const uint32_t GPSBaud = 9600;

// The serial connection to the GPS device
 HardwareSerial GPSRaw(2);  // ESP32 UART2 GPIO-16 ( RXD2 ) --> GPS TXD

void setup() {
  Serial.begin(115200);
  GPSRaw.begin(GPSBaud, SERIAL_8N1, 16, 17);
}

void loop() {
  if (GPSRaw.available())
  {
    String Buffer = "";
    while (GPSRaw.available())
    {
       char GPSRX = GPSRaw.read();
       Buffer += GPSRX;
    }
    Serial.print(Buffer);
  }
}

Rawデータ出力はこのようになる。
Gpsrawdata












《Sketch-2:GPS受信データを”,” 区切りし、シリアルモニター表示》
ここでは、配列の中に切り取ったデータを入れたが、シリアルモニターへの表示では、Bufferデータをそのまま表示している。(中途半端な処理だとは思うが・・・)

// for Wemos Lolin-EPS32
static const uint32_t GPSBaud = 9600;

// The serial connection to the GPS device
 HardwareSerial GPSRaw(2);  // ESP32 UART2 GPIO-16 ( RXD2 ) --> GPS TXD
String words[25];

void setup() {
  Serial.begin(115200);
  GPSRaw.begin(GPSBaud, SERIAL_8N1, 16, 17);
}

void loop() {
    String Buffer = "";
    int i=0;
    while (GPSRaw.available()) 
    {
        char GPSRX = GPSRaw.read();
        if(GPSRX == ',') {
          words[i] = Buffer;
          Serial.print("word[");
          Serial.print(i);
          Serial.print("]= ");
          Serial.print(Buffer);
          Serial.print("  ");
          Buffer = "";
          i++;
        }
        else
        {
        if(GPSRX == '\n') {
          words[i] = Buffer;
          Serial.print("word[");
          Serial.print(i);
          Serial.print("] = ");
          Serial.print(Buffer);
          Serial.println(""); 
          Buffer = "";
          i = 0;
          }
        else {
          Buffer += GPSRX;
        }
      }
   }
}

コンマ切り出力はこのようになる。
2

データの取りこぼしなどが起きてしまっている・・・

« Wemos Lolin32 OLED module に RobotDyn microSD boardを接続テスト | Main | 2018年7月、プリンスルートを使って富士登山 »

Arduino」カテゴリの記事

December 2018
Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Recent Trackbacks

無料ブログはココログ