« 自宅の固定電話をPCで受け管理する(CTI連携) | Main | Wemos Lolin32 OLED module に RobotDyn microSD boardを接続テスト »

07/05/2018

AE-GYSFDMAXB と Wemos LOLIN32 で GPS 受信表示

Img_20180705_165137a Img_20180705_165223a 太陽誘電製の小型GPSモジュール「GYSFDMAXB」をWEMOS LOLIN32に繋いで、GPS受信表示してみた。

GYSFDMAXBは、日本の準天頂衛星システム(QZSS)「みちびき」3機受信(衛星番号193,194,195)に対応した太陽誘電製の小型高感度GPSモジュールで、秋月電子通商から購入した。
基板の大きさや性能等の詳細データは、秋月電子の商品ページから辿ることが出来る。

Wemos Lolin32は、Arduino ESP32 WiFi+Bluetooth デュアルESP-32SESP8266 OLEDモジュール(技適マーク付き)である。OLEDが既に装着されているので、携帯する機器を小型軽量に纏めるには便利かな・・・と思い、Banggoodから購入した。CNからの配送で1179円だった。購入し、これを使おうと思ってから気づいたが、これを使っての事例が少なく、動かせるようになるまで苦労した。

上記のディバイスを使ってのGPS受信結果は、左上の写真のようになった。
GYSFDMAXBの5V電源は、Wemos Lolin32のOLEDモジュール左下にある5V端子から、ブレッドボードの+電源へ、GNDはOLEDモジュールの中央部上にあるGND端子からLolin32のモジュールの下を通してブレッドボードの-端子側へ接続。

GYSFDMAXBの信号ケーブル「TXD」は、Lolin32の16番ピンへ接続した。(写真緑色の線->黄色(Lolin32の基板の下で、16番ピンに接続している))

③OLEDモジュールは、Lolin32の基板内部で結線されている。

《Sketch作成に関して》

①GPSの信号処理では「tinyGPS++」を用いたが、別のArduino基板で製作していたSketchを流用したのでその名残で使ってしまった。別のライブラリを使っても良かっただろうと思っている。

②Lolin32に付いているOLED1306を使うために”SSD1306Wire.h”が必要。
 ディスプレイは内部結線されているので、設定は、
  SSD1306Wire  display(0x3c, 5, 4)   となる。

③GPS信号は、Lolin32に読み込ませるだけなので、HadwareSerialを使うと Serial2で丁度16番ピンに繋ぐことができる。
 それで、HardwareSerial GPSRaw(2) とした。
 また、GPSの初期設定は、
  GPSRaw.begin(GPSBaud, SERIAL_8N1, 16, 17)   とした。
   ここで、GPSBaudは 9600 としている。

④ここまで決めれば、あとは自分の気に入ったように
Display用のSketchを書けばいい。
 面倒なのは、このOLEDは先に描いた場所に上書きすると重なった表示になるので、一度描いたら消さないといけない。これを解消するために簡単なテクニックが要る。

GPS受信のSketchを一度でも書いたことがある人なら、記載したSketchを見れば、処理の方法は概略分かると思うので、あまりSketchの中にコメントは記載しない。

⑤Sketch を書き込むときの注意点
 ・ボードは WEMOS LOLIN32
 ・らいぶらりーとして、ESP8266 and ESP32 Oled Driver for SSD1306 display by Daniel Eichhorn, Fabrice Weinberg Version 4.0.0 をインストールすること
 ・tinyGPS++.h のインストールを忘れないように。
 ・Sketchが書き込まれるときに Lolin32 裏面にある Boot ボタンを 書込みが始まるまで「カチカチ」と押してやる必要があります。これをしないと、Lolinが、「タイムオーバーで書き込めませんでした」と宣のですよ・・・

《Sketch》

// GPS Tracker    Sketch for Wemos LOLIN32  2018/07/05
// The serial connection to the GPS device
  #include <TinyGPS++.h>
  #include "SSD1306Wire.h"   // legacy include: '#include "SSD1306.h"'
  HardwareSerial GPSRaw(2);  // ESP32 UART2 GPIO-16 ( RXD2 ) --- GPS TXD
  const int UTC_offset = 9;  //  Japan Time
  static const int GPSBaud = 9600;
//  static const int MAX_SATELLITES = 40;
  TinyGPSPlus gps;  // The TinyGPS++ object
  TinyGPSCustom totalGPGSVMessages(gps, "GPGSV", 1); // $GPGSV sentence, first element
  TinyGPSCustom messageNumber(gps, "GPGSV", 2);      // $GPGSV sentence, second element
  TinyGPSCustom satsInView(gps, "GPGSV", 3);         // $GPGSV sentence, third element
  SSD1306Wire  display(0x3c, 5, 4);
  
void setup()
{
  Serial.begin(115200);
  GPSRaw.begin(GPSBaud, SERIAL_8N1, 16, 17);
  display.init();
}

void loop()
{
  if (GPSRaw.available() > 0)
  {
   gps.encode(GPSRaw.read());
   if (totalGPGSVMessages.isUpdated())
   {
    display.clear();
    printDateTime(gps.date, gps.time); 
    display.drawString(0,20,"Lat:");
    display.drawString(30,20,String(gps.location.lat(), 6));
    display.drawString(0,30,"Lng:"); 
    display.drawString(30,30,String(gps.location.lng(), 6)); 
    display.drawString(0,40,"Alt:");
    display.drawString(30,40,String(gps.altitude.meters()) + "m");
    display.display();

    int totalMessages = atoi(totalGPGSVMessages.value());
    int currentMessage = atoi(messageNumber.value());    
    if (totalMessages == currentMessage)
    {
     display.drawString(0,50,"Sat:");
     display.drawString(30,50,String(gps.satellites.value()) + " in use");
     display.display(); 
    }
   }
  }
}

static void printDateTime(TinyGPSDate &d, TinyGPSTime &t)
{
  display.setFont(ArialMT_Plain_10);
  if (!d.isValid())
  {
    display.drawString(0,0,"*****");  // 10 character
    display.display();
  }
  else
  {
  char sz[32];
  sprintf(sz, "%02d/%02d/%02d ", d.year(), d.month(), d.day());
  display.drawString(0,0,String(sz));
  display.display();
  }
  if (!t.isValid())
  {
  display.drawString(60,0,"*****");
  display.display();
  }
  else
  {
  char sz[32];
  sprintf(sz, "%02d:%02d:%02d ", t.hour() + UTC_offset, t.minute(), t.second());
  display.setFont(ArialMT_Plain_16);
  display.drawString(60,0,String(sz));
  display.display();
  display.setFont(ArialMT_Plain_10);
  }
}

« 自宅の固定電話をPCで受け管理する(CTI連携) | Main | Wemos Lolin32 OLED module に RobotDyn microSD boardを接続テスト »

PC and PC troubles」カテゴリの記事

Arduino」カテゴリの記事

Comments

Post a comment

Comments are moderated, and will not appear on this weblog until the author has approved them.

(Not displayed with comment.)

TrackBack


Listed below are links to weblogs that reference AE-GYSFDMAXB と Wemos LOLIN32 で GPS 受信表示:

« 自宅の固定電話をPCで受け管理する(CTI連携) | Main | Wemos Lolin32 OLED module に RobotDyn microSD boardを接続テスト »

March 2019
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

無料ブログはココログ