ESP8266
ESP8266. ESP01 2 GPIOs

motivación

Pues bastante clara, porque necesito poder encender / apagar un par de dispositivos. La intención es poder prescindir de interruptores físicos y que el acceso sea por wifi. Los dispositivos son; una bomba de agua que activa el circuito cerrado de una fuente ornamental y por otro lado una pequeña farola.

componentes electrónicos

El estrella es un pequeño módulo wifi, el esp8266, que actúa en este caso como un cliente wifi y que dará acceso a un par de pines GPIO que dependiendo de si tienen carga o no activarán un canal del siguiente elemento. Este elemento es un módulo que está compuesto de un par de relés aislados que cierran o no un circuito, dependiendo del estado de las entradas.

Relé de 2 canales
Relé de 2 canales

También es necesaria una fuente de alimentación que proporcione las tensiones necesarias para cada elemento. En este caso he usado un cargador de móvil que entrega 5V. Hay que tener especial cuidado con no sobrepasar las tolerancias de voltaje de los componentes, de manera, que por ejemplo para alimentar al esp8266 será necesario conseguir 3.3V. Para conseguirlo, he usado un pequeño módulo que recibiendo los 5V por un pin, entrega 3.3 por el pin etiquetado como v°.

1.8V - 5V To 3.3V
1.8V – 5V To 3.3V

 

código

Una ventaja del módulo esp8266 es la compatibilidad con el IDE de arduino, de manera que es posible generar el código con el IDE y subirlo al dispositivo para probar su funcionalidad. Os adelanto el código Font_Light y en la siguiente entrega explico en detalle el conexionado y el detalle del código fuente.

#include 

// Definicion de los gpios de los que dispone el ESP-01
// GPIO 2 para la fuente
// GPIO 0 para la luz
const int font = 2;
const int light = 0;

// Variables auxiliares para guardar el estado actual de la salida
String fontState = "off";
String lightState = "off";


// Configuracion de IP estatica
IPAddress ip(192, 168, 0, 7);
IPAddress subnet(255, 255, 255, 0);
IPAddress gateway(192, 168, 0, 1);
IPAddress dns(9, 9, 9, 9);

// SSID y Pass de la conexion WLAN
const char* ssid     = "Tu Wifi";
const char* password = "Tu Password";

// Activo el server. Aunque cuanto este todo con MQTT lo quitare
WiFiServer server(80);

// Variable para almacencar las "HTTP request"
String header;

void wifi_conf()
{
  WiFi.mode(WIFI_STA);
  
  WiFi.config(ip, gateway, subnet, dns);
  
  delay(100);
  
  WiFi.begin(ssid, password);
  Serial.print("Conectando a la wifi ...");

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  
  while (WiFi.waitForConnectResult() != WL_CONNECTED)
  {
    Serial.println();
    Serial.println("Fallo en la conexion wlan");
    delay(5000);
    ESP.restart();  
  }
  
  Serial.println();
  Serial.print("Conectado con la direccion IP: ");
  Serial.println(WiFi.localIP());
}


void setup()
{
  Serial.begin(115200);
  Serial.println();

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

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

  wifi_conf();

  server.begin();
}


void loop()
{
  WiFiClient client = server.available();   // Listen for incoming clients

  if (client) {                             // If a new client connects,
    Serial.println("New Client.");          // print a message out in the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      ...
      ...
      aquí mucho código para gestión de la mini web
      ...
      ...
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

 

Referencias

Build an ESP8266 Web Server – Code and Schematics

http://www.instructables.com/id/Esp8266-Web-Control-with-Nodemcu-and-Lua/