AE-GYSFDMAXB と Wemos LOLIN32 で GPS 受信表示
太陽誘電製の小型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」カテゴリの記事
- NodeMCU1.0 or ESP32 Dev Module を使って 8x8 dotmatrix LEDでデジタル時計をつくる(2020.05.21)
- ガラ携Docomo のメールを PCで読む(2019.09.28)
- Linux Mint 19.1 に Virus 対応ソフト ClamAV を Install(2019.05.09)
「Arduino」カテゴリの記事
- NodeMCU1.0 or ESP32 Dev Module を使って 8x8 dotmatrix LEDでデジタル時計をつくる(2020.05.21)
- 14segment LED を使ってみる(2020.05.06)
- @nifty ココログでアップロードしたソースリストを綺麗に見せる方法(2020.03.11)
« 自宅の固定電話をPCで受け管理する(CTI連携) | Main | Wemos Lolin32 OLED module に RobotDyn microSD boardを接続テスト »
Comments