diff --git a/TTGO-T-Beam_GPS-reset/.gitignore b/TTGO-T-Beam_GPS-reset/.gitignore new file mode 100644 index 0000000..89cc49c --- /dev/null +++ b/TTGO-T-Beam_GPS-reset/.gitignore @@ -0,0 +1,5 @@ +.pio +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch diff --git a/TTGO-T-Beam_GPS-reset/.vscode/extensions.json b/TTGO-T-Beam_GPS-reset/.vscode/extensions.json new file mode 100644 index 0000000..0f0d740 --- /dev/null +++ b/TTGO-T-Beam_GPS-reset/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ] +} diff --git a/TTGO-T-Beam_GPS-reset/README.md b/TTGO-T-Beam_GPS-reset/README.md new file mode 100644 index 0000000..7af86ec --- /dev/null +++ b/TTGO-T-Beam_GPS-reset/README.md @@ -0,0 +1 @@ +# TTGO-T-Beam_GPS-reset \ No newline at end of file diff --git a/TTGO-T-Beam_GPS-reset/platformio.ini b/TTGO-T-Beam_GPS-reset/platformio.ini new file mode 100644 index 0000000..dc81b6b --- /dev/null +++ b/TTGO-T-Beam_GPS-reset/platformio.ini @@ -0,0 +1,20 @@ +[env] +platform = espressif32 @ 3.0.0 +framework = arduino +board = ttgo-t-beam +lib_ldf_mode = deep+ +monitor_speed = 115200 +check_tool = cppcheck +check_flags = + cppcheck: --suppress=*:*.pio\* --inline-suppr + +#ESP8266 and ESP32 OLED driver for SSD1306 displays +[env:ttgo-t-beam-v1] +lib_deps = + SparkFun u-blox Arduino Library + AXP202X_Library +build_flags = -DT_BEAM_V10 + +[env:ttgo-t-beam-v0_7] +lib_deps = SparkFun u-blox Arduino Library +build_flags = -DT_BEAM_V07 diff --git a/TTGO-T-Beam_GPS-reset/src/T22-GPS-restoreFactory-v2.ino b/TTGO-T-Beam_GPS-reset/src/T22-GPS-restoreFactory-v2.ino new file mode 100644 index 0000000..e0609d6 --- /dev/null +++ b/TTGO-T-Beam_GPS-reset/src/T22-GPS-restoreFactory-v2.ino @@ -0,0 +1,153 @@ +/************************************************************************* +Original sketch by LilyGO +https://github.com/LilyGO/TTGO-T-Beam/tree/master/GPS-T22_v1.0-20190612 + +Modified by ErikThevking on August 25, 2020. Updated on August 27, 2020. + +Purpose: to reset U-blox NEO GPS devices +on TTGO T-beam T22- V1.0 and 1.1 and maybe on 0.7 T-beams (uncomment yours) +This sketch will bring back U-blox GPS N6M & N8M factory settings +so that NMEA 9600 over the GPS serial output is enabled. + +Thanks to Kizniche for his advice on +https://github.com/kizniche/ttgo-tbeam-ttn-tracker/issues/20 + +Based on SparkFun's Ublox Arduino Library and examples +https://github.com/sparkfun/SparkFun_Ublox_Arduino_Library +where you can download the necessary SparkFun library. + +For T22_v1.0 20190612 and the T22_v1.1 20191212 boards +As the power management chipset changed, it +requires the axp20x library that can be found // AXP192 for T-beam; AXP202 for T-watch +https://github.com/lewisxhe/AXP202X_Library +**************************************************************************/ + +#undef GPS_RX_PIN +#undef GPS_TX_PIN + +#ifdef T_BEAM_V07 + #define GPS_RX_PIN 12 + #define GPS_TX_PIN 15 +#endif + +#ifdef T_BEAM_V10 + #include + #include + + AXP20X_Class axp; + + #define I2C_SDA 21 + #define I2C_SCL 22 + #define GPS_RX_PIN 34 + #define GPS_TX_PIN 12 +#endif + +#include + +SFE_UBLOX_GPS myGPS; +int state = 0; // steps through states +HardwareSerial SerialGPS(1); + + +void setup() +{ + Serial.begin(115200); + while (!Serial); // Wait for user to open the terminal + Serial.println("Connected to Serial"); + + #ifdef T_BEAM_V10 + Wire.begin(I2C_SDA, I2C_SCL); + if (!axp.begin(Wire, AXP192_SLAVE_ADDRESS)) + { + Serial.println("AXP192 Begin PASS"); + } else { + Serial.println("AXP192 Begin FAIL"); + } + axp.setPowerOutPut(AXP192_LDO3, AXP202_ON); // GPS main power + axp.setPowerOutPut(AXP192_LDO2, AXP202_ON); // provides power to GPS backup battery + axp.setPowerOutPut(AXP192_LDO3, AXP202_ON); + axp.setPowerOutPut(AXP192_DCDC2, AXP202_ON); + axp.setPowerOutPut(AXP192_EXTEN, AXP202_ON); + axp.setPowerOutPut(AXP192_DCDC1, AXP202_ON); // enables power to ESP32 on T-beam + axp.setPowerOutPut(AXP192_DCDC3, AXP202_ON); // I foresee similar benefit for restting T-watch + // where ESP32 is on DCDC3 but remember to change I2C pins and GPS pins! + #endif + SerialGPS.begin(9600, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN); + Serial.println("All comms started"); + delay(100); + +} + +void loop() +{ + Serial.println(); + Serial.print("===== STATE "); + Serial.println(state); + + switch (state) + { + case 0: // soft solution, should be sufficient and works in most (all) cases + do { + if (myGPS.begin(SerialGPS)) + { + Serial.println("Connected to GPS"); + myGPS.setUART1Output(COM_TYPE_NMEA); //Set the UART port to output NMEA only + myGPS.saveConfiguration(); //Save the current settings to flash and BBR + Serial.println("GPS serial connected, output set to NMEA"); + myGPS.disableNMEAMessage(UBX_NMEA_GLL, COM_PORT_UART1); + myGPS.disableNMEAMessage(UBX_NMEA_GSA, COM_PORT_UART1); + myGPS.disableNMEAMessage(UBX_NMEA_GSV, COM_PORT_UART1); + myGPS.disableNMEAMessage(UBX_NMEA_VTG, COM_PORT_UART1); + myGPS.disableNMEAMessage(UBX_NMEA_RMC, COM_PORT_UART1); + myGPS.enableNMEAMessage(UBX_NMEA_GGA, COM_PORT_UART1); + myGPS.saveConfiguration(); //Save the current settings to flash and BBR + break; + } + delay(1000); + } while(1); + Serial.println("Saved config"); + state++; + break; + + case 1: // hardReset + Serial.println("Issuing hardReset (cold start)"); + myGPS.hardReset(); + delay(3000); + SerialGPS.begin(9600, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN); + if (myGPS.begin(SerialGPS)) + { + Serial.println("Success."); + state++; + } else { + Serial.println("*** GPS did not respond, starting over."); + state = 0; + } + break; + + case 2: // factoryReset, expect to see GPS back at 9600 baud + Serial.println("Issuing factoryReset"); + myGPS.factoryReset(); + delay(3000); // takes more than one second... a loop to resync would be best + SerialGPS.begin(9600, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN); + if (myGPS.begin(SerialGPS)) + { + Serial.println("Success."); + Serial.println("Now GPS has been reset with factory settings,"); + Serial.println("give us some time to acquire satellites..."); + Serial.println(); + state++; + } else { + Serial.println("*** GPS did not respond, starting over."); + state = 0; + } + break; + + case 3: // lets test + for (uint32_t thisNr = 1; thisNr < 300000000; thisNr++) + { + if (SerialGPS.available()) { + Serial.write(SerialGPS.read()); // print anything comes in from the GPS + } + } + } +}