« 自宅の固定電話を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を接続テスト »

Arduino」カテゴリの記事

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

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

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/540128/66904630

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

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

October 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

無料ブログはココログ