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();
}