sebipapanicolau
Usuario

Bienvenidos a este tutorial, cuando terminen el proyecto van a poder prender y apagar luces, zapatillas, enchufes y otros aparatos que le enchufamos a través de google assistant en nuestro celular. Para esto usaremos el ESP8266 que es una placa WiFi programable como si fuera un arduino. Para prender y apagar las luces usaremos un relay. (depende el relay pude soportar distintos voltajes, el que elejí yo sirve para luces y aparatos de bajo voltaje pero no funciona para ventiladores, aspiradoras, etc.) Hardware Necesitamos: Un esp8266: https://articulo.mercadolibre.com.ar/MLA-670874659-nodemcu-wifi-esp8266-lua-v3-gpio-pwm-i2c-arduino-belgrano-_JM https://www.ebay.com/itm/NodeMcu-Lua-WIFI-Internet-Things-development-board-based-ESP8266-CP2102-module/201542946669?epid=13003516518&hash=item2eece54f6d:g:EOIAAOSw4q9XT5mo El del link tiene puerto micro usb que nos permite que no tengamos que comprar el adaptador usb a ttl para conectarlo a la computadora. Aunque hay otros que no tienen el puerto micro usb y son de menor tamaño. La parte de software del tutorial es igual para todos, aunque yo les recomiendo que compren el de NodeMCU. Cables jumper: Para el caso del esp de NodeMCU necesitamos que sean hembra-hembra, algunos esp no vienen con los pines, en ese caso vamos a necesitar además una breadboard o protoboard y los cables macho-hembra Algo para conectarle: (lámpara, zapatilla etc) Enchufe: En la ferretería venden unas cajas que vienen con entrada de cables y una ficha de luz para conectarle la lámpara Relay / Relé https://articulo.mercadolibre.com.ar/MLA-687904582-modulo-relay-rele-de-1-canal-5v-10a-arduino-avr-en-belgrano-_JMCualquiera parecido a este funcionará bien. Tener en cuenta para que lo van a usar y fijarse el voltaje que soporta. Fuente de alimentación: con un cargador de celular micro usb alcanza Pc y cable micro usb para programar el ESP ____________________________________________________ Primero vamos a hacer las conecciones: El relay tiene 3 pines para conectar al ESP (vcc o +), (gnd o - ) y ( IN o S). Vamos a tener que conectar el pin vcc con el de 3V del esp y el GND con G del esp (ground). Finalmente tenemos que conectar IN o S al pin D5. Para conectar el enchufe o luz, vamos a usar los conectores para energia que tiene el relay. Vamos a usar el del medio como entrada de energía y cualquiera de los que están a los lados como salida. [[ Advierto que si no sabés nada de electricidad puede ser peligroso y le deberías pedir ayuda a alguien que sepa-]] Nosotros tenemos de los cables que salen de la pared, enchufe etc uno negativo y otro positivo. En mi caso, el positivo lo conectamos directamente a lo que le necesitemos dar energía (enchufe, zapatilla, bombita, velador, lampara) y por el otro lado, el positivo lo vamos a introducir en el conector del medio del relay habiendo desatornillado previamente este y puesto el cable pelado. Por cualquiera de los conectores laterales vamos a introducir otro cable pelado que vaya al enchufe o aparato que le necesitemos dar energía (zapatilla, bombita, etc). Y atornillamos ambos conectores Con esto terminamos con las conexiones. Luego depende de ustedes la estética del producto final. Pueden comprar en la ferretería unas fichas de luz como las que van en la pared para que quede más prolijo y puede meter todo ahí adentro. Software Entramos a https://accounts.adafruit.com/users/sign_up para registrarse con adafruit. Introducimos los datos que nos piden y le damos a create account. Una vez creada la cuenta vamos al apartado de “Feeds” en la izquierda. Le damos a “actions” -> “create new feed” En el apartado de name vamos a poner onoff y la descripción lo que queramos y le damos a create. Luego vamos al apartado de los Dashboards, Actions -> create new dashboard y elegimos el nombre que queramos por ejemplo “luz”, luego lo abrimos y seleccionamos en el “+” celeste arriba a la derecha. Seleccionamos el primer botón (toggle) seleccionamos la casilla de nuestro feed (on off), next step y pondremos el título que queramos al botón, pero es importante que en “button ON text” pongamos “1” y en “button OFF text” pongamos “0” y le damos a create block. Por último vamos a seleccionar el icono amarillo de la llave y vamos a copiar esos datos que nos van a ser útiles para más adelante. Descargar e instalar el IDE de arduino desde: https://www.arduino.cc/en/Main/OldSoftwareReleases Abrir el IDE de Arduino e ir a Archivo (File) -> preferencias (Preferences) y en donde dice “aditional board manager URLs pegar esto: http://arduino.esp8266.com/stable/package_esp8266com_index.json Damos a OK y cerramos y volvemos a abrir el arduino IDE. Vamos a la pestaña Tools -> boards -> boards manager En el cuadro de busqueda escribimos “esp8266” sin las comillas clickeamos en el resultado y seleccionamos “Install” y despues Close. Volvemos a reiniciar el IDE de Arduino y esta vez conectamos nuestro ESP8266 con un cable micro usb a la computadora En la pestaña de tools del IDE vamos a boards y seleccionamos: “NodeMCU 1.0 (ESP-12e module)” En la misma pestaña de tools seleccionamos port y ahí elegimos al que esté conectado el esp (generalmente hay uno solo que dice COM seguido de un numero) si aquí no aparece nada comprobá que la coneccion a la PC esté bien hecha y reinicia el programa. En el caso que siga sin aparecer, podés instalar los drivers buscando en google. Una vez hecho esto comprobamos que la CPU speed sea “80mhz” y que la upload speed sea “115200”. Ahora tenemos que activar las librerías. Para hacer esto vamos a a la pestaña Sketch -> Include library -> manage libraries. Acá vamos a descargar e instalar las librerías que vamos a necesitar para el código que les voy a pasar después.. Algunas de las librerías que instalé yo no son necesarias pero las pueden instalar por las dudas.La lista de librerías que instalé es esta: Bridge, Explora, Ethernet, Firmata, Keyboard, LiquidCrystal, Mouse, Robot Control, robot IR Remote, Robot Motor, SD, Servo, SpaceBrewJUn, Temboo, Adafruit ESP8266, Adafruit GFX library, Adafruit IO Arduino, Adafruit MQTT Library, Adadruit SSD1306, Adafruit SSD1306 Wemos mini oled, arduinoOTA, aRest, aRest UI, ConfigManager, CoogleIOT, DNSserver, EEPROM, ESP8266, ESP8266AVRISP, ESP8266Client, ESP8266httpUpdate, ESP8266httpUpdate server, ESP8266LLMNR, ESP8266mDNS, ESP8266NetBios, ESP8266SSDP, ESP8266Webserver, ESP8266wifi, ESP8266wifimesh, ethernet( ESP8266), GDBStub, GSM, Hash, OakOLed, PubSubClient, SD( ESP8266), servo( ESP8266), SoftwareSerial, SPI, SPISlave, Stepper, TFT, TFT_Touch_shield, Ticker, Wifi, WifiManager, Wire. Tengan en cuenta que muchas de estas librerías ya vendrán preinstaladas en el arduino IDE y no tendrán que hacer nada con ellas. Además, la mayoría de estas librerías no son necesarias para este proyecto pero les podrán ser útiles en el futuro.( Si al mandar el codigo a el ESP les manda un error de fatal error que dice que hay un problema con un #include revisar que todas estas librerías están instaladas) 13) Volvemos a reiniciar el IDE y vamos a File -> New Seleccionamos todo y pegamos este código: /************************************************************************************************ Tutorial controlar relay con ESP8266 con adafruit IO y Google Assistant Adafruit MQTT Library ESP8266 Example Must use ESP8266 Arduino from: https://github.com/esp8266/Arduino Works great with Adafruit's Huzzah ESP board & Feather ----> https://www.adafruit.com/product/2471 ----> https://www.adafruit.com/products/2821 Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Tony DiCola for Adafruit Industries. MIT license, all text above must be included in any redistribution ****************************************************/ #include <ESP8266WiFi.h> #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" #define relay D5 /************************ Acá abajo ponés las credenciales de tu router *********************************/ #define WLAN_SSID ".. SSID del Wifi .. " #define WLAN_PASS "...Contraseña del Wifi..." /************************* Acá abajo ponés lo que dice el icono de la llave amarilla *********************************/ #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 // use 8883 for SSL #define AIO_USERNAME "...User Name..." #define AIO_KEY "...Active Key..." /************************** si algo no funciona comprobá que los datos que pusiste arriba están bien *************************************************/ // Create an ESP8266 WiFiClient class to connect to the MQTT server. WiFiClient client; // or... use WiFiFlientSecure for SSL //WiFiClientSecure client; // Setup the MQTT client class by passing in the WiFi client and MQTT server and login details. Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); /*********************************************************************/ // Setup a feed called 'photocell' for publishing. // Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname> //Adafruit_MQTT_Publish photocell = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/photocell"; // Setup a feed called 'onoff' for subscribing to changes. Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/onoff"; /***************************************************************/ // Bug workaround for Arduino 1.6.6, it seems to need a function declaration // for some reason (only affects ESP8266, likely an arduino-builder bug). void MQTT_connect(); void setup() { Serial.begin(115200); delay(10); pinMode(relay,OUTPUT); Serial.println(F("Adafruit MQTT demo"); // Connect to WiFi access point. Serial.println(); Serial.println(); Serial.print("Connecting to "; Serial.println(WLAN_SSID); WiFi.begin(WLAN_SSID, WLAN_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."; } Serial.println(); Serial.println("WiFi connected"; Serial.println("IP address: "; Serial.println(WiFi.localIP()); // Setup MQTT subscription for onoff feed. mqtt.subscribe(&onoffbutton); } uint32_t x=0; void loop() { // Ensure the connection to the MQTT server is alive (this will make the first // connection and automatically reconnect when disconnected). See the MQTT_connect // function definition further below. MQTT_connect(); // this is our 'wait for incoming subscription packets' busy subloop // try to spend your time here Adafruit_MQTT_Subscribe *subscription; while ((subscription = mqtt.readSubscription(5000))) { if (subscription == &onoffbutton) { Serial.print(F("Got: "); Serial.println((char *)onoffbutton.lastread); uint16_t state = atoi((char *)onoffbutton.lastread); digitalWrite(relay,state); } } // ping the server to keep the mqtt connection alive // NOT required if you are publishing once every KEEPALIVE seconds /* if(! mqtt.ping()) { mqtt.disconnect(); } */ } // Function to connect and reconnect as necessary to the MQTT server. // Should be called in the loop function and it will take care if connecting. void MQTT_connect() { int8_t ret; // Stop if already connected. if (mqtt.connected()) { return; } Serial.print("Connecting to MQTT... "; uint8_t retries = 3; while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected Serial.println(mqtt.connectErrorString(ret)); Serial.println("Retrying MQTT connection in 5 seconds..."; mqtt.disconnect(); delay(5000); // wait 5 seconds retries--; if (retries == 0) { // basically die and wait for WDT to reset me while (1); } } Serial.println("MQTT Connected!"; } Ahora vamos a tener que cambiar algunas partes del código. Primero, en donde dice “..SSID del Wifi ..” y “...Contraseña del Wifi…” vamos a escribir obviamente las credenciales de nuestro router (el nombre de la red y la clave del wifi) . Por último tenemos que cambiar donde dice “... User Name…” y “...Active Key...” por los datos que sacamos en el paso 1) en el icono de la llave amarilla en el apartado del dashboard de adafruit IO. Una vez que terminamos esto vamos a darle a Ctrl+U para que se suba el código al Esp8266. Esto tardará unos pocos minutos Para poder decirle los comandos a Google necesitamos una cuenta de Google y tener Assistant en inglés. Esto solo funciona en Android Marshmallow en adelante. Para poner Assistant en inglés tendremos que cambiar el idioma en la configuración de Android muy facilmente. Bajamos la app IFTTT del play store y creamos una cuenta. Nos vamos al apartado de applets en la esquina inferior derecha y apretamos el + para crear uno nuevo. Tocamos en “this” y en el cuadro de búsqueda buscamos Google Assistant y lo seleccionamos. Tocamos “say a simple phrase” y escribimos el comando que le vamos a decir a google para que prenda la luz. En el último cuadro vamos a escribir lo que queremos que nos responda al decirle este comando. Seleccionamos “That” y en el cuadro de búsqueda buscamos “Adafruit” lo seleccionamos y ponemos “send data to adafruit IO” y tocamos en el botón de Connect. Ahora nos va a pedir que iniciemos sesión con la cuenta que hicimos en el paso 1) luego de hacer esto, le damos a “authorize” para que autorice la comunicación con la app IFTTT. Al hacer esto volveremos a la app IFTTT y en el apartado de Feed Name seleccionamos “onoff” y en “data to save” y escribimos “1”. Guardamos la acción tocando en el tick y le damos a Finish. Ahora volvemos al apartado de applets y vamos a crear otro tocando de nuevo el “+”, seleccionamos de nuevo google assistant pero en este caso le vamos a decir la frase para apagar la luz y lo que nos vaya a responder. En el apartado de “that” vamos a volver a poner adafruit y el mismo feed (onoff), pero en “data so save” pondremos 0, guardamos el applet y con esto ya terminamos la configuración en el celular. 17) Eso es todo, simplemente conecten todos los cables correctamente y conecten el ESP8266 una fuente de energía (con un cargador común de celular alcanza). 18) Además de poder accionar el relay desde Google Assistant, también lo podremos hacer desde el mismo dashboard de adafruit IO. 19) Desde IFTTT pueden asignar cualquier cantidad de comandos para que prenda el interruptor, por ejemplo un widget de botón, una alarma, notificación, y muchas más. Con este proyecto el único límite es su imaginación. 20) Si tienen problemas asegurense de: Haber seguido los pasos correctamente Haber escrito bien el SSID y la contraseña de su wifi Haber instalado las librerías correctamente Haber elegido la velocidad de transferencia 115200 Haber seleccionado correctamente la placa En el caso de que nada funcione descargar los drivers buscando en Google y reiniciar pc