diff --git a/.vscode/arduino.json b/.vscode/arduino.json new file mode 100644 index 0000000..570555d --- /dev/null +++ b/.vscode/arduino.json @@ -0,0 +1,5 @@ +{ + "board": "esp8266:esp8266:d1", + "configuration": "xtal=80,vt=flash,exception=disabled,eesz=4M,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=921600", + "port": "/dev/cu.wchusbserial230" +} \ No newline at end of file diff --git a/.vscode/ipch/e89e887f3099ca3f/main.ipch b/.vscode/ipch/e89e887f3099ca3f/main.ipch new file mode 100644 index 0000000..6f548d3 Binary files /dev/null and b/.vscode/ipch/e89e887f3099ca3f/main.ipch differ diff --git a/.vscode/ipch/e89e887f3099ca3f/mmap_address.bin b/.vscode/ipch/e89e887f3099ca3f/mmap_address.bin new file mode 100644 index 0000000..f8ee5b7 Binary files /dev/null and b/.vscode/ipch/e89e887f3099ca3f/mmap_address.bin differ diff --git a/platformio.ini b/platformio.ini index b7fc41c..a1323e6 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,3 +12,9 @@ platform = espressif32 board = esp32-poe framework = arduino + +upload_port=/dev/tty.wchusbserial230 +monitor_baud = 115200 + +lib_deps = + ESP Async WebServer diff --git a/src/main.cpp b/src/main.cpp index 58b344c..3a914b7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,9 +1,102 @@ #include +#include +#include +#include -void setup() { - // put your setup code here, to run once: +#define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT +#define ETH_PHY_POWER 12 + +#include + +static bool eth_connected = false; +AsyncWebServer server(80); + +const char *PARAM_MESSAGE = "message"; + +void notFound(AsyncWebServerRequest *request) { request->send(404, "text/plain", "Not found"); } + +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 loop() { - // put your main code here, to run repeatedly: -} \ No newline at end of file +void setup() { + Serial.begin(115200); + WiFi.onEvent(WiFiEvent); + ETH.begin(); + + while (!eth_connected) { + delay(1000); + } + + if (!MDNS.begin("a2clcontroller")) { + Serial.println("Error setting up MDNS responder!, system halt"); + while (1) { + delay(1000); + } + } + Serial.println("mDNS responder started"); + + server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { request->send(200, "text/plain", "Hello, world"); }); + + // Send a GET request to /get?message= + server.on("/get", HTTP_GET, [](AsyncWebServerRequest *request) { + String message; + if (request->hasParam(PARAM_MESSAGE)) { + message = request->getParam(PARAM_MESSAGE)->value(); + } else { + message = "No message sent"; + } + request->send(200, "text/plain", "Hello, GET: " + message); + }); + + // Send a POST request to /post with a form field message set to + server.on("/post", HTTP_POST, [](AsyncWebServerRequest *request) { + String message; + if (request->hasParam(PARAM_MESSAGE, true)) { + message = request->getParam(PARAM_MESSAGE, true)->value(); + } else { + message = "No message sent"; + } + request->send(200, "text/plain", "Hello, POST: " + message); + }); + + server.onNotFound(notFound); + + server.begin(); + // Add service to MDNS-SD + MDNS.addService("http", "tcp", 80); +} + +void loop() {}