diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a83c49c..fd90ad5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -87,3 +87,21 @@ jobs: asset_path: .pio/build/TrackerD-OE1ACM/firmware.bin asset_name: TrackerD-OE1ACM.bin asset_content_type: application/bin + # upload ttgo-poe-v1_0 + - uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: .pio/build/ttgo-poe-v1_0/firmware.bin + asset_name: ttgo-poe-v1_0.bin + asset_content_type: application/bin + # upload ttgo-poe-v1_2 + - uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: .pio/build/ttgo-poe-v1_2/firmware.bin + asset_name: ttgo-poe-v1_2.bin + asset_content_type: application/bin diff --git a/platformio.ini b/platformio.ini index 6515542..d03274d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -49,3 +49,11 @@ build_flags = -Werror -Wall -DTTGO_T_Beam_V0_7 [env:TrackerD-OE1ACM] board = esp32doit-devkit-v1 build_flags = -Werror -Wall -DTRACKERD -DLORA_SCK=18 -DLORA_MISO=19 -DLORA_MOSI=23 -DLORA_CS=16 -DLORA_RST=14 -DLORA_IRQ=26 + +[env:ttgo-poe-v1_0] +board = esp32doit-devkit-v1 +build_flags = -Werror -Wall -DETH_BOARD -DETH_BOARD_V1_0 -DLORA_SCK=14 -DLORA_MISO=2 -DLORA_MOSI=15 -DLORA_CS=12 -DLORA_RST=4 -DLORA_IRQ=36 + +[env:ttgo-poe-v1_2] +board = esp32doit-devkit-v1 +build_flags = -Werror -Wall -DETH_BOARD -DETH_BOARD_V1_2 -DLORA_SCK=14 -DLORA_MISO=2 -DLORA_MOSI=15 -DLORA_CS=12 -DLORA_RST=4 -DLORA_IRQ=36 diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index 136d435..4bd5c40 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -1,6 +1,7 @@ #include #include +#include #include #include #include @@ -39,9 +40,17 @@ APRS_IS * aprs_is = 0; LoRa_APRS lora_aprs; std::shared_ptr BeaconMsg; +volatile bool eth_connected = false; + String create_lat_aprs(double lat); String create_long_aprs(double lng); +#ifdef ETH_BOARD +void setup_eth(); +#else +void setup_wifi(); +#endif + void load_config(); void setup_wifi(); void setup_ota(); @@ -75,12 +84,19 @@ void setup() delay(500); logPrintlnA("LoRa APRS iGate & Digi by OE5BPA (Peter Buchegger)"); - logPrintlnA("Version: 20.46.1"); + logPrintlnA("Version: 20.49.0"); setup_display(); - show_display("OE5BPA", "LoRa APRS iGate & Digi", "by Peter Buchegger", "1.0.0-dev", 3000); + show_display("OE5BPA", "LoRa APRS iGate & Digi", "by Peter Buchegger", "20.49.0", 3000); load_config(); setup_lora(); +#ifdef ETH_BOARD + setup_eth(); + setup_ota(); + setup_ntp(); + setup_ftp(); + setup_aprs_is(); +#else if(Config.wifi.active) { setup_wifi(); @@ -95,6 +111,7 @@ void setup() btStop(); } if(Config.aprs_is.active) setup_aprs_is(); +#endif setup_timer(); if(Config.display.overwritePin != 0) @@ -158,7 +175,7 @@ void loop() } } - if(Config.wifi.active) ArduinoOTA.handle(); + if(Config.wifi.active || eth_connected) ArduinoOTA.handle(); if(Config.wifi.active && WiFiMulti.run() != WL_CONNECTED) { setup_display(); secondsSinceDisplay = 0; display_is_on = true; @@ -167,7 +184,7 @@ void loop() delay(1000); return; } - if(Config.aprs_is.active && !aprs_is->connected()) + if((eth_connected && !aprs_is->connected()) || (Config.aprs_is.active && !aprs_is->connected())) { setup_display(); secondsSinceDisplay = 0; display_is_on = true; logPrintI("connecting to APRS-IS server: "); @@ -309,6 +326,7 @@ void load_config() {} } +#ifndef ETH_BOARD if(Config.aprs_is.active && !Config.wifi.active) { logPrintlnE("You have to activate Wifi for APRS IS to work, please check your settings!"); @@ -316,6 +334,7 @@ void load_config() while (true) {} } +#endif if(KEY_BUILTIN != 0 && Config.display.overwritePin == 0) { @@ -324,6 +343,63 @@ void load_config() logPrintlnI("Configuration loaded!"); } +#ifdef ETH_BOARD +void WiFiEvent(WiFiEvent_t event) +{ + switch (event) { + case SYSTEM_EVENT_ETH_START: + logPrintlnI("ETH Started"); + ETH.setHostname("esp32-ethernet"); + break; + case SYSTEM_EVENT_ETH_CONNECTED: + logPrintlnI("ETH Connected"); + break; + case SYSTEM_EVENT_ETH_GOT_IP: + logPrintI("ETH MAC: "); + logPrintI(ETH.macAddress()); + logPrintI(", IPv4: "); + logPrintI(ETH.localIP().toString()); + if (ETH.fullDuplex()) { + logPrintI(", FULL_DUPLEX"); + } + logPrintI(", "); + logPrintI(String(ETH.linkSpeed())); + logPrintlnI("Mbps"); + eth_connected = true; + break; + case SYSTEM_EVENT_ETH_DISCONNECTED: + logPrintlnW("ETH Disconnected"); + eth_connected = false; + break; + case SYSTEM_EVENT_ETH_STOP: + logPrintlnW("ETH Stopped"); + eth_connected = false; + break; + default: + break; + } +} + +void setup_eth() +{ + WiFi.onEvent(WiFiEvent); + + pinMode(NRST, OUTPUT); + digitalWrite(NRST, 0); + delay(200); + digitalWrite(NRST, 1); + delay(200); + digitalWrite(NRST, 0); + delay(200); + digitalWrite(NRST, 1); + + ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK); + while(!eth_connected) + { + sleep(1); + } +} +#else void setup_wifi() { WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE); @@ -346,6 +422,7 @@ void setup_wifi() logPrintlnD(WiFi.localIP().toString()); show_display("INFO", "WiFi connected", "IP: ", WiFi.localIP().toString(), 2000); } +#endif void setup_ota() { diff --git a/src/display.cpp b/src/display.cpp index f8a69c0..292b63e 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -7,15 +7,10 @@ #include "pins.h" #include "logger.h" -Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST); +Adafruit_SSD1306 display(128, 64, &Wire); void setup_display() { - pinMode(OLED_RST, OUTPUT); - digitalWrite(OLED_RST, LOW); - delay(20); - digitalWrite(OLED_RST, HIGH); - Wire.begin(OLED_SDA, OLED_SCL); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c, false, false)) { diff --git a/src/pins.h b/src/pins.h index aba62a2..4c764cb 100644 --- a/src/pins.h +++ b/src/pins.h @@ -6,36 +6,51 @@ #undef OLED_RST #if defined(HELTEC_WIFI_LORA_32_V1) || defined(HELTEC_WIFI_LORA_32_V2) || defined(TTGO_LORA32_V1) - #define OLED_SDA 4 - #define OLED_SCL 15 - #define OLED_RST 16 + #define OLED_SDA 4 + #define OLED_SCL 15 #endif #if defined(TTGO_LORA32_V2) || defined(TTGO_T_Beam_V0_7) || defined(TTGO_T_Beam_V1_0) - #define OLED_SDA 21 - #define OLED_SCL 22 - #define OLED_RST 16 + #define OLED_SDA 21 + #define OLED_SCL 22 #endif #ifdef TRACKERD - #define OLED_SDA 5 - #define OLED_SCL 4 - #define OLED_RST 25 + #define OLED_SDA 5 + #define OLED_SCL 4 #endif +#ifdef ETH_BOARD + #define OLED_SDA 33 + #define OLED_SCL 32 + #define ETH_POWER_PIN -1 + #define ETH_TYPE ETH_PHY_LAN8720 + #define ETH_ADDR 0 + #define ETH_MDC_PIN 23 + #define ETH_MDIO_PIN 18 + #define NRST 5 +#endif + +#ifdef ETH_BOARD_V1_0 + #define ETH_CLK ETH_CLOCK_GPIO17_OUT // TTGO PoE V1.0 +#endif + +#ifdef ETH_BOARD_V1_2 + #define ETH_CLK ETH_CLOCK_GPIO0_OUT // TTGO PoE V1.2 +#endif #undef KEY_BUILTIN #if defined(TTGO_T_Beam_V0_7) - #define KEY_BUILTIN 39 + #define KEY_BUILTIN 39 #endif #if defined(TTGO_T_Beam_V1_0) - #define KEY_BUILTIN 38 + #define KEY_BUILTIN 38 #endif #ifndef KEY_BUILTIN - #define KEY_BUILTIN 0 + #define KEY_BUILTIN 0 #endif #endif