WeMOS LED-eksempel

Fra HTX Arduino
Spring til navigation Spring til søgning
WeMOS WiFi Processor
WeMOS Server Connection - Simpel Server - Flere SSID - ESP8266 - Watchdog - Interrupt
Anvendelse LED-eksempel - AD-eksempel - Mail - POST metode - Web Publicering

LED-eksemplet er hentet fra esp8266learning.com[1].

Ideen med koden er at man kan tænde og slukke en LED ved at klikke på et link på den side WeMOS sætter op. Den samlede kode ser ud som følger, og skal kun have angivet et netværk med password for at fungere:

#include <ESP8266WiFi.h>
 
const char* ssid = "ssid name";
const char* password = "ssid password";
 
int ledPin = D5;
WiFiServer server(80);
 
void setup() {
  Serial.begin(115200);
  delay(10);
 
 
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
 
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
 
  // Start the server
  server.begin();
  Serial.println("Server started");
 
  // Print the IP address
  Serial.print("Use this URL : ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
}
 
void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
 
  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  // Match the request
  int value = LOW;
  if (request.indexOf("/LED=ON") != -1) {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  } 
  if (request.indexOf("/LED=OFF") != -1){
    digitalWrite(ledPin, LOW);
    value = LOW;
  }
 
 
 
  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
 
  client.print("Led pin is now: ");
 
  if(value == HIGH) {
    client.print("On");  
  } else {
    client.print("Off");
  }
  client.println("<br><br>");
  client.println("Click <a href=\"/LED=ON\">here</a> turn the LED on pin 5 ON<br>");
  client.println("Click <a href=\"/LED=OFF\">here</a> turn the LED on pin 5 OFF<br>");
  client.println("</html>");
 
  delay(1);
  Serial.println("Client disconnected");
  Serial.println("");
 
}

Etablering af serveren

Det er beskrevet på WeMOS Server Connection hvordan forbindelsen til serveren oprettes.

Henvendelse fra client

Det første der detekteres er om der en client der henvender sig. Det vil sige om der er en forespørgsel fra en webbrowser.

Det sker i følgende kode:

  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }

Den første del ser om der er en henvendelse, og hvis der ikke er, så afbrydes loop(), så der ikke sker andet i koden.

Hvis der så er en henvendelse, så afventes der at hele henvendelsen kommer.

Læsning af henvendelsen

Når der er registreret en hel henvendelse, så læses request-linjen:

  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

Resten af henvendelsen slettes med flush() metoden.

Hardware response på henvendelsen

I de følgende kodelinjer læses hvad der står i henvendelsen til serveren (det der står i linket bliver til request-linjen):

  // Match the request
  int value = LOW;
  if (request.indexOf("/LED=ON") != -1) {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  } 
  if (request.indexOf("/LED=OFF") != -1){
    digitalWrite(ledPin, LOW);
    value = LOW;
  }

Alt efter om der står LED=ON eller LED=OFF tændes eller slukkes lysdioden.

Det skal her bemærkes at det i dette eksempel er en lysdiode forbundet til D5 der anvendes. Hvis man vil gøre det enklere og anvende den indbyggede LED på WeMOS D1 mini Pro, så skal man rette ledPin til D2, og man skal vende reaktion så ON skriver LOW og OFF skriver HIGH, fordi den indbyggede LED er forbundet til forsyningen og dermed skal den have det inverterede signal.

Side der vises

Uanset om der bliver reageret i hardwaren, så giver webserveren en client response, der opbygger websiden. Det gøres med følgende kode:

  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
 
  client.print("Led pin is now: ");
 
  if(value == HIGH) {
    client.print("On");  
  } else {
    client.print("Off");
  }
  client.println("<br><br>");
  client.println("Click <a href=\"/LED=ON\">here</a> turn the LED on pin 5 ON<br>");
  client.println("Click <a href=\"/LED=OFF\">here</a> turn the LED on pin 5 OFF<br>");
  client.println("</html>");

Koden printer HTML-kode til client, så webbrowseren der har foretaget client-henvendelsen kan vise noget fornuftigt.

Referencer