Skip to content
Snippets Groups Projects
Select Git revision
  • 27abf8d7ff320d013853f87db304ac1d420d3215
  • master default protected
2 results

network.cpp

  • network.cpp 2.01 KiB
    #include <Arduino.h>
    #include "config.h"
    #include "utils.h"
    #include "network.h"
    
    MDNSResponder mdns;
    AsyncWebServer server(80);
    AsyncEventSource events("/events");
    
    void setupNetwork()
    {
      setupWifi();
      setupMDNS();
      setupOTA();
      setupWebserver();
    }
    
    void setupWifi()
    {
      ESPConnect.autoConnect(HOSTNAME);
      if (ESPConnect.begin(&server))
      {
        logLine("Connected to WiFi: ", false);
        logLine(WiFi.localIP().toString());
      }
      else
      {
        logLine("Failed to connect to WiFi");
      }
    }
    
    void setupMDNS()
    {
      if (mdns.begin(HOSTNAME))
      {
        logLine("MDNS responder started");
        mdns.addService("http", "tcp", 80);
      }
      else
      {
        logLine("MDNS.begin failed");
      }
    }
    
    void setupOTA()
    {
      ArduinoOTA.onStart([]()
                         { events.send("Update Start", "ota"); });
      ArduinoOTA.onEnd([]()
                       { events.send("Update End", "ota"); });
      ArduinoOTA.onProgress([](unsigned int progress, unsigned int total)
                            {
        char p[32];
        sprintf(p, "Progress: %u%%\n", (progress/(total/100)));
        events.send(p, "ota"); });
      ArduinoOTA.onError([](ota_error_t error)
                         {
        if(error == OTA_AUTH_ERROR) events.send("Auth Failed", "ota");
        else if(error == OTA_BEGIN_ERROR) events.send("Begin Failed", "ota");
        else if(error == OTA_CONNECT_ERROR) events.send("Connect Failed", "ota");
        else if(error == OTA_RECEIVE_ERROR) events.send("Recieve Failed", "ota");
        else if(error == OTA_END_ERROR) events.send("End Failed", "ota"); });
      ArduinoOTA.setHostname(HOSTNAME);
      ArduinoOTA.begin();
    }
    
    void setupWebserver()
    {
      LittleFS.begin();
      server.serveStatic("/", LittleFS, "/");
      events.onConnect([](AsyncEventSourceClient *client)
                       { client->send("hello!", NULL, millis(), 1000); });
      server.addHandler(&events);
      server.onNotFound([](AsyncWebServerRequest *request)
                        { request->send(404); });
      server.begin();
    }
    
    void networkLoop()
    {
      ArduinoOTA.handle();
    }
    
    void sendEvent(const char *tag, const char *msg) {
      events.send(msg, tag);
    }