Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

高機能なGPSモジュールZED F9Pをつかう その3:Arduinoでつかう

RasPiでPythonという方法のほかに、Arduinoでやる手もあります。

実際のところ

Qwiicコネクタを経由した構成はこんな感じ。


導入はIDEなら楽々。
f:id:shuzo_kino:20200529023001p:plain


SparkFun_Ublox_Arduino_Library/Example1_GetPositionAccuracy.ino at master · sparkfun/SparkFun_Ublox_Arduino_Library · GitHub
をそのまんま写経

#include <Wire.h> //Needed for I2C to GPS

#include "SparkFun_Ublox_Arduino_Library.h" //http://librarymanager/All#SparkFun_Ublox_GPS
SFE_UBLOX_GPS myGPS;

long lastTime = 0; //Simple local timer. Limits amount if I2C traffic to Ublox module.

void setup()
{
  Serial.begin(115200);
  while (!Serial); //Wait for user to open terminal
  Serial.println("SparkFun Ublox Example");

  Wire.begin();

  if (myGPS.begin() == false) //Connect to the Ublox module using Wire port
  {
    Serial.println(F("Ublox GPS not detected at default I2C address. Please check wiring. Freezing."));
    while (1);
  }

  myGPS.setI2COutput(COM_TYPE_UBX); //Set the I2C port to output UBX only (turn off NMEA noise)
  myGPS.saveConfiguration(); //Save the current settings to flash and BBR
}

void loop()
{
  //Query module only every second. Doing it more often will just cause I2C traffic.
  //The module only responds when a new position is available
  if (millis() - lastTime > 1000)
  {
    lastTime = millis(); //Update the timer

    long latitude = myGPS.getLatitude();
    Serial.print(F("Lat: "));
    Serial.print(latitude);

    long longitude = myGPS.getLongitude();
    Serial.print(F(" Long: "));
    Serial.print(longitude);
    Serial.print(F(" (degrees * 10^-7)"));

    long altitude = myGPS.getAltitude();
    Serial.print(F(" Alt: "));
    Serial.print(altitude);
    Serial.print(F(" (mm)"));

    long accuracy = myGPS.getPositionAccuracy();
    Serial.print(F(" 3D Positional Accuracy: "));
    Serial.print(accuracy);
    Serial.println(F("mm"));
  }

}

出力結果はこんな塩梅

SparkFun Ublox Example
Lat: xxxxxxxxxx Long: yyyyyyyyyy (degrees * 10^-7) Alt: 44805 (mm) 3D Positional Accuracy: 2766mm

下7ケタで小数点をうってやると、座標変換できます。
私は数値があまりに正確すぎて禿げました。
https://www.openstreetmap.org/?mlat=xx.xxxxxxx&mlon=yyy.yyyyyyy&zoom=20

参考もと

github.com