From e42891ae9e0acc48d0b617b33a88f56f825f168e Mon Sep 17 00:00:00 2001 From: James Date: Sat, 27 Apr 2024 15:08:49 +0100 Subject: [PATCH] dev --- ESPBMS.ino | 7 +++- ethernet.ino | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 ethernet.ino diff --git a/ESPBMS.ino b/ESPBMS.ino index ad84f4b..c20197c 100644 --- a/ESPBMS.ino +++ b/ESPBMS.ino @@ -14,6 +14,7 @@ typedef struct void setup() { Serial.begin(115200); + eth_begin(); BLEDevice::init(""); // Initialize BLE device } @@ -21,7 +22,6 @@ char currentName[128]; bool gotBasicInfo; bool gotCellInfo; - void loop() { Serial.printf("\r\n\r\n===============================\r\n\r\n"); @@ -33,6 +33,11 @@ void loop() { Serial.println("Devices found: " + String(foundDevices.getCount())); + while(!eth_ready){ + Serial.println("Wait for eth..."); + delay(250); + } + for (int i = 0; i < foundDevices.getCount(); i++) { delay(1000); Serial.printf("\r\n\r\n===============================\r\n\r\n"); diff --git a/ethernet.ino b/ethernet.ino new file mode 100644 index 0000000..10f5019 --- /dev/null +++ b/ethernet.ino @@ -0,0 +1,91 @@ +#include +#include + +/* + * ETH_CLOCK_GPIO0_IN - default: external clock from crystal oscillator + * ETH_CLOCK_GPIO0_OUT - 50MHz clock from internal APLL output on GPIO0 - possibly an inverter is needed for LAN8720 + * ETH_CLOCK_GPIO16_OUT - 50MHz clock from internal APLL output on GPIO16 - possibly an inverter is needed for LAN8720 + * ETH_CLOCK_GPIO17_OUT - 50MHz clock from internal APLL inverted output on GPIO17 - tested with LAN8720 +*/ +#define ETH_CLK_MODE ETH_CLOCK_GPIO0_IN // ETH_CLOCK_GPIO17_OUT + +// Pin# of the enable signal for the external crystal oscillator (-1 to disable for internal APLL source) +#define ETH_POWER_PIN 16 + +// Type of the Ethernet PHY (LAN8720 or TLK110) +#define ETH_TYPE ETH_PHY_LAN8720 + +// I²C-address of Ethernet PHY (0 or 1 for LAN8720, 31 for TLK110) +#define ETH_ADDR 1 + +// Pin# of the I²C clock signal for the Ethernet PHY +#define ETH_MDC_PIN 23 + +// Pin# of the I²C IO signal for the Ethernet PHY +#define ETH_MDIO_PIN 18 + +static bool eth_ready = false; + +void WiFiEvent(WiFiEvent_t event) { + Serial.print("E:"); + Serial.println(event); + switch (event) { + case ARDUINO_EVENT_ETH_START: + Serial.println("ETH Started"); + //set eth hostname here + ETH.setHostname("esp32-ethernet"); + break; + case ARDUINO_EVENT_ETH_CONNECTED: + Serial.println("ETH Connected"); + break; + case ARDUINO_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_ready = true; + break; + case ARDUINO_EVENT_ETH_DISCONNECTED: + Serial.println("ETH Disconnected"); + eth_ready = false; + break; + case ARDUINO_EVENT_ETH_STOP: + Serial.println("ETH Stopped"); + eth_ready = false; + break; + default: + break; + } +} + +void eth_send(const char *data) { + Serial.print("\nconnecting..."); + + WiFiClient client; + if (!client.connect("10.6.0.1", 2003)) { + Serial.println("connection failed"); + return; + } + client.print(data); + while (client.connected() && !client.available()); + //long i; + while (client.available()) { + // i=i+1; + Serial.write(client.read()); + // if(i==100){i=0; delay(1);} + } + + Serial.println("closing connection\n"); + client.stop(); +} + +void eth_begin() { + WiFi.onEvent(WiFiEvent); + ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE); +}