From c5aa8ae48fd409e5e0e1d15632a0151f3e80ec16 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Thu, 3 Dec 2020 21:21:11 +0100 Subject: [PATCH 1/5] add eth stuff - not working! --- platformio.ini | 4 +++ src/LoRa_APRS_iGate.cpp | 70 +++++++++++++++++++++++++++++++++++++++-- src/pins.h | 14 +++++++++ 3 files changed, 86 insertions(+), 2 deletions(-) diff --git a/platformio.ini b/platformio.ini index 6515542..d540f77 100644 --- a/platformio.ini +++ b/platformio.ini @@ -49,3 +49,7 @@ 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] +board = esp32doit-devkit-v1 +build_flags = -Werror -Wall -DETH_BOARD -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 6c32fd5..d60be06 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -1,6 +1,7 @@ #include #include +#include #include #include #include @@ -39,11 +40,14 @@ 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); void load_config(); void setup_wifi(); +void setup_eth(); void setup_ota(); void setup_lora(); void setup_ntp(); @@ -81,6 +85,12 @@ void setup() load_config(); setup_lora(); +#ifdef ETH_BOARD + setup_eth(); + setup_ota(); + setup_ntp(); + setup_ftp(); +#else if(Config.wifi.active) { setup_wifi(); @@ -94,6 +104,7 @@ void setup() WiFi.mode(WIFI_OFF); btStop(); } +#endif if(Config.aprs_is.active) setup_aprs_is(); setup_timer(); @@ -158,7 +169,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 +178,7 @@ void loop() delay(1000); return; } - if(Config.aprs_is.active && !aprs_is->connected()) + if(eth_connected || (Config.aprs_is.active && !aprs_is->connected())) { setup_display(); secondsSinceDisplay = 0; display_is_on = true; logPrintI("connecting to APRS-IS server: "); @@ -309,6 +320,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 +328,7 @@ void load_config() while (true) {} } +#endif if(KEY_BUILTIN != 0 && Config.display.overwritePin == 0) { @@ -347,6 +360,59 @@ void setup_wifi() show_display("INFO", "WiFi connected", "IP: ", WiFi.localIP().toString(), 2000); } +void WiFiEvent(WiFiEvent_t event) +{ + switch (event) { + case SYSTEM_EVENT_ETH_START: + Serial.println("ETH Started"); + //set eth hostname here + ETH.setHostname("esp32-ethernet"); + break; + case SYSTEM_EVENT_ETH_CONNECTED: + Serial.println("ETH Connected"); + break; + case SYSTEM_EVENT_ETH_GOT_IP: + Serial.print("ETH MAC: "); + Serial.print(ETH.macAddress()); + Serial.print(", IPv4: "); + Serial.print(ETH.localIP()); + if (ETH.fullDuplex()) { + Serial.print(", FULL_DUPLEX"); + } + Serial.print(", "); + Serial.print(ETH.linkSpeed()); + Serial.println("Mbps"); + eth_connected = true; + break; + case SYSTEM_EVENT_ETH_DISCONNECTED: + Serial.println("ETH Disconnected"); + eth_connected = false; + break; + case SYSTEM_EVENT_ETH_STOP: + Serial.println("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); +} + void setup_ota() { ArduinoOTA diff --git a/src/pins.h b/src/pins.h index aba62a2..42eb2a2 100644 --- a/src/pins.h +++ b/src/pins.h @@ -23,6 +23,20 @@ #define OLED_RST 25 #endif +#ifdef ETH_BOARD + #define OLED_SDA 33 + #define OLED_SCL 32 + #define OLED_RST 5 +//#define ETH_CLK ETH_CLOCK_GPIO0_OUT // TTGO PoE V1.2 +#define ETH_CLK ETH_CLOCK_GPIO17_OUT // TTGO PoE V1.0 +#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 + #undef KEY_BUILTIN From 8e1b31d95a2f05e9e85c36e7fc94792ddebe2709 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Thu, 3 Dec 2020 23:09:29 +0100 Subject: [PATCH 2/5] working now, but not nice implemented --- platformio.ini | 8 +++++-- src/LoRa_APRS_iGate.cpp | 34 ++++++++++++++++------------- src/display.cpp | 7 +----- src/pins.h | 47 +++++++++++++++++++++-------------------- 4 files changed, 50 insertions(+), 46 deletions(-) diff --git a/platformio.ini b/platformio.ini index d540f77..d03274d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -50,6 +50,10 @@ build_flags = -Werror -Wall -DTTGO_T_Beam_V0_7 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] +[env:ttgo-poe-v1_0] board = esp32doit-devkit-v1 -build_flags = -Werror -Wall -DETH_BOARD -DLORA_SCK=14 -DLORA_MISO=2 -DLORA_MOSI=15 -DLORA_CS=12 -DLORA_RST=4 -DLORA_IRQ=36 +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 d60be06..14091b8 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -90,6 +90,7 @@ void setup() setup_ota(); setup_ntp(); setup_ftp(); + setup_aprs_is(); #else if(Config.wifi.active) { @@ -104,8 +105,8 @@ void setup() WiFi.mode(WIFI_OFF); btStop(); } -#endif if(Config.aprs_is.active) setup_aprs_is(); +#endif setup_timer(); if(Config.display.overwritePin != 0) @@ -178,7 +179,7 @@ void loop() delay(1000); return; } - if(eth_connected || (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: "); @@ -364,32 +365,31 @@ void WiFiEvent(WiFiEvent_t event) { switch (event) { case SYSTEM_EVENT_ETH_START: - Serial.println("ETH Started"); - //set eth hostname here + logPrintlnI("ETH Started"); ETH.setHostname("esp32-ethernet"); break; case SYSTEM_EVENT_ETH_CONNECTED: - Serial.println("ETH Connected"); + logPrintlnI("ETH Connected"); break; case SYSTEM_EVENT_ETH_GOT_IP: - Serial.print("ETH MAC: "); - Serial.print(ETH.macAddress()); - Serial.print(", IPv4: "); - Serial.print(ETH.localIP()); + logPrintI("ETH MAC: "); + logPrintI(ETH.macAddress()); + logPrintI(", IPv4: "); + logPrintI(ETH.localIP().toString()); if (ETH.fullDuplex()) { - Serial.print(", FULL_DUPLEX"); + logPrintI(", FULL_DUPLEX"); } - Serial.print(", "); - Serial.print(ETH.linkSpeed()); - Serial.println("Mbps"); + logPrintI(", "); + logPrintI(String(ETH.linkSpeed())); + logPrintlnI("Mbps"); eth_connected = true; break; case SYSTEM_EVENT_ETH_DISCONNECTED: - Serial.println("ETH Disconnected"); + logPrintlnW("ETH Disconnected"); eth_connected = false; break; case SYSTEM_EVENT_ETH_STOP: - Serial.println("ETH Stopped"); + logPrintlnW("ETH Stopped"); eth_connected = false; break; default: @@ -411,6 +411,10 @@ void setup_eth() 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); + } } 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 42eb2a2..4c764cb 100644 --- a/src/pins.h +++ b/src/pins.h @@ -6,50 +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 OLED_RST 5 -//#define ETH_CLK ETH_CLOCK_GPIO0_OUT // TTGO PoE V1.2 -#define ETH_CLK ETH_CLOCK_GPIO17_OUT // TTGO PoE V1.0 -#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 + #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 From 5ef191369371cba704593752de5204a998bb82c2 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sun, 6 Dec 2020 21:29:00 +0100 Subject: [PATCH 3/5] compile fix --- src/LoRa_APRS_iGate.cpp | 55 +++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index 14091b8..603962b 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -45,9 +45,14 @@ 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_eth(); void setup_ota(); void setup_lora(); void setup_ntp(); @@ -338,29 +343,7 @@ void load_config() logPrintlnI("Configuration loaded!"); } -void setup_wifi() -{ - WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE); - WiFi.setHostname(Config.callsign.c_str()); - for(Configuration::Wifi::AP ap : Config.wifi.APs) - { - logPrintD("Looking for AP: "); - logPrintlnD(ap.SSID); - WiFiMulti.addAP(ap.SSID.c_str(), ap.password.c_str()); - } - logPrintlnI("Waiting for WiFi"); - show_display("INFO", "Waiting for WiFi"); - while(WiFiMulti.run() != WL_CONNECTED) - { - show_display("INFO", "Waiting for WiFi", "...."); - delay(500); - } - logPrintlnI("WiFi connected"); - logPrintD("IP address: "); - logPrintlnD(WiFi.localIP().toString()); - show_display("INFO", "WiFi connected", "IP: ", WiFi.localIP().toString(), 2000); -} - +#ifdef ETH_BOARD void WiFiEvent(WiFiEvent_t event) { switch (event) { @@ -416,6 +399,30 @@ void setup_eth() sleep(1); } } +#else +void setup_wifi() +{ + WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE); + WiFi.setHostname(Config.callsign.c_str()); + for(Configuration::Wifi::AP ap : Config.wifi.APs) + { + logPrintD("Looking for AP: "); + logPrintlnD(ap.SSID); + WiFiMulti.addAP(ap.SSID.c_str(), ap.password.c_str()); + } + logPrintlnI("Waiting for WiFi"); + show_display("INFO", "Waiting for WiFi"); + while(WiFiMulti.run() != WL_CONNECTED) + { + show_display("INFO", "Waiting for WiFi", "...."); + delay(500); + } + logPrintlnI("WiFi connected"); + logPrintD("IP address: "); + logPrintlnD(WiFi.localIP().toString()); + show_display("INFO", "WiFi connected", "IP: ", WiFi.localIP().toString(), 2000); +} +#endif void setup_ota() { From 685b5acda195cfb1de3899775b8165615aeee523 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sun, 6 Dec 2020 21:50:16 +0100 Subject: [PATCH 4/5] Bumped version to 20.49.0 --- src/LoRa_APRS_iGate.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index 603962b..4bd5c40 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -84,9 +84,9 @@ void setup() delay(500); logPrintlnA("LoRa APRS iGate & Digi by OE5BPA (Peter Buchegger)"); - logPrintlnA("Version: 20.46.0-dev"); + 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(); From f31e6fba284d1fe89b48a6c63f2255f13c7bc7de Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sun, 6 Dec 2020 22:02:10 +0100 Subject: [PATCH 5/5] add to release upload the new boards --- .github/workflows/release.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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