El Wi-Fi es un kit esencial para cualquier proyecto de bricolaje de Internet of Things (IoT), pero nuestro Arduino favorito no viene con Wi-Fi, y agregar un escudo de Wi-Fi puede llevar el costo total a alrededor de $ 40. ¿Qué pasa si le digo que hay una placa de desarrollo compatible con Arduino con Wi-Fi incorporado por menos de $ 10? Bueno, lo hay.
Conoce al asesino de Arduino: ESP8266. Era solo cuestión de tiempo antes de que la corona fuera robada de la brillante cabeza de nuestra querida placa de desarrollo Arduino. ¿Es posible enamorarse de una placa de circuito?
Dejando los nombres llamativos a un lado, el ESP8266 (también conocido como NodeMCU) se comercializó originalmente como un complemento de Wi-Fi de bajo costo para las placas Arduino, hasta que la comunidad de hackers se dio cuenta de que se podía eliminar completamente el Arduino de la ecuación.
En menos de un año, el ESP8266 se ha disparado en popularidad, y ahora está tan bien respaldado y desarrollado que, si actualmente usa Arduino, debe ponerse de pie y tomar nota. Compre uno ahora, luego siga esta guía para comenzar a programar su ESP8266, todo desde el familiar IDE de Arduino.
No estás limitado a usar el IDE de Arduino por supuesto, también son compatibles con Lua (que parece una Python adelgazada para mis ojos de novato), pero ya que estamos abordando esto desde la perspectiva de aquellos que hemos aprendido en Arduino, eso es lo que cubriremos exclusivamente hoy.
Hay bastantes modelos de ESP8266 por ahora, pero voy a seguir adelante y recomendaré este: ESP-12E (también conocido como NodeMCU 1.0, o es el nuevo hermano NodeMCU 2.0).
Es un poco más caro que los demás ($ 6.50 comparado con $ 4!), Pero incluye el controlador serial necesario para programar el chip, y tiene un regulador de potencia incorporado, así como muchos pines IO. Es ampliamente compatible y realmente no necesita nada aparte de una conexión USB para programación o alimentación, por lo que es más fácil trabajar con él. Si compra cualquier otro tipo de placa ESP8266, es posible que necesite un regulador de potencia 3.3v por separado y una conexión FTDI adecuada para la programación.
Primeros pasos con ESP8266-12E y Arduino
Primero, instale los controladores seriales para esta placa. Es posible que deba deshabilitar la firma de KEXT si está ejecutando El Capitan debido a los nuevos sistemas de seguridad.
A continuación, debemos habilitar la compatibilidad con ESP8266 desde el administrador de la placa Arduino IDE. Abra Preferencias e ingrese la siguiente URL donde dice URL adicionales del Administrador de la Junta :
http://arduino.esp8266.com/package_esp8266com_index.json
Haga clic en Aceptar, luego abra el Administrador de tableros desde Herramientas -> Menú Junta, busque esp8266 e instale la plataforma. Ahora debería ver una opción para NodeMCU 1.0.
Deje la CPU y suba la velocidad tal como está, y seleccione su puerto serie recién instalado. En Mac, esto aparece como cu.SLAB_USBtoUART .
Como primer programa, sugeriría el sencillo escáner de Wi-Fi, encuéntrelo en Archivo -> Ejemplos -> ESP8266WiFi -> WifiScan . Tenga en cuenta que es bastante lento para cargar, pero eventualmente dirá "finalizó la carga" y en ese punto (no antes, o interrumpirá el proceso de carga), puede abrir el monitor en serie. Deberías ver algo similar a esto:
¡Éxito! Ahora, intentemos conectarnos a uno.
Aquí hay un código barebones absolutamente simple para conectarse a una red Wi-Fi. No hace nada más que simplemente conectarse, pero es algo que puede agregar también más tarde. Solo recuerda cambiar YOUR_SSID y YOUR_PASSWORD a tus detalles de Wi-Fi. Suba, abra la consola serie y debería verla conectando.
#include const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; WiFiClient wifiClient; void setup() { Serial.begin(115200); 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"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void loop() { }
¿No es genial lo ridículamente simple que fue eso?
Antes de continuar, aquí está el diagrama de pinout, que podría ser útil más adelante. Tenga en cuenta que los números de pin a los que se hace referencia en el código son los números GPIO, no el D0-16 probablemente escrito en su placa PCB. Si de manera absoluta y positiva no puede entender por qué un sensor no funciona, probablemente haya mezclado los números de pin.
Quick Home Sensor inteligente con MQTT y DHT11
Aquí hay un ejemplo práctico que puede usar de inmediato para supervisar su hogar. Añadiremos un sensor de temperatura y humedad DHT11, luego informaremos los valores usando el protocolo MQTT a través de la red Wi-Fi, en mi caso a un sistema de domótica OpenHAB DIY (si no, tal vez quiera leer nuestra guía para principiantes obtener OpenHAB funcionando en una Raspberry Pi Comenzar con OpenHAB Home Automation en Raspberry Pi Comenzar con OpenHAB Home Automation en Raspberry Pi OpenHAB es una plataforma de automatización del hogar madura y abierta que se ejecuta en una variedad de hardware y es independiente del protocolo, lo que significa se puede conectar a casi cualquier hardware de automatización del hogar en el mercado hoy. Lea más, y la parte 2, que trata específicamente con la instalación de un servidor MQTT Guía para principiantes de OpenHAB Parte 2: ZWave, MQTT, reglas y gráficos Guía para principiantes de OpenHAB, Parte 2: ZWave, MQTT, reglas y gráficos OpenHAB, el software de automatización del hogar de código abierto, supera con creces las capacidades de otros sistemas de automatización del hogar en el mercado, pero no es fácil configurarlo. De hecho, puede ser francamente frustrante. Lee mas ).
En el lado del cableado, conecte el sensor DHT a GND, 3.3v y ~ D4 (o GPIO 2). Eso es todo lo que necesitamos por ahora.
Descargue estas bibliotecas MQTT y DHT. Incluso si ya los tiene, descargue estos de todos modos, haga una copia de seguridad de lo que tiene y sobrescriba con estos. La última biblioteca DHT11 de Adafruit utiliza un algoritmo automático para determinar la velocidad a la que se leen los datos del sensor, pero tiene errores en ESP8266 y el 90% de las veces da como resultado lecturas fallidas.
Con la versión anterior 1.0 de la biblioteca que incluí en la descarga, puede cambiar manualmente el tiempo: 11 funciona mejor para estas placas ESP2866. También revisé muchas copias de la biblioteca de MQTT tratando de encontrar una buena función de devolución de llamada, llegando finalmente a la que estaba incluida. Tendrá que reiniciar el Arduino IDE después de reemplazarlos.
Aquí está el código completo para el proyecto. En la parte superior se encuentran todas las variables que necesita cambiar, incluidos los detalles de Wi-Fi, el servidor MQTT (se puede usar una URL si se usa un servidor en la nube, aunque no hay autenticación) y los canales para publicar datos.
Así es como funciona y algunas notas:
- Primero nos conectamos al Wi-Fi, luego al servidor MQTT, luego comenzamos el bucle principal ().
- En el ciclo, sondeamos el sensor DHT cada 60 segundos y publicamos las lecturas en los canales MQTT relevantes. De nuevo, si encuentra que la mayoría de las lecturas dan como resultado un mensaje de error, tiene la versión incorrecta de la biblioteca DHT, rebaja a v1.0.
- client.loop () pasa el control a la biblioteca MQTT, lo que le permite reaccionar a los mensajes entrantes.
- Hay una función messageReceived () donde manejamos los mensajes entrantes, solo haga una instrucción if simple para comparar la carga útil con el mensaje que está esperando. Podría usar esto para activar un relevador, por ejemplo.
- Después de ejecutar estos durante unos días, descubrí que dejarían de funcionar aleatoriamente. Supongo que se trata de algún tipo de pérdida de memoria, pero dado que no tengo la habilidad de codificación para manejar eso y podría ser con las bibliotecas centrales, He optado por un restablecimiento suave simple todos los días. Exactamente un día después de que los nodos de los sensores se activan por primera vez, se reiniciarán.
- Al alimentar estos módulos baratos DHT11 de 3.3v, los valores de humedad son mucho más bajos de lo que deberían ser. He resuelto esto con una simple multiplicación y calibrado contra un sensor comercial. También te aconsejo que confirmes en contra de tu propia fuente conocida, antes de confiar en las lecturas. Alternativamente, aliméntelos con 5V - pero debe colocar una palanca de cambios de nivel lógico de 5v-3.3v entre el pin de datos y el ESP8266, o la dañará .
Si todo ha ido bien, ahora debería recibir lecturas de sensores en su intermediario MQTT, y puede continuar conectándolas a OpenHAB como se detalla en la parte 2 de nuestra guía para principiantes. Parte 2: ZWave, MQTT, reglas y gráficos OpenHAB Beginner's Guía Parte 2: ZWave, MQTT, reglas y gráficos OpenHAB, el software de automatización del hogar de código abierto, supera con creces las capacidades de otros sistemas de automatización del hogar en el mercado, pero no es fácil configurarlo. De hecho, puede ser francamente frustrante. Lea más, donde también le mostré cómo graficar los datos.
Adiós Arduino, te amamos mucho. Es una broma: no en todas partes de mi casa incluso se puede obtener Wi-Fi, por lo que para esos lugares aún necesitaré una red de malla con Arduino y receptores de RF. ¿Pero qué vas a hacer con ESP8266? ¿Algún proyecto usando ESP8266 que te gustaría ver escrito en MakeUseOf? Háganos saber en los comentarios!