diff --git a/INSTALL.md b/INSTALL.md index 62460ef..58374c2 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -17,7 +17,7 @@ Search and install the following libaries:
  • AXP202X_Library
  • OneWire
  • DallasTemperature
  • -
  • XPowersLib<> +
  • XPowersLib

  • 2. Command Line Tool

    @@ -31,7 +31,7 @@ platformio lib install "AXP202X_Library"
    platformio lib install "Adafruit Unified Sensor"
    platformio lib install "OneWire"
    platformio lib install "DallasTemperature"
    -platformio lib install "XPowersLib
    +platformio lib install "XPowersLib'

    Check that the platformio.ini is available as it holds the board type for PlatformIO.
    After pressing the check mark the code will be compiled, after pressing the arrow it will be compiled and uploaded to a connected TTGO.
    diff --git a/LoRa aprs.code-workspace b/LoRa aprs.code-workspace new file mode 100644 index 0000000..0e059ab --- /dev/null +++ b/LoRa aprs.code-workspace @@ -0,0 +1,16 @@ +{ + "folders": [ + { + "path": "../LoRa aprs" + }, + { + "name": "TTGO-T-Beam-LoRa-APRS-master", + "path": "." + } + ], + "settings": { + "files.associations": { + "*.tpp": "cpp" + } + } +} \ No newline at end of file diff --git a/README.md b/README.md index 82edf37..5add2c4 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,11 @@ After connection with APRX based DIGI it can be used as KISS-TNC * Lora32 board support: DJ1AN * Self-telemetry improvement: KB1GIM * T-beam v1.2 board support: SP6NYA +* New XPowersib Library: SP6NYA ## Supported boards * TTGO T-beam v.0.7 -* TTGO T-beam v.1.0 +* LILYGO/TTGO T-beam v.1.0 - v.1.1 * LILYGO/TTGO T-Beam v.1.2 * Lora32 board @@ -47,6 +48,9 @@ After connection with APRX based DIGI it can be used as KISS-TNC * ((KISSTX)) - information about sending the frame sent by KISS * ((WEB TX)) - sending frame as requested via HTTP * ((TEL TX)) - information about sending telemetry +## LED'S information +* (Blue) Slow blinking - battery voltage 3.5V-3.3V +* (Blue) Fast blinking - battery voltage > 3.3V ## How to binary first flash readme... (thanx SP6VWX) * Download the appropriate binary file for your board from: https://github.com/SQ9MDD/TTGO-T-Beam-LoRa-APRS/releases @@ -118,6 +122,3 @@ This box allows firmware to be uploaded via OTA ## Default WiFi Password: * Default WiFi Password is: xxxxxxxxxx * that is, 10 times x - -## Known bugs -* T-beam v1.2 batterry voltage issue diff --git a/data_embed/index.html.out b/data_embed/index.html.out index 13017ec..47b149e 100644 Binary files a/data_embed/index.html.out and b/data_embed/index.html.out differ diff --git a/data_embed/js.js.out b/data_embed/js.js.out index 9a425ce..62cf6f1 100644 Binary files a/data_embed/js.js.out and b/data_embed/js.js.out differ diff --git a/data_embed/style.css.out b/data_embed/style.css.out index b59c1b4..dd62340 100644 Binary files a/data_embed/style.css.out and b/data_embed/style.css.out differ diff --git a/include/version.h b/include/version.h index dd44c6b..7c871a8 100644 --- a/include/version.h +++ b/include/version.h @@ -1,10 +1,10 @@ #ifndef BUILD_NUMBER - #define BUILD_NUMBER "66" + #define BUILD_NUMBER "127" #endif #ifndef VERSION - #define VERSION "v0.3.66- - 2023-09-09 17:44:17.377051" + #define VERSION "v0.4.127- - 2023-09-09 22:51:42.144437" #endif #ifndef VERSION_SHORT - #define VERSION_SHORT "v0.3.66-" + #define VERSION_SHORT "v0.4.127-" #endif diff --git a/platformio.ini b/platformio.ini index 1db5ea9..4bf3387 100644 --- a/platformio.ini +++ b/platformio.ini @@ -70,10 +70,9 @@ lib_deps = mikalhart/TinyGPSPlus@^1.0.3 adafruit/Adafruit SSD1306@^2.5.7 adafruit/Adafruit GFX Library@^1.11.7 - lewisxhe/AXP202X_Library@^1.1.3 - pau6.21.3lstoffregen/OneWire@^2.3.7 + paulstoffregen/OneWire@^2.3.7 sparkfun/SparkFun u-blox Arduino Library@^1.8.11 - bblanchon/ArduinoJson@^ + bblanchon/ArduinoJson@^6.21.3 [env:ttgo-t-beam-v1_2] platform = espressif32 @ 3.0.0 @@ -91,7 +90,6 @@ lib_deps = adafruit/Adafruit GFX Library@^1.11.7 paulstoffregen/OneWire@^2.3.7 sparkfun/SparkFun u-blox Arduino Library@^1.8.11 - lewisxhe/AXP202X_Library@^1.1.3 bblanchon/ArduinoJson@^6.21.3 [env:ttgo-t-beam-v0_7] @@ -107,8 +105,6 @@ lib_deps = mikalhart/TinyGPSPlus@^1.0.3 adafruit/Adafruit SSD1306@^2.5.7 adafruit/Adafruit GFX Library@^1.11.7 - lewisxhe/AXP202X_Library@^1.1.3 - paulstoffregen/OneWire@^2.3.7 sparkfun/SparkFun u-blox Arduino Library@^1.8.11 bblanchon/ArduinoJson@^6.21.3 @@ -125,7 +121,6 @@ lib_deps = mikalhart/TinyGPSPlus@^1.0.3 adafruit/Adafruit SSD1306@^2.5.7 adafruit/Adafruit GFX Library@^1.11.7 - lewisxhe/AXP202X_Library@^1.1.3 paulstoffregen/OneWire@^2.3.7 sparkfun/SparkFun u-blox Arduino Library@^1.8.11 bblanchon/ArduinoJson@^6.21.3 @@ -143,7 +138,6 @@ lib_deps = mikalhart/TinyGPSPlus@^1.0.3 adafruit/Adafruit SSD1306@^2.5.7 adafruit/Adafruit GFX Library@^1.11.7 - lewisxhe/AXP202X_Library@^1.1.3 paulstoffregen/OneWire@^2.3.7 sparkfun/SparkFun u-blox Arduino Library@^1.8.11 bblanchon/ArduinoJson@^6.21.3 @@ -161,7 +155,6 @@ lib_deps = mikalhart/TinyGPSPlus@^1.0.3 adafruit/Adafruit SSD1306@^2.5.7 adafruit/Adafruit GFX Library@^1.11.7 - lewisxhe/AXP202X_Library@^1.1.3 paulstoffregen/OneWire@^2.3.7 sparkfun/SparkFun u-blox Arduino Library@^1.8.11 bblanchon/ArduinoJson@^6.21.3 @@ -179,7 +172,6 @@ lib_deps = mikalhart/TinyGPSPlus@^1.0.3 adafruit/Adafruit SSD1306@^2.5.7 adafruit/Adafruit GFX Library@^1.11.7 - lewisxhe/AXP202X_Library@^1.1.3 paulstoffregen/OneWire@^2.3.7 sparkfun/SparkFun u-blox Arduino Library@^1.8.11 bblanchon/ArduinoJson@^6.21.3 @@ -197,7 +189,6 @@ lib_deps = mikalhart/TinyGPSPlus@^1.0.3 adafruit/Adafruit SSD1306@^2.5.7 adafruit/Adafruit GFX Library@^1.11.7 - lewisxhe/AXP202X_Library@^1.1.3 paulstoffregen/OneWire@^2.3.7 sparkfun/SparkFun u-blox Arduino Library@^1.8.11 bblanchon/ArduinoJson@^6.21.3 @@ -221,7 +212,6 @@ lib_deps = mikalhart/TinyGPSPlus@^1.0.3 adafruit/Adafruit SSD1306@^2.5.7 adafruit/Adafruit GFX Library@^1.11.7 - lewisxhe/AXP202X_Library@^1.1.3 paulstoffregen/OneWire@^2.3.7 sparkfun/SparkFun u-blox Arduino Library@^1.8.11 bblanchon/ArduinoJson@^6.21.3 diff --git a/src/TTGO_T-Beam_LoRa_APRS.ino b/src/TTGO_T-Beam_LoRa_APRS.ino index 1d5f95c..f0ae098 100644 --- a/src/TTGO_T-Beam_LoRa_APRS.ino +++ b/src/TTGO_T-Beam_LoRa_APRS.ino @@ -19,7 +19,6 @@ #include #include #include -#include #include "taskGPS.h" #include "version.h" #include "preference_storage.h" @@ -51,6 +50,7 @@ #define BUZZER 15 // enter your buzzer pin gpio const byte TXLED = 4; #elif T_BEAM_V1_0 + #define XPOWERS_CHIP_AXP192 #define I2C_SDA 21 #define I2C_SCL 22 #define BUTTON 38 //pin number for Button on TTGO T-Beam @@ -189,6 +189,7 @@ byte lora_FDeviceError; //flag, set to 1 if RFM98 device error byte lora_TXPacketL; //length of packet to send, includes source, destination and packet type. unsigned long lastTX = 0L; +float ConvertToV; float BattVolts; float InpVolts; @@ -248,7 +249,13 @@ uint8_t txPower = TXdbmW; static const adc_atten_t atten = ADC_ATTEN_DB_6; static const adc_unit_t unit = ADC_UNIT_1; #ifdef T_BEAM_V1_0 - AXP20X_Class axp; + bool pmu_flag = 0; +XPowersAXP192 PMU; + +void setFlag(void) +{ + pmu_flag = true; +} #elif T_BEAM_V1_2 //PMU TBEAM 1.2 bool pmu_flag = 0; XPowersAXP2101 PMU; @@ -282,6 +289,43 @@ char *ax25_base91enc(char *s, uint8_t n, uint32_t v){ return(s); } +#if defined(KISS_PROTOCOL) +/** + * + * @param TNC2FormatedFrame + */ +void sendToTNC(const String& TNC2FormatedFrame) { + if (tncToSendQueue){ + auto *buffer = new String(); + buffer->concat(TNC2FormatedFrame); + if (xQueueSend(tncReceivedQueue, &buffer, (1000 / portTICK_PERIOD_MS)) != pdPASS){ + // remove buffer on error + delete buffer; + } + } +} +#endif +void enablepins(){ + #ifdef T_BEAM_V1_2 + PMU.enableBattDetection(); + PMU.enableVbusVoltageMeasure(); + PMU.enableBattVoltageMeasure(); + PMU.enableSystemVoltageMeasure(); +#elif T_BEAM_V1_0 + PMU.enableBattDetection(); + PMU.enableVbusVoltageMeasure(); + PMU.enableBattVoltageMeasure(); + PMU.enableSystemVoltageMeasure(); +#elif T_BEAM_V0_7 /* + adcAttachPin(35); + adcStart(35); + analogReadResolution(10); + analogSetAttenuation(ADC_6db); */ + pinMode(35, INPUT); + //adc1_config_width(ADC_WIDTH_BIT_12); + //adc1_config_channel_atten(ADC1_CHANNEL_7,ADC_ATTEN_DB_11); +#endif +} void prepareAPRSFrame(){ String helper; String Altx; @@ -374,15 +418,6 @@ void buzzer(int* melody, int array_size){ } #endif -void sendpacket(){ - #ifdef BUZZER - int melody[] = {1000, 50, 800, 100}; - buzzer(melody, sizeof(melody)/sizeof(int)); - #endif - batt_read(); - prepareAPRSFrame(); - loraSend(txPower, lora_freq, outString); //send the packet, data is in TXbuff from lora_TXStart to lora_TXEnd -} /** * Send message as APRS LoRa packet @@ -426,18 +461,30 @@ void loraSend(byte lora_LTXPower, float lora_FREQ, const String &message) { } void batt_read(){ -#ifdef T_BEAM_v1_2 - BattVolts = PMU.getBattVoltage() / 1000; - InpVolts = PMU.getVbusVoltage() / 1000; + ConvertToV = 1000; +#ifdef T_BEAM_V1_2 + BattVolts = PMU.getBattVoltage()/ConvertToV; + InpVolts = PMU.getVbusVoltage()/ConvertToV; #elif T_BEAM_V1_0 - BattVolts = axp.getBattVoltage()/1000; - InpVolts = axp.getVbusVoltage()/1000; + BattVolts = PMU.getBattVoltage()/ConvertToV; + InpVolts = PMU.getVbusVoltage()/ConvertToV; #elif T_BEAM_V0_7 BattVolts = (((float)analogRead(35) / 8192.0) * 2.0 * 3.3 * (1100.0 / 1000.0))+0.41; // fixed thanks to Luca IU2FRL //BattVolts = adc1_get_raw(ADC1_CHANNEL_7)/1000; #else BattVolts = analogRead(35)*7.221/4096; #endif +Serial.print(BattVolts); +} + +void sendpacket(){ + #ifdef BUZZER + int melody[] = {1000, 50, 800, 100}; + buzzer(melody, sizeof(melody)/sizeof(int)); + #endif + batt_read(); + prepareAPRSFrame(); + loraSend(txPower, lora_freq, outString); //send the packet, data is in TXbuff from lora_TXStart to lora_TXEnd } void writedisplaytext(String HeaderTxt, String Line1, String Line2, String Line3, String Line4, String Line5) { @@ -449,17 +496,22 @@ void writedisplaytext(String HeaderTxt, String Line1, String Line2, String Line3 #endif #elif T_BEAM_V1_0 # ifdef ENABLE_LED_SIGNALING - axp.setChgLEDMode(AXP20X_LED_BLINK_4HZ); + PMU.setChargingLedMode(XPOWERS_CHG_LED_BLINK_1HZ); #endif #endif } else if(BattVolts <= 3.3){ #ifdef T_BEAM_V1_2 PMU.setChargingLedMode(XPOWERS_CHG_LED_BLINK_4HZ); + #elif T_BEAM_V1_0 + PMU.setChargingLedMode(XPOWERS_CHG_LED_BLINK_4HZ); + #endif + } + else if(BattVolts <=3.0){ + #ifdef T_BEAM_V1_2 //PMU.shutdown(); #elif T_BEAM_V1_0 - axp.setChgLEDMode(AXP20X_LED_OFF); - //axp.shutdown(); <-we need fix this + PMU.shutdown(); #endif } display.clearDisplay(); @@ -519,22 +571,22 @@ void displayInvalidGPS() { writedisplaytext(" " + Tcall, nextTxInfo, "LAT: not valid", "LON: not valid", "SPD: --- CRS: ---", getSatAndBatInfo()); } -#if defined(KISS_PROTOCOL) -/** - * - * @param TNC2FormatedFrame - */ -void sendToTNC(const String& TNC2FormatedFrame) { - if (tncToSendQueue){ - auto *buffer = new String(); - buffer->concat(TNC2FormatedFrame); - if (xQueueSend(tncReceivedQueue, &buffer, (1000 / portTICK_PERIOD_MS)) != pdPASS){ - // remove buffer on error - delete buffer; - } - } -} -#endif +//#if defined(KISS_PROTOCOL) +//** +// * +// * @param TNC2FormatedFrame +// * +//void sendToTNC(const String& TNC2FormatedFrame) { +// if (tncToSendQueue){ +// auto *buffer = new String(); +// buffer->concat(TNC2FormatedFrame); +// if (xQueueSend(tncReceivedQueue, &buffer, (1000 / portTICK_PERIOD_MS)) != pdPASS){ +// // remove buffer on error +// delete buffer; +// } +// } +//} +//#endif #if defined(ENABLE_WIFI) /** * @@ -631,11 +683,11 @@ String prepareCallsign(const String& callsign){ } preferences.putUInt(PREF_TNC_SELF_TELEMETRY_SEQ, tel_sequence); #elif T_BEAM_V1_0 - uint8_t b_volt = (axp.getBattVoltage() - 3000) / 5.1; - uint8_t b_in_c = (axp.getBattChargeCurrent()) / 10; - uint8_t b_out_c = (axp.getBattDischargeCurrent()) / 10; - uint8_t ac_volt = (axp.getVbusVoltage() - 3000) / 28; - uint8_t ac_c = (axp.getVbusCurrent()) / 10; + uint8_t b_volt = (PMU.getBattVoltage() - 3000) / 5.1; + uint8_t b_in_c = (PMU.getBatteryChargeCurrent()) / 10; + uint8_t b_out_c = (PMU.getBattDischargeCurrent()) / 10; + uint8_t ac_volt = (PMU.getVbusVoltage() - 3000) / 28; + uint8_t ac_c = (PMU.getVbusCurrent()) / 10; // Pad telemetry message address to 9 characters char Tcall_message_char[9]; sprintf_P(Tcall_message_char, "%-9s", Tcall); @@ -699,20 +751,6 @@ String prepareCallsign(const String& callsign){ // + SETUP --------------------------------------------------------------+// void setup(){ -#ifdef T_BEAM_V1_2 - //PMU.enableBattDetection(); - PMU.enableVbusVoltageMeasure(); - PMU.enableBattVoltageMeasure(); - PMU.enableSystemVoltageMeasure(); -#elif T_BEAM_V0_7 /* - adcAttachPin(35); - adcStart(35); - analogReadResolution(10); - analogSetAttenuation(ADC_6db); */ - pinMode(35, INPUT); - //adc1_config_width(ADC_WIDTH_BIT_12); - //adc1_config_channel_atten(ADC1_CHANNEL_7,ADC_ATTEN_DB_11); -#endif SPI.begin(SPI_sck,SPI_miso,SPI_mosi,SPI_ss); //DO2JMG Heltec Patch Serial.begin(115200); @@ -980,23 +1018,24 @@ void setup(){ PMU.setChargingLedMode(XPOWERS_CHG_LED_OFF); PMU.enableDC1(); // oled do not turn off #elif T_BEAM_V1_0 - if (!axp.begin(Wire, AXP192_SLAVE_ADDRESS)) { + if (!PMU.begin(Wire, AXP192_SLAVE_ADDRESS, I2C_SDA, I2C_SCL)) { } - axp.setLowTemp(0xFF); //SP6VWX Set low charging temperature - axp.setPowerOutPut(AXP192_LDO2, AXP202_ON); // LoRa + //axp.setLowTemp(0xFF); //SP6VWX Set low charging temperature need to convert + PMU.setLDO2Voltage(3300); + PMU.enableLDO2(); // LoRa if (gps_state){ - axp.setPowerOutPut(AXP192_LDO3, AXP202_ON); // switch on GPS + PMU.enableLDO3(); // switch on GPS } else { - axp.setPowerOutPut(AXP192_LDO3, AXP202_OFF); // switch off GPS + PMU.disableLDO3(); // switch off GPS } - axp.setPowerOutPut(AXP192_DCDC2, AXP202_ON); - axp.setPowerOutPut(AXP192_EXTEN, AXP202_ON); - axp.setDCDC1Voltage(3300); + PMU.enableDC2(); + //axp.setPowerOutPut(AXP192_EXTEN, AXP202_ON); NC + PMU.setDC1Voltage(3300); // Enable ADC to measure battery current, USB voltage etc. - axp.adc1Enable(0xfe, true); - axp.adc2Enable(0x80, true); - axp.setChgLEDMode(AXP20X_LED_OFF); - axp.setPowerOutPut(AXP192_DCDC1, AXP202_ON); // oled do not turn off + //axp.adc1Enable(0xfe, true); + //axp.adc2Enable(0x80, true); + PMU.setChargingLedMode(XPOWERS_CHG_LED_OFF); + PMU.enableDC1(); // oled do not turn off #endif if(!display.begin(SSD1306_SWITCHCAPVCC, SSD1306_ADDRESS)) { @@ -1184,7 +1223,7 @@ void loop() { #ifdef T_BEAM_V1_2 PMU.disableALDO3(); //GPS OFF #elif T_BEAM_V1_0 - axp.setPowerOutPut(AXP192_LDO3, AXP202_OFF); // GPS OFF + PMU.disableLDO3(); // GPS OFF #endif writedisplaytext("((GPSOFF))","","","","",""); next_fixed_beacon = millis() + fix_beacon_interval; @@ -1196,7 +1235,7 @@ void loop() { #ifdef T_BEAM_v1_2 PMU.enableALDO3(); // GPS ON #elif T_BEAM_V1_0 - axp.setPowerOutPut(AXP192_LDO3, AXP202_ON); + PMU.enableLDO3(); #endif writedisplaytext("((GPS ON))","","","","",""); // GPS ON #ifdef ENABLE_PREFERENCES @@ -1254,8 +1293,8 @@ void loop() { if(shutdown_countdown_timer_enable){ if(millis() >= shutdown_countdown_timer){ - axp.setChgLEDMode(AXP20X_LED_OFF); - axp.shutdown(); + PMU.setChargingLedMode(XPOWERS_CHG_LED_OFF); + PMU.shutdown(); } } } @@ -1281,7 +1320,7 @@ void loop() { #endif #elif T_BEAM_V1_0 #ifdef ENABLE_LED_SIGNALING - axp.setChgLEDMode(AXP20X_LED_LOW_LEVEL); + PMU.setChargingLedMode(XPOWERS_CHG_LED_ON); #endif #endif #ifdef BUZZER @@ -1314,7 +1353,7 @@ void loop() { #endif #elif T_BEAM_V1_0 #ifdef ENABLE_LED_SIGNALING - axp.setChgLEDMode(AXP20X_LED_OFF); + PMU.setChargingLedMode(XPOWERS_CHG_LED_OFF); #endif #endif } @@ -1405,19 +1444,19 @@ void loop() { debug_message += ", "; debug_message += "Temp C: " + String(PMU.getTemperature()); #elif T_BEAM_V1_0 - debug_message += "Bat V: " + String(axp.getBattVoltage()); + debug_message += "Bat V: " + String(PMU.getBattVoltage()); debug_message += ", "; - debug_message += "Bat IN A: " + String(axp.getBattChargeCurrent()); + debug_message += "Bat IN A: " + String(PMU.getBatteryChargeCurrent()); debug_message += ", "; - debug_message += "Bat OUT A: " + String(axp.getBattDischargeCurrent()); + debug_message += "Bat OUT A: " + String(PMU.getBattDischargeCurrent()); debug_message += ", "; - debug_message += "USB Plugged: " + String(axp.isVBUSPlug()); + debug_message += "USB Plugged: " + String(PMU.isVBUSin()); debug_message += ", "; - debug_message += "USB V: " + String(axp.getVbusVoltage()); + debug_message += "USB V: " + String(PMU.getVbusVoltage()); debug_message += ", "; - debug_message += "USB A: " + String(axp.getVbusCurrent()); + debug_message += "USB A: " + String(PMU.getVbusCurrent()); debug_message += ", "; - debug_message += "Temp C: " + String(axp.getTemp()); + debug_message += "Temp C: " + String(PMU.getTemperature()); #else debug_message += "Bat V: " + String(BattVolts); #endif diff --git a/src/taskWebServer.cpp b/src/taskWebServer.cpp index 155053a..1a3418b 100644 --- a/src/taskWebServer.cpp +++ b/src/taskWebServer.cpp @@ -52,8 +52,8 @@ WiFiServer gpsServer(NETWORK_GPS_PORT); #include extern XPowersAXP2101 PMU; #elif T_BEAM_V1_0 - #include - extern AXP20X_Class axp; + #include + extern XPowersAXP192 PMU; #endif @@ -180,8 +180,8 @@ void handle_Shutdown() { PMU.shutdown(); #elif T_BEAM_V1_0 server.send(200,"text/html", "Shutdown"); - axp.setChgLEDMode(AXP20X_LED_OFF); - axp.shutdown(); + PMU.setChargingLedMode(XPOWERS_CHG_LED_OFF); + PMU.shutdown(); #else server.send(404,"text/html", "Not supported"); #endif diff --git a/tools/buildscript_versioning.py b/tools/buildscript_versioning.py index c66e1db..bbe61f6 100644 --- a/tools/buildscript_versioning.py +++ b/tools/buildscript_versioning.py @@ -1,6 +1,6 @@ FILENAME_BUILDNO = '.pio/versioning' FILENAME_VERSION_H = 'include/version.h' -version = 'v0.3.' +version = 'v0.4.' import datetime from subprocess import *