Borja HTTP Control 1

La Idea es controlar un Arduino po wifi mediante peticiones HTTP.

Bueno hace unos dias Recibi una llamada de un amigo con una idea de un proyecto Para sus Alumnos.

La Idea es controlar un Arduino por peticiones HTTP

Con 39Lineas (primera version)

Para luego integrarlo en algo MAS GRANDE (esto ya es su parte y de momento no se puede contar.)

Manejo:

1) Conectarnos a la red wifi creada por el ESP8266

Una Vez Encendido el ESP8266 aparecera una red WIFI llamada ESP

HTTP_Control_1

2) Abrir el navegador y teclear la siguiente direccion: http.//192.168.4.1

HTTP_Control_2

3) Pulsar en el enlace de encender/apagar led.

el led deberia responder.

HTTP_Control_4

HTTP_Control_3

Explicacion del codigo:

1) El programa crea una RED WIFI llamada ESP

  WiFi.mode(WIFI_AP);
  WiFi.softAP("ESP");

2) Despues Arranca un servidor web con 3 paginas.

  servidor_web.on("/LedOn"  , D4a0         );//en la placa WEMOS d1 mini 
  servidor_web.on("/LedOff" , D4a1         );// el led se enciende al poner D4 a 0
  servidor_web.on("/"           , pag_principal);
  servidor_web.begin();

3) Muestra via serie la Direccion (esto es informativo)

  Serial.println("\n\n Iniciando Red WIFI ESP... ");
  Serial.println(" http://192.168.4.1 ");

4) El truco esta en la combinacion de las funciones y las paginas del servidor.

servidor_web.on("/LedOn"  , D4a0 );

Quiere decir que al abrir la direccion http://192.168.4.1/LedOn se lanzara una llamada a la funcion D4a0()
que encendera el led. ( en la placa Wemos D1 el led se enciende al poner D4 a 0 )

void D4a0() {
  pinMode(D4, OUTPUT);
  digitalWrite(D4, 0);
  servidor_web.send(200, "text/plain", "Ok D4=0");
}

En esta funcion Enciendo el LED poniendo el pin D4 a 0.

  pinMode(D4, OUTPUT);
  digitalWrite(D4, 0);

Y muesto resultado.

  servidor_web.send(200, "text/plain", "Ok D4=0");

Aqui teneis el codigo completo.


#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
ESP8266WebServer servidor_web(80);

void setup(){
  Serial.begin(115200);
  Serial.println("\n\nIniciando WIFI ESP...");

  WiFi.mode(WIFI_AP);
  WiFi.softAP("ESP");
  
  servidor_web.on("/LedOn"  , D4a0         );//en el WEMOS d1 mini el led  
  servidor_web.on("/LedOff" , D4a1         );//el led se enciende cuandoesta conectado a D4
  servidor_web.on("/"       , pag_principal);

  servidor_web.begin();
  Serial.println("http://192.168.4.1");
}

void loop(){
  servidor_web.handleClient();
  yield();delay(1);//yield() ayuda a manejar la gestion wifi
}

void D4a0() {
  pinMode(D4, OUTPUT);
  digitalWrite(D4, 0);
  servidor_web.send(200, "text/plain", "Ok D4=0");
}

void D4a1() {
  pinMode(D4, OUTPUT);
  digitalWrite(D4, 1);
  servidor_web.send(200, "text/plain", "Ok D4=1");
}

PROGMEM const char Texto_html_pagina_principal[] = 
R"=====(
<a href=/LedOn > Encener LED </a> | 
<a href=/LedOff> Apagar  LED </a>
)=====";

void pag_principal() {
    servidor_web.send(200, "text/html", Texto_html_pagina_principal );
}

En la proxima revision añadire:

  • que se pueda conectar a un wifi
  • que se pueda leer una patilla analogica (A0) Asi el programa deberia ser totalmente funcional.