Arduino D1 i WiFi – WeMos D1

Założenie: włączanie i wyłączanie urządzeń poprzez WiFi przy użyciu przeglądarki.

Do zbudowania projektu użyłem WeMos D1 WiFi (poprawiono z: Arduino D1 po zgłoszonej uwadze od Dawida) , a do programowania ARDUINO 1.8.1.

 

 

 

Kod napisany jest dla wersji z plikami graficznymi i tekstowymi.

Z plikami graficznymi Arduino/WeMos D1 radzi sobie trochę gorzej, bo musi je sobie ściągnąć na swój „serwer”.

Porównanie obok.

 

Kod:

 

#include <ESP8266WiFi.h>

const char* nazwa_sieci = "To_jest_nazwa_Twojej_Sieci_WiFi";
const char* haslo = "To_jest_hasło_do_Twojej_Sieci";

// położenie plików graficznych
// jeśli wolisz przyciski graficzne, odkomentuj kod z położeniem plików i zakomentuj kod z linkami tekstowymi

/*
const char* wl = "<img src=http://mojeavr.pl/wp-content/uploads/2017/04/on-minimini.jpg>";
const char* wyl = "<img src=http://mojeavr.pl/wp-content/uploads/2017/04/off-minimini.jpg>";
const char* wl2 = "<img src=http://mojeavr.pl/wp-content/uploads/2017/04/on-mini.jpg>";
const char* wyl2 = "<img src=http://mojeavr.pl/wp-content/uploads/2017/04/off-mini.jpg>";
*/
const char* wl = "<font color = green>urządzenie jest załączone</font>";
const char* wyl = "urządzenie jest rozłączone";
const char* wl2 = "<BR><BR><font color = green>ZAŁĄCZ</font>";
const char* wyl2 = "<BR><font color = red>ROZŁĄCZ</font>";

int WY_2 = D2;
WiFiServer server(80);

void setup() {
Serial.begin(115200);
delay(10);

pinMode(WY_2, OUTPUT);
digitalWrite(WY_2, LOW);

// połączenie do sieci WiFi
Serial.println();
Serial.println();
Serial.print("Polaczono z siecia: ");
Serial.println(nazwa_sieci);

WiFi.begin(nazwa_sieci, haslo);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi dziala prawidlowo");

// Rozruch serwera
server.begin();
Serial.println("Serwer dziala prawidlowo");

// Wyświetlenie adresu IP
Serial.print("Oto adres, na ktorym dziala program : ");
Serial.print("http://");
Serial.print(WiFi.localIP());
//Serial.println(WiFi.localIP()); // z ln na końcu
Serial.println("/");
}

void loop() {
// Sprawdzenie połącznenia
WiFiClient client = server.available();
if (!client) {
return;
}

// oczekiwanie na dane
Serial.println("nowe polaczenie");
while(!client.available()){
delay(1);
}

// Odczytaj dane
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();

// dopasuj wybór
int value = LOW;
if (request.indexOf("/ODB_2=ON") != -1) {
digitalWrite(WY_2, HIGH);
value = HIGH;
}
if (request.indexOf("/ODB_2=OFF") != -1){
digitalWrite(WY_2, LOW);
value = LOW;
}

// Ustawienia w przeglądarce - kodowanie, to, że to jest html...
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<meta charset=UTF-8>");
//tutaj budowa strony www
client.println("<html>");

client.println("<STYLE TYPE=text/css>");
client.println("a {text-decoration: none;}");
client.println("a:hover {text-decoration: none;}");
client.println("</STYLE>");

//tabela (choć nie musi być...)
client.println("<table style=width:100%>");
client.println("<tr>");
client.println("<th><h1><u><b>Wyjście 2</u></b></h1><br>Status:<br></th>");
client.println("</tr>");

client.println("<tr>");
client.println("<th>");
if(value == HIGH) {
client.print(wl);
} else {
client.print(wyl);
}
client.println("</th>");
client.println("</tr>");

client.println("<tr>");
client.println("<th>");
client.println("<a href=\"/ODB_2=ON\">");
client.println(wl2);
client.println("</a><br>");

client.println("<a href=\"/ODB_2=OFF\">");
client.println(wyl2);
client.println("</a><br>");
client.println("</th>");
client.println("</tr>");

client.println("</table>");
client.println("</html>");

delay(1);
Serial.println("Zakonczenie ladowania strony www");
Serial.println(""); //bez tego nie chce u mnie działać
}

 

Po wgraniu kodu pozostaje jeszcze sprawdzenie adresu, który wpiszemy do przeglądarki.

W programie do wgrywania kodu do Arduino klikamy:
Narzędzia – Monitor portu szeregowego (skrót klawiszowy Ctrl+Shift+M) i jeśli wszystko poszło dobrze odczytujemy.

Można się również pokusić o wpisanie trwałego IP do naszego Arduino :).

W przyszłości dopiszę kod do obsługi wielu urządzeń.

Leave a Reply