From 6d7edc67b8e5121266d10ea2014c04339e050117 Mon Sep 17 00:00:00 2001 From: "Hansi, dl9rdz" Date: Mon, 14 Oct 2019 21:03:25 +0200 Subject: [PATCH] add support for Heltec v2 board --- RX_FSK/RX_FSK.ino | 99 +++++++++++++++-------------- RX_FSK/version.h | 2 +- libraries/SondeLib/Sonde.cpp | 7 +- libraries/SondeLib/autodetect-infos | 7 +- 4 files changed, 61 insertions(+), 54 deletions(-) diff --git a/RX_FSK/RX_FSK.ino b/RX_FSK/RX_FSK.ino index 4d392a1..ccea70a 100644 --- a/RX_FSK/RX_FSK.ino +++ b/RX_FSK/RX_FSK.ino @@ -98,9 +98,9 @@ String processor(const String& var) { if (var == "AUTODETECT_INFO") { char tmpstr[128]; const char *fpstr; - int i=0; - while(fingerprintValue[i] != sonde.fingerprint && fingerprintValue[i]!=-1) i++; - if(fingerprintValue[i]==-1) { + int i = 0; + while (fingerprintValue[i] != sonde.fingerprint && fingerprintValue[i] != -1) i++; + if (fingerprintValue[i] == -1) { fpstr = "Unknown board"; } else { fpstr = fingerprintText[i]; @@ -979,7 +979,7 @@ void IRAM_ATTR touchISR2() { void checkTouchButton(Button & button) { if (button.isTouched) { int tmp = touchRead(button.pin & 0x7f); - Serial.printf("touch read %d: value is %d\n", button.pin,tmp); + Serial.printf("touch read %d: value is %d\n", button.pin, tmp); if (tmp > sonde.config.touch_thresh) { button.isTouched = false; unsigned long elapsed = my_millis() - button.keydownTime; @@ -1122,27 +1122,27 @@ void setup() Serial.printf("%d:%d ", i, v); } Serial.println(""); - #if 0 +#if 0 delay(2000); // temporary test volatile uint32_t *ioport = portOutputRegister(digitalPinToPort(4)); uint32_t portmask = digitalPinToBitMask(4); int t = millis(); - for(int i=0; i<10000000; i++) { + for (int i = 0; i < 10000000; i++) { digitalWrite(4, LOW); digitalWrite(4, HIGH); } int res = millis() - t; Serial.printf("Duration w/ digitalWriteo: %d\n", res); - + t = millis(); - for(int i=0; i<10000000; i++) { + for (int i = 0; i < 10000000; i++) { *ioport |= portmask; *ioport &= ~portmask; } res = millis() - t; Serial.printf("Duration w/ fast io: %d\n", res); -#endif +#endif for (int i = 0; i < 39; i++) { Serial.printf("%d:%d ", i, initlevels[i]); } @@ -1160,39 +1160,40 @@ void setup() Serial.println("Reading initial configuration"); setupConfigData(); // configuration must be read first due to OLED ports!!! - // FOr T-Beam 1.0 - Wire.begin(21, 22); - // Make sure the whole thing powers up!?!?!?!?!? - U8X8 *u8x8 = new U8X8_SSD1306_128X64_NONAME_HW_I2C(0, 22, 21); - u8x8->initDisplay(); - delay(500); - - scanI2Cdevice(); + if ((sonde.fingerprint & 16) == 16) { // NOT TTGO v1 (fingerprint 64) or Heltec v1/v2 board (fingerprint 4) + // FOr T-Beam 1.0 + Wire.begin(21, 22); + // Make sure the whole thing powers up!?!?!?!?!? + U8X8 *u8x8 = new U8X8_SSD1306_128X64_NONAME_HW_I2C(0, 22, 21); + u8x8->initDisplay(); + delay(500); - if (!axp.begin(Wire, AXP192_SLAVE_ADDRESS)) { - Serial.println("AXP192 Begin PASS"); - } else { - Serial.println("AXP192 Begin FAIL"); + scanI2Cdevice(); + + if (!axp.begin(Wire, AXP192_SLAVE_ADDRESS)) { + Serial.println("AXP192 Begin PASS"); + } else { + Serial.println("AXP192 Begin FAIL"); + } + axp.setPowerOutPut(AXP192_LDO2, AXP202_ON); + axp.setPowerOutPut(AXP192_LDO3, AXP202_ON); + axp.setPowerOutPut(AXP192_DCDC2, AXP202_ON); + axp.setPowerOutPut(AXP192_EXTEN, AXP202_ON); + axp.setPowerOutPut(AXP192_DCDC1, AXP202_ON); + axp.setDCDC1Voltage(3300); + + pinMode(PMU_IRQ, INPUT_PULLUP); + attachInterrupt(PMU_IRQ, [] { + pmu_irq = true; + }, FALLING); + + axp.adc1Enable(AXP202_BATT_CUR_ADC1, 1); + axp.enableIRQ(AXP202_VBUS_REMOVED_IRQ | AXP202_VBUS_CONNECT_IRQ | AXP202_BATT_REMOVED_IRQ | AXP202_BATT_CONNECT_IRQ, 1); + axp.clearIRQ(); + + delay(500); + scanI2Cdevice(); } - axp.setPowerOutPut(AXP192_LDO2, AXP202_ON); - axp.setPowerOutPut(AXP192_LDO3, AXP202_ON); - axp.setPowerOutPut(AXP192_DCDC2, AXP202_ON); - axp.setPowerOutPut(AXP192_EXTEN, AXP202_ON); - axp.setPowerOutPut(AXP192_DCDC1, AXP202_ON); - axp.setDCDC1Voltage(3300); - - pinMode(PMU_IRQ, INPUT_PULLUP); - attachInterrupt(PMU_IRQ, [] { - pmu_irq = true; - }, FALLING); - - axp.adc1Enable(AXP202_BATT_CUR_ADC1, 1); - axp.enableIRQ(AXP202_VBUS_REMOVED_IRQ | AXP202_VBUS_CONNECT_IRQ | AXP202_BATT_REMOVED_IRQ | AXP202_BATT_CONNECT_IRQ, 1); - axp.clearIRQ(); - - delay(500); - scanI2Cdevice(); - LORA_LED = sonde.config.led_pout; pinMode(LORA_LED, OUTPUT); @@ -1440,7 +1441,7 @@ void loopDecoder() { } } Serial.println("updateDisplay started"); - if(forceReloadScreenConfig) { + if (forceReloadScreenConfig) { disp.initFromFile(); forceReloadScreenConfig = false; } @@ -1714,9 +1715,9 @@ void loopWifiBackground() { } } else if (wifi_state == WIFI_CONNECTED) { if (!WiFi.isConnected()) { - sonde.setIP("",false); + sonde.setIP("", false); sonde.updateDisplayIP(); - + wifi_state = WIFI_DISABLED; // restart scan enableNetwork(false); WiFi.disconnect(true); @@ -1786,8 +1787,8 @@ void loopWifiScan() { Serial.print("Network name: "); String ssid = WiFi.SSID(i); Serial.println(ssid); - disp.rdis->drawString(0, dispys*(1 + line), ssid.c_str()); - line = (line + 1) % (disph/dispys); + disp.rdis->drawString(0, dispys * (1 + line), ssid.c_str()); + line = (line + 1) % (disph / dispys); Serial.print("Signal strength: "); Serial.println(WiFi.RSSI(i)); Serial.print("MAC address: "); @@ -1802,13 +1803,13 @@ void loopWifiScan() { Serial.printf("Match found at scan entry %d, config network %d\n", i, index); } } - int lastl = (disph/dispys-2)*dispys; + int lastl = (disph / dispys - 2) * dispys; if (index >= 0) { // some network was found Serial.print("Connecting to: "); Serial.print(fetchWifiSSID(index)); Serial.print(" with password "); Serial.println(fetchWifiPw(index)); disp.rdis->drawString(0, lastl, "Conn:"); - disp.rdis->drawString(6*dispxs, lastl, fetchWifiSSID(index)); + disp.rdis->drawString(6 * dispxs, lastl, fetchWifiSSID(index)); WiFi.begin(fetchWifiSSID(index), fetchWifiPw(index)); while (WiFi.status() != WL_CONNECTED && cnt < MAXWIFIDELAY) { delay(500); @@ -1822,7 +1823,7 @@ void loopWifiScan() { Serial.print(" with password "); Serial.println(fetchWifiPw(index)); delay(500); } - disp.rdis->drawString(15*dispxs, lastl+dispys, _scan[cnt & 1]); + disp.rdis->drawString(15 * dispxs, lastl + dispys, _scan[cnt & 1]); cnt++; } } @@ -1834,7 +1835,7 @@ void loopWifiScan() { Serial.print("AP IP address: "); Serial.println(myIP); disp.rdis->drawString(0, lastl, "AP: "); - disp.rdis->drawString(6*dispxs, lastl+1, networks[0].id.c_str()); + disp.rdis->drawString(6 * dispxs, lastl + 1, networks[0].id.c_str()); delay(3000); } else { Serial.println(""); diff --git a/RX_FSK/version.h b/RX_FSK/version.h index 4fbbdc8..478e1f8 100644 --- a/RX_FSK/version.h +++ b/RX_FSK/version.h @@ -1,2 +1,2 @@ const char *version_name = "rdzTTGOsonde"; -const char *version_id = "devel20191014"; +const char *version_id = "devel20191014b"; diff --git a/libraries/SondeLib/Sonde.cpp b/libraries/SondeLib/Sonde.cpp index 4691238..e109b3c 100644 --- a/libraries/SondeLib/Sonde.cpp +++ b/libraries/SondeLib/Sonde.cpp @@ -18,11 +18,12 @@ const char *evstring[]={"NONE", "KEY1S", "KEY1D", "KEY1M", "KEY1L", "KEY2S", "KE const char *RXstr[]={"RX_OK", "RX_TIMEOUT", "RX_ERROR", "RX_UNKNOWN"}; -int fingerprintValue[]={ 17, 31, 64, 55, 48, 23, 128+23, -1 }; +int fingerprintValue[]={ 17, 31, 64, 4, 55, 48, 23, 128+23, -1 }; const char *fingerprintText[]={ "TTGO T-Beam (new version 1.0), I2C not working after powerup, assuming 0.9\" OLED@21,22", "TTGO LORA32 v2.1_1.6 (0.9\" OLED@21,22)", - "TTGO LORA v1.0 or Heltecc (0.9\" OLED@4,15)", + "TTGO LORA v1.0 (0.9\" OLED@4,15)", + "Heltec v1/v2 (0.9\"OLED@4,15)", "TTGO T-Beam (old version), 0.9\" OLED@21,22", "TTGO T-Beam (old version), SPI TFT@4,21,22", "TTGO T-Beam (new version 1.0), 0.9\" OLED@21,22", @@ -77,7 +78,7 @@ void Sonde::defaultConfig() { config.oled_scl = 15; config.button_pin = 0; config.button2_pin = T4 + 128; // T4 == GPIO13 - Serial.println("Autoconfig: looks like v1 board"); + Serial.println("Autoconfig: looks like TTGO v1 / Heltec v1/V2 board"); } else { config.oled_sda = 21; config.oled_scl = 22; diff --git a/libraries/SondeLib/autodetect-infos b/libraries/SondeLib/autodetect-infos index 8206e9c..02cf2de 100644 --- a/libraries/SondeLib/autodetect-infos +++ b/libraries/SondeLib/autodetect-infos @@ -1,7 +1,12 @@ -Heltec board +Heltec board v1 => fingerprint 0000100 => 4 (sda,scl: 4,15) (same as LORA v1.0) 0:1 1:0 2:0 3:1 4:0 5:1 6:0 7:1 8:0 9:1 10:1 11:1 12:0 13:0 14:1 15:0 16:0 17:0 18:0 19:0 20:0 21:1 22:0 23:0 24:0 25:0 26:0 27:0 28:0 29:0 30:0 31:0 32:0 33:0 34:0 35:0 36:0 37:0 38:0 +Heltec board v2 +(sda,scl: 4,15) (similar to v1.0, but GPIO21 switches 3V3) => fingerprint 4 +0:1 1:0 2:0 3:1 4:0 5:1 6:0 7:1 8:0 9:1 10:1 11:1 12:0 13:0 14:1 15:0 16:0 17:0 18:0 19:0 20:0 21:1 22:0 23:0 24:0 25:0 26:0 27:0 28:0 29:0 30:0 31:0 32:0 33:0 34:0 35:0 36:0 37:0 38:0 +0:1 1:1 2:0 3:1 4:0 5:1 6:0 7:1 8:0 9:1 10:1 11:1 12:0 13:0 14:1 15:0 16:0 17:0 18:0 19:0 20:0 21:1 22:0 23:0 24:0 25:0 26:0 27:0 28:0 29:0 30:0 31:0 32:0 33:0 34:0 35:0 36:0 37:0 38:0 (before setup + TTGO LORA32 v2.1_1.6 (button1: touch gpio 2 => 130; button2: touch gpio14 => 142) fingerprint 0011111 => 31 (sda,scl: 21,22) 0:1 1:0 2:0 3:1 4:0 5:1 6:0 7:1 8:0 9:1 10:1 11:1 12:0 13:0 14:1 15:1 16:1 17:1 18:0 19:0 20:0 21:1 22:1 23:1 24:0 25:0 26:0 27:0 28:0 29:0 30:0 31:0 32:0 33:0 34:0 35:0 36:0 37:0 38:0