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.
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°.
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
http://www.instructables.com/id/Esp8266-Web-Control-with-Nodemcu-and-Lua/