|
| 1 | +/* |
| 2 | + Send UBX binary commands to enable RTCM sentences on Ublox ZED-F9P module |
| 3 | + Based on Example7 By: Nathan Seidle |
| 4 | + SparkFun Electronics |
| 5 | + Updated by Paul Clark to demonstrate setVal8/16/32, newCfgValset8/16/32, addCfgValset8/16/32 and sendCfgValset8/16/32 |
| 6 | + Date: July 1st, 2019 |
| 7 | + License: MIT. See license file for more information but you can |
| 8 | + basically do whatever you want with this code. |
| 9 | +
|
| 10 | + Ublox changed how to configure their modules in 2019. As of version 23 of the UBX protocol the |
| 11 | + UBX-CFG commands are deprecated; they still work, they just recommend using VALSET, VALGET, and VALDEL |
| 12 | + commands instead. This example shows how to use this new command structure. |
| 13 | +
|
| 14 | + Feel like supporting open source hardware? |
| 15 | + Buy a board from SparkFun! |
| 16 | + ZED-F9P RTK2: https://www.sparkfun.com/products/15136 |
| 17 | + NEO-M8P RTK: https://www.sparkfun.com/products/15005 |
| 18 | + SAM-M8Q: https://www.sparkfun.com/products/15106 |
| 19 | +
|
| 20 | + Hardware Connections: |
| 21 | + Plug a Qwiic cable into the GPS and a RedBoard Qwiic or BlackBoard |
| 22 | + If you don't have a platform with a Qwiic connection use the SparkFun Qwiic Breadboard Jumper (https://www.sparkfun.com/products/14425) |
| 23 | + Open the serial monitor at 115200 baud to see the output |
| 24 | +*/ |
| 25 | + |
| 26 | +#include <Wire.h> //Needed for I2C to GPS |
| 27 | + |
| 28 | +#include "SparkFun_Ublox_Arduino_Library.h" //http://librarymanager/All#SparkFun_Ublox_GPS |
| 29 | +SFE_UBLOX_GPS myGPS; |
| 30 | + |
| 31 | +void setup() |
| 32 | +{ |
| 33 | + Serial.begin(115200); |
| 34 | + while (!Serial); //Wait for user to open terminal |
| 35 | + Serial.println("Ublox multi setVal example"); |
| 36 | + |
| 37 | + Wire.begin(); |
| 38 | + Wire.setClock(400000); //Increase I2C clock speed to 400kHz |
| 39 | + |
| 40 | + if (myGPS.begin() == false) //Connect to the Ublox module using Wire port |
| 41 | + { |
| 42 | + Serial.println(F("Ublox GPS not detected at default I2C address. Please check wiring. Freezing.")); |
| 43 | + while (1); |
| 44 | + } |
| 45 | + |
| 46 | + myGPS.enableDebugging(); //Enable debug messages over Serial (default) |
| 47 | + //myGPS.enableDebugging(SerialUSB); //Enable debug messages over Serial USB |
| 48 | + |
| 49 | + bool setValueSuccess = true; |
| 50 | + |
| 51 | + //These key values are hard coded. You can obtain them from the ZED-F9P interface description doc |
| 52 | + //or from u-center's Messages->CFG->VALSET window. Keys must be 32-bit. |
| 53 | + //Choose setVal8, setVal16 or setVal32 depending on the required value data width (1, 2 or 4 bytes) |
| 54 | + //L, U1, I1, E1 and X1 values are 8-bit |
| 55 | + //U2, I2, E2 and X2 values are 16-bit |
| 56 | + //U4, I4, R4, E4, X4 values are 32-bit |
| 57 | + |
| 58 | + setValueSuccess &= myGPS.setVal8(0x10930006, 0); //Enable high precision NMEA (value is 8-bit (L / U1)) |
| 59 | + //setValueSuccess &= myGPS.setVal16(0x30210001, 200); //Set measurement rate to 100ms (10Hz update rate) (value is 16-bit (U2)) |
| 60 | + //setValueSuccess &= myGPS.setVal16(0x30210001, 200, 1); //Set rate setting in RAM instead of BBR |
| 61 | + setValueSuccess &= myGPS.setVal16(0x30210001, 1000); //Set measurement rate to 1000ms (1Hz update rate) (value is 16-bit (U2)) |
| 62 | + |
| 63 | + //Below is the original way we enabled a single RTCM message on the I2C port. After that, we show how to do the same |
| 64 | + //but with multiple messages all in one go using newCfgValset, addCfgValset and sendCfgValset. |
| 65 | + //Original: myGPS.enableRTCMmessage(UBX_RTCM_1005, COM_PORT_I2C, 1); //Enable message 1005 to output through I2C port, message every second |
| 66 | + |
| 67 | + //Begin with newCfgValset8/16/32 |
| 68 | + setValueSuccess &= myGPS.newCfgValset8(0x209102bd, 1); //Set output rate of msg 1005 over the I2C port to once per measurement (value is 8-bit (U1)) |
| 69 | + //setValueSuccess &= myGPS.newCfgValset8(0x209102bd, 1, 7); //Set this and the following settings into Flash/RAM/BBR instead of BBR |
| 70 | + //Add extra keyIDs and values using addCfgValset8/16/32 |
| 71 | + setValueSuccess &= myGPS.addCfgValset8(0x209102cc, 1); //Set output rate of msg 1077 over the I2C port to once per measurement (value is 8-bit (U1)) |
| 72 | + setValueSuccess &= myGPS.addCfgValset8(0x209102d1, 1); //Set output rate of msg 1087 over the I2C port to once per measurement (value is 8-bit (U1)) |
| 73 | + setValueSuccess &= myGPS.addCfgValset8(0x209102d6, 1); //Set output rate of msg 1127 over the I2C port to once per measurement (value is 8-bit (U1)) |
| 74 | + setValueSuccess &= myGPS.addCfgValset8(0x20910318, 1); //Set output rate of msg 1097 over the I2C port to once per measurement (value is 8-bit (U1)) |
| 75 | + // Add the final value and send the packet using sendCfgValset8/16/32 |
| 76 | + setValueSuccess &= myGPS.sendCfgValset8(0x20910303, 10); //Set output rate of msg 1230 over the I2C port to once every 10 measurements (value is 8-bit (U1)) |
| 77 | + |
| 78 | + if (setValueSuccess == true) |
| 79 | + { |
| 80 | + Serial.println("Values were successfully set"); |
| 81 | + } |
| 82 | + else |
| 83 | + Serial.println("Value set failed"); |
| 84 | +} |
| 85 | + |
| 86 | +void loop() |
| 87 | +{ |
| 88 | + |
| 89 | +} |
0 commit comments