WiFi

WiFi-server eksempel med WiFiNINA bibloteket.

#include <WiFiNINA.h>

uint8_t  error_wifi = 0; // 0 = ok, 1 = ingen wifi modul, 2 = mistet wifi,
uint8_t wifi_clent_do = 0;
uint16_t counterReconnect  = 0;
const uint8_t WIFI_RETRY = 3;  // Prøv å koble til wifi så mange ganger før den kjører loop pånytt
const char WIFI_SSID[]    = "ssid";
const char WIFI_PASS[]    = "pwd";
const uint8_t SERVER_PORT = 80;
IPAddress LOCAL_IP    (192, 168, 10, 165);
IPAddress SERVER_ADDR (192, 168, 10, 160);
WiFiServer server     (SERVER_PORT);

void setup()
{

  // Init WIFI
  if (WiFi.status() == WL_NO_MODULE) {
    Serial.println(F("Ingen wifi modul"));
    error_wifi = 1;
  } else {
    setupWifi();
  }

}

void loop()
{

  int wifistatus   = WiFi.status();

  // Mistet wifi? Koble til på nytt
  if(wifistatus != WL_CONNECTED) {
    reconnectWifi();
    return;
  } else {
    error_wifi = 0;
    wifi_clent_do = 1;
  }

  // Stopp hvis ingen wifi
  if (wifi_clent_do != 1) return;

  // Sjekk om det finnes en klient som har sendt request
  WiFiClient client = server.available();
  if (!client) return;

  String currentLine = "";

  while (client.connected()) {
    if (client.available()) {

      char c = client.read();

      // Neste char er new line / HTTP request = ferdig
      if (c == '\n') {

        /**
           Request header fra klient er ferdig mottatt
           Viktig å returnere data her da client ikke vet om den
           får svar eller ikke, så kan føre til mange ekstra requester
           https://forum.arduino.cc/t/wifi-shield-doesnt-close-connection-with-client-stop/445144/10
        */
        if (currentLine.length() == 0) {

          client.println(F("HTTP/1.1 200 OK"));
          client.println(F("Content-Type: text/html"));
          client.println();
          client.print(F("html"));
          client.println();

          break;

        }
        // Det er flere enn 0 tegn i linjen på headeren, så start en ny linje
        else {
          currentLine = "";
        }
      }
      // Alle andre tegn, bortsett fra \r og \n (første if), legg til på linjen
      else if (c != '\r') {
        currentLine += c;
      }

      // Request url er /getSensorData
      if (currentLine.endsWith("GET /getSensorData HTTP")) {
          // do stuff
          break;
      }

    } // if client available
  } // while client connected

  //delay(50);
  client.stop();

}

// Koble til wifi
void setupWifi()
{

  Serial.println(F("Prøver å koble til wifi...."));

  uint8_t i = 0;
  WiFi.config(LOCAL_IP);

  while (WiFi.status() != WL_CONNECTED) {
    if (i >= WIFI_RETRY) {
      Serial.println(F("WIFI RETRY quit...."));
      return;
    }
    WiFi.begin(WIFI_SSID, WIFI_PASS);
    delay(10000);
    i++;
  }

  counterReconnect++;
  server.begin();

  Serial.println(F("Tilkobling OK...."));

}

void reconnectWifi()
{
  Serial.println(F("Reconnecter til wifi..."));
  error_wifi = 2;
  wifi_clent_do = 0;
  WiFi.end();
  setupWifi();
}