Controlando uma luz LED com PC usando HAN baseado em ESP8266 e HiveMQ Broker: IOT Parte 20

Control de una luz LED con PC usando HAN basado en ESP8266 y HiveMQ Broker: IOT Parte 20

En los tutoriales anteriores, se implementó el protocolo MQTT para configurar la comunicación de datos entre Móvil y PC, PC y PC, y Móvil y Móvil. El verdadero poder de los protocolos IoT sólo se puede lograr con dispositivos IoT reales. En este tutorial, se diseñará una aplicación IoT de la vida real basada en el protocolo MQTT.
El Internet de las cosas tiene como objetivo potenciar los objetos cotidianos con electrónica integrada e infraestructura de TI. Su objetivo es conectar estos objetos en tiempo real con la red de Internet y permitirles comunicarse con otros objetos ubicados en el mismo lugar o remotos. Para comunicarse entre sí, los dispositivos IoT deben seguir protocolos. Un desarrollador de aplicaciones debe encargarse principalmente de la implementación de los protocolos de la capa de aplicación, mientras que normalmente la implementación de los protocolos de la capa de transporte y de red permanece en manos de los administradores o programadores de la red. En este proyecto IOT, se utilizará el protocolo MQTT para conectar el dispositivo IOT diseñado a Internet.
En este proyecto, se diseñará una red doméstica simple (HAN) utilizando el módulo Wi-Fi ESP8266. Esta red doméstica se puede controlar desde una PC remota a través de Internet. La red doméstica diseñada en este proyecto es más simplista, con una luz LED controlada por Internet. Se supone que el PC remoto que controla la luz LED (Home Area Network) está instalado en una oficina alejada de la casa.
Por lo tanto, el dispositivo IOT diseñado en este proyecto es un controlador de luz LED simple que se diseña conectando la luz LED directamente con el módulo Wi-Fi ESP-8266. El módulo Wi-Fi y la luz LED se alimentan continuamente con la ayuda de un convertidor de USB a serie. El módulo Wi-Fi debe cargarse con firmware que pueda interpretar los datos recibidos a través de Internet y utilizarlos para controlar la luz LED. Arduino UNO se utiliza para actualizar el código de firmware en el módulo ESP8266. El módulo ESP también se puede actualizar con código utilizando un convertidor FTDI como el CP2102. El firmware en sí está escrito en el IDE de Arduino.
La PC remota actúa como otro dispositivo IoT en el proyecto. La PC se conecta al dispositivo basado en ESP8266 a través del intermediario MQTT. hiveMQ se utiliza como intermediario MQTT en este proyecto. La PC se conecta al corredor mediante un complemento de Chrome: MQTTLens.
Componentes necesarios –
Lista de componentes necessários para controlador de luz LED baseado em ESP8266 HAN e HiveMQ Broker
Fig. 1: Lista de componentes necesarios para el controlador de luz LED basado en ESP8266 HAN y HiveMQ Broker
Software requerido –
1. ArduinoIDE
2. Corredor HiveMQ
3. MQTTlens (complemento de Chrome)
Diagrama de bloques -
Diagrama de blocos do controlador IOT LED baseado em ESP8266
Fig. 2: Diagrama de bloques del controlador LED IOT basado en ESP8266
Conexiones de circuito –
En primer lugar, es necesario cargar la placa ESP8266 con el código de firmware. En este tutorial, el código del firmware se escribe utilizando Arduino IDE. Se carga en la placa ESP8266 usando Arduino UNO. En este proyecto se utiliza una placa ESP8266 genérica. Esta placa no cuenta con resistencias de arranque, regulador de voltaje, circuito de reinicio y adaptador serial USB. El módulo ESP8266 funciona con una fuente de alimentación de 3,3V con una corriente mayor o igual a 250mA. Por lo tanto, el adaptador USB a serie CP2102 se utiliza para suministrar voltaje de 3,3 V con suficiente corriente para hacer funcionar el ESP8266 de manera confiable en todas las situaciones.
El módulo Wi-Fi ESP8266 es un SOC independiente con una pila de protocolo TCP/IP integrada que puede acceder a una red Wi-Fi. El ESP8266 es capaz de alojar una aplicación o descargar todas las funciones de la red Wi-Fi desde otro procesador de aplicaciones. Cada módulo ESP8266 viene preprogramado con el firmware del conjunto de comandos AT. El módulo está disponible en dos modelos: ESP-01 y ESP-12. El ESP-12 tiene 16 pines disponibles para interconexión, mientras que el ESP-01 solo tiene 8 pines disponibles para su uso. El ESP-12 tiene la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do modem Wi-Fi ESP8266 ESP-12
Fig. 3: Tabla que enumera la configuración de pines del módem Wi-Fi ESP8266 ESP-12
En el proyecto se utiliza el modelo ESP-01. El modelo ESP-01 tiene la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do modem Wi-Fi ESP8266 ESP-12
Fig. 4: Tabla que enumera la configuración de pines del módem Wi-Fi ESP8266 ESP-12
Los pines Chip Enable y VCC del módulo están conectados a 3,3 V CC mientras que el pin de tierra está conectado a tierra común. El pin de habilitación del chip está conectado a VCC a través de una resistencia pull-up de 10K. El pin RESET está conectado a tierra a través de un interruptor táctil, donde el pin recibe VCC a través de una resistencia pull-up de 10K de forma predeterminada. Los pines Tx y Rx del módulo están conectados a los pines RX y TX del Arduino UNO. El pin GPIO-0 del módulo está conectado a tierra a través de un interruptor táctil donde el pin recibe VCC a través de una resistencia pull-up de 10K de forma predeterminada. Estas resistencias pull-up actúan como un circuito divisor de voltaje que protege la placa ESP8266 del alto voltaje. La placa Arduino funciona a 5 V y también a 3,3 V, mientras que el ESP8266 funciona a 3,3 V. Aunque la placa Arduino en sí se alimenta a través de su pin de alimentación de 3,3 V, este circuito divisor de voltaje agrega aún más protección contra cualquier pico de voltaje. El uso de resistencias pull-up aumenta la estabilidad del circuito. Con estas conexiones de circuito, la propia placa Arduino actúa como un adaptador de USB a serie. Las conexiones del circuito entre el módulo Arduino UNO y ESP8266 para la carga de arranque se pueden resumir de la siguiente manera:
Tabela de listagem de conexões de circuito entre o modem ESP8266 e o ​​Arduino Uno
Fig. 5: Tabla que enumera las conexiones del circuito entre el módem ESP8266 y Arduino Uno
Durante la compilación del código, se deben presionar los interruptores GPIO0 y RESET. Para cargar el programa, se debe soltar el interruptor RESET mientras se debe dejar presionado el interruptor de programación GPIO0, para que el ESP pueda ingresar al modo de programación. Después de cargar el código, también se debe liberar la clave de programación.
Escriba el código de firmware en Arduino IDE y conecte la placa Arduino a la PC mediante un cable USB. Abra el IDE de Arduino y vaya a Herramientas->Puerto y seleccione la placa Arduino (Arduino UNO). Podría verse como /dev/ttyABM0 (Arduino/Genuino Uno). Seleccione el nombre del puerto correcto. El nombre del puerto puede ser diferente en diferentes configuraciones IDE. Luego abra el monitor serie en el IDE de Arduino navegando a Herramientas->Monitor serie y establezca la velocidad en baudios en 115.200 baudios por segundo. Pase los comandos 'AT' y 'AT+GMR' para probar la conexión entre el Arduino y el módulo ESP-01. Pruebe diferentes configuraciones para la opción 'Fin de línea' del monitor serie, como NL y CR. Pruebe diferentes combinaciones hasta que el módulo ESP comience a interactuar correctamente con el monitor serie.
Descargue Python, PIP y ESPtool. Borre el firmware precargado si el módulo ESP tiene alguno. Actualice el código de firmware para el módulo ESP-01 escribiendo comandos en el monitor serie de acuerdo con las instrucciones de ESPtool. Consulte el siguiente enlace para escribir el comando adecuado para actualizar el código de firmware usando ESPtool:
Comandos de la herramienta ESP
Para cargar el programa, se debe soltar el interruptor RESET mientras se debe dejar presionado el interruptor de programación GPIO0. Después de cargar el código, también se debe liberar la clave de programación. De esta manera, el código del firmware se puede cargar en el ESP8266 usando la placa Arduino como convertidor FTDI. Cabe señalar que todos los GND deben ser comunes para completar el circuito. GPIO2 es un TX alternativo para el modo de gestor de arranque.
Retire las conexiones. Ahora el módulo ESP está listo para ser instalado en el circuito del proyecto. En el circuito del proyecto, el ESP8266 interactúa con el adaptador CP2102 y un LED.
El CP2102 es un puente USB a UART de un solo chip. Se utiliza para suministrar energía al módulo ESP. También se puede utilizar para cargar. Un IC CP2102 tiene la siguiente configuración de pines:
Tabela de listagem de configuração de pinos do IC CP2102
Fig. 6: Tabla que enumera la configuración de pines del IC CP2102
Tabela de listagem de configuração de pinos do IC CP2102

Fig. 7: Tabla que enumera la configuración de pines del IC CP2102

Tabela de listagem de configuração de pinos do IC CP2102
Fig. 8: Tabla que enumera la configuración de pines del CP2102 IC
La placa ESP está conectada al CP2102 para el modo de carga de arranque y para fines de uso. Para el arranque, el pin TX del ESP-01 está conectado al pin RX del CP2102 y el pin RX del ESP está conectado al TX del CP2102 para que ambos puedan enviar y recibir datos. El ESP8266-01 necesita una fuente de alimentación de 3.3V, por lo que el VCC del ESP está conectado al 3V3 del CP2102 y los GND de ambos deben estar conectados entre sí. El pin de reinicio de ESP8266 junto con la resistencia pull-up de 10k (resistencia de arranque) está conectado al pin RTS de CP2102. GPIO0 es un pin de programación utilizado para poner el ESP-01 en modo de programación. El GPIO0 junto con la resistencia pull-up de 10K está conectado al pin DTR de CP2102. El pin CHPD del ES-01 se tira con una resistencia de 10K. Las conexiones del circuito entre el módulo ESP y el CP2102 se resumen en la siguiente tabla:
Tabela de listagem de conexões de circuito entre o modem ESP8266 ESP-01 e o IC CP2102
Fig. 9: Tabla que enumera las conexiones del circuito entre el módem ESP8266 ESP-01 y el IC CP2102
Después de conectar el módulo ESP al adaptador CP2102, el adaptador debe conectarse a la PC y el módulo ESP debe cargarse con el código de firmware de manera similar a como se demostró con Arduino.
Tras cargar el código, el módulo ESP accederá automáticamente al punto Wi-Fi con el SSID proporcionado en el firmware. Un LED está conectado al módulo ESP. El pin del ánodo del LED está conectado a GPIO2 con una resistencia en serie de 220 ohmios y el pin del cátodo está conectado a GND. El módulo ESP ahora está listo para recibir datos de Internet a través del enrutador Wi-Fi y controlará el LED en consecuencia.
En el lado de la PC, instale MQTTLens en el navegador Chrome. MQTTlens admite el protocolo MQTT y puede usarse para publicar y suscribirse a mensajes. Al cliente de PC se le debe asignar una ID de cliente única para que el corredor MQTT pueda identificar fácilmente qué cliente está publicando y suscribiéndose al tema y la carga útil. Obtenga más información sobre cómo configurar su PC como cliente MQTT en el siguiente tutorial:
Cómo configurar PC y celular como clientes MQTT
Obtenga información sobre cómo crear y suscribirse a temas en el agente HiveMQ y publicar mensajes en ellos en el siguiente tutorial:
Comunicación entre PC y celular mediante protocolo MQTT vía HiveMQ Broker
Se deben tomar las siguientes precauciones al ensamblar el circuito:
1) ESP8266 necesita alimentación de 3,3 V para funcionar, así que no suministre 5 V.
2) Algunas personas dicen que ESP8266 no tiene entradas tolerantes a 5 V, pero cuando se usó Arduino como adaptador USB a serie, proporcionó comunicación serie con éxito. Según la hoja de datos del ESP8266, también se escribió que los GPIO del ESP8266 pueden tolerar más potencia hasta 6V.
3) Si se muestra el error espcomm_sync-failed.md mientras se carga el código de firmware, primero verifique el puerto seleccionado en el que está conectado el módulo ESP y luego verifique si el módulo está ingresando al modo de carga de arranque o no. Esto se puede verificar conectando los pines RX y GND del convertidor a los pines TX y GND del ESP. Luego abra una terminal y verifique si el siguiente mensaje se recibe en la ventana de serie o no.
ets 8 de enero de 2017, primera causa: 2, modo de arranque: (x, y).
4) Verifique si los pines del módulo reciben el voltaje adecuado o no usando un multímetro.
5) Si el módulo está funcionando pero comienza a grabarse después de un tiempo, puede haber un problema de requisitos actuales. En este caso, utilice una fuente de alimentación externa para suministrar 3,3 V al ESP8266.
Protótipo de controlador IOT LED baseado em ESP8266
Fig. 10: Prototipo de controlador LED IOT basado en ESP8266
Cómo funciona el circuito –
Después de cargar el firmware y las conexiones del circuito, el módulo ESP8266 está listo para recibir datos a través del protocolo MQTT desde el punto de acceso Wi-Fi disponible. El cliente de PC también está listo para enviar comandos de control a través del complemento MQTTLens. ESP8266 y los clientes de PC se comunican y envían mensajes entre sí a través de un corredor MQTT llamado HiveMQ.
El cliente ESP8266 se configura como editor para el tema "ESP8266/estado de conexión" y como suscriptor para el tema "ESP8266/estado de LED". El PC cliente se configura como suscriptor del tema “ESP8266/estado de conexión” y como editor del tema “ESP8266/estado de LED”. El cliente ESP8266 inicia la conexión publicando un mensaje "Conectado" al corredor MQTT.
Al recibir el mensaje, la PC cliente puede publicar mensajes 'ON' y 'OFF' en el tema “ESP8266/LED status”. Si el mensaje ON es publicado por la PC cliente, será recibido por el cliente ESP8266 y su código de firmware interpretará el mensaje para encender la luz LED. Si el mensaje APAGADO es publicado por la PC cliente, será recibido por el cliente ESP8266 y su código de firmware interpretará el mensaje para apagar la luz LED.
Guía de programación –
El cliente ESP8266 se carga con un boceto de Arduino. Se utiliza una biblioteca de código abierto para publicar y suscribirse a través del cliente ESP. En estas bibliotecas públicas no se cambia ni modifica nada.
El cliente ESP8266 se conecta a la red doméstica configurando el SSID y la contraseña del enrutador Wi-Fi. El SSID y la contraseña del punto de acceso Wi-Fi se inicializan en el código Arduino de la siguiente manera:
//configuración wifi
const char*ssid = “ABCDEF”;
const char* contraseña = “qwerty”;
Este fragmento de código se puede inicializar en la configuración, así como definir una función separada con algunos otros casos de prueba. La siguiente función se utiliza para iniciar la conexión Wi-Fi.
WiFi.begin(ssid, contraseña); //Iniciar conexión inalámbrica
Después de conectar el ESP8266 a la red, el ESP8266 comenzará a conectarse al corredor MQTT. El siguiente código en el boceto de Arduino se utiliza para definir el intermediario MQTT con el que debe comunicarse el módulo ESP.
//El nombre de dominio del broker o servidor
const char* mqtt_server = “broker.mqtt-dashboard.com”;
El cliente basado en el módulo ESP se conecta al corredor MQTT llamando a la siguiente función en la configuración.
cliente.setServer(mqtt_server, 1883);
Ahora el cliente ESP8266 está conectado al corredor MQTT. Registrará el tema con el corredor MQTT y publicará un mensaje sobre el tema. El dispositivo ESP8266 publicará continuamente el mensaje sobre el tema "ESP8266/estado de conexión" para el corredor. Ahora, dondequiera que el cliente de PC se suscriba al tema, recibirá el mensaje "conectado". El cliente ESP8266 también se ha suscrito al tema "ESP8266/LED Status" y esperará continuamente el mensaje del intermediario para controlar el LED. El siguiente fragmento de código define la publicación y suscripción de temas en el cliente ESP8266.
client.publish(“ESP8266/estado de conexión”, “¡Conectado!”); //para publicación
client.subscribe(“ESP8266/Estado LED”);
El cliente ESP8266 se ha registrado o suscrito al tema del corredor MQTT. Entonces, cada vez que recibe un mensaje, llamará a una función de mensaje recibido. Esta función de mensaje recibido es una función de devolución de llamada y las cosas que están escritas en esta función de devolución de llamada se llamarán cada vez que el cliente de PC publique un mensaje. La función buscará los datos de la carga útil. Si se reciben caracteres 'on', el pin GPIO2 se configurará en ALTO y el LED comenzará a brillar. Si se reciben caracteres "apagados" en la carga útil, el pin GPIO2 se configurará en BAJO y el LED dejará de brillar.
// Maneja el mensaje que recibimos
// Aquí solo estamos mirando los caracteres del mensaje recibido.
// Si está encendido, el LED estará encendido.
//Si está apagado, el LED estará apagado.
if((char)carga útil(0) == 'o' && (char)carga útil(1) == 'n') //activado
escritura digital (2, ALTO);
else if((char)payload(0) == 'o' && (char)payload(1) == 'f' && (char)payload(2) == 'f') //apagado
escritura digital (2, ABAJO);
Siempre que el cliente de PC publique el mensaje ON en el tema, este cliente llamará a esta función de devolución de llamada y el LED conectado a GPIO2 se pondrá en estado ON y cuando reciba un mensaje OFF, el LED se pondrá en estado OFF.
De esta forma, el cliente ESP8266 y el cliente de PC se comunican entre sí. Este es sólo un código básico para comprobar cómo se pueden comunicar dos dispositivos. En lugar del LED, también se puede utilizar un sensor de temperatura que puede proporcionar la temperatura y la humedad del ambiente. Incluso un motor puede controlarse de esta manera. Se pueden hacer muchas cosas después de establecer una conexión entre los dos dispositivos.
En el siguiente tutorial: Monitor de temperatura IOT basado en ESP8266 utilizando Adafruit Broker, el cliente ESP8266 se conectará con un sensor de temperatura (como se hizo con un LED en este tutorial) y las lecturas de temperatura se observarán en el cliente de PC. En el próximo tutorial, en lugar de HiveMQ, se utilizará Adafruit MQTT Broker.

Código fuente del proyecto

 ###



 //Programa para

 /*

 * Nombre del archivo: ESP8266_with_PC_client.ino

 * Creado: 20/03/2017 11:02:11 a.m.
 
* Código fuente principal para la comunicación de clientes de PC y ESP8266 con el broker HiveMQ

 */


 /*

 * Pines de salida del ESP8266

 *GPIO02 - pinled

 */


 //Incluir bibliotecas

 #incluir //Incluir la biblioteca para la inicialización de WiFI

 #incluir //Incluir la biblioteca para el protocolo pubsub MQTT


 // configuración WIFI

 const char* ssid = "Reemplácelo con el SSID de la red Wi-Fi"; //SSID de la red WIFI

 const char* contraseña = "Reemplázala con la contraseña de la Red Wi-Fi"; //Contraseña de la red WIFI


 //El nombre de dominio del broker o servidor

 const char* mqtt_server = "broker.mqtt-dashboard.com";


 // Crea una clase ESP8266 WiFiClient para conectarte al servidor MQTT.

 WiFiClient espClient;

 //crea los objetos del cliente MQTT

 Cliente PubSubClient (espClient);


 configuración nula {

 pinMode(2,SALIDA); //configura el pin del led como SALIDA
 
Serie.begin(115200); //Establece la velocidad en baudios de ESP8266 para mostrar el proceso en el monitor serie

 configuración_wifi; //Inicializa el Wifi



 //Al configurar el servidor y la función de devolución de llamada de mensajes, el cliente está listo para usar

 //& 1883 es ​​el puerto de escucha del broker

 cliente.setServer(mqtt_server, 1883);

 client.setCallback(Mensaje_recibido);

 }


 /*

 * Nombre de la función = setup_wifi

 *Para establecer la conexión WIFI con ESP8266

 */

 anular setup_wifi {


 retraso(10);

 // Empezamos conectándonos a una red WiFi

 Serial.println;

 Serial.print("Conectándose a ");

 Serie.println(ssid);

 //Conéctate al WIFI

 WiFi.begin(ssid, contraseña);

 // Espera hasta que se haya confirmado la conexión antes de continuar

 mientras (WiFi.estado! = WL_CONNECTED) {

 retraso(500);

 Serie.print(".");

 }


 Serial.println("");

 Serial.println("WiFi conectado");

 Serial.println("Dirección IP: ");

 Serial.println(WiFi.localIP);

 }


 /*

 * Nombre de la función = Mensaje_recibido
 
* El cliente recibe el mensaje y funciona en consecuencia.

 * Parámetro de entrada = Tema, carga útil y longitud del mensaje

 * Parámetro de salida = nulo

 */

 void Mensaje_recibido(char* tema, byte* carga útil, longitud int sin signo) {

 Serial.print("Mensaje llegado (");

 Serial.print(tema);

 Serie.print() ");

 para (int i = 0; i < longitud; i++) {

 Serial.print((char)carga útil(i));

 }



 // Maneja el mensaje que recibimos

 // Aquí solo estamos mirando los caracteres del mensaje recibido

 // Si está encendido, enciende el led y se encenderá.

 // Si está apagado, gire el LED y se apagará.

 if((char)carga útil(0) == 'o' && (char)carga útil(1) == 'n') //activado

 escritura digital (2, ALTO);

 else if((char)payload(0) == 'o' && (char)payload(1) == 'f' && (char)payload(2) == 'f') //apagado

 escritura digital(2,BAJO);



 Serial.println;

 }


 /*

 * Nombre de la función = Reconectar

 * Para establecer la conexión de ESP8266 con el broker MQTT

 * y publicará y se suscribirá al tema.

 */

 reconexión nula {

 // Bucle hasta que estemos reconectados
 
mientras (!cliente.conectado) {

 Serial.print("Intentando conexión MQTT...");

 //Intento de conexión

 si (cliente.connect("ESP8266Cliente")) {

 Serial.println("conectado");

 // Una vez conectado, publica un anuncio...

 client.publish("ESP8266/estado de conexión", "¡Conectado!");

 // ... y volver a suscribirte

 client.subscribe("ESP8266/estado del LED");

 } demás {

 Serial.print("falló, rc=");

 Serial.print(cliente.estado);

 Serial.println("inténtalo de nuevo en 5 segundos");

 // Espera 5 segundos antes de volver a intentarlo.

 retraso(5000);

 }

 }

 }


 bucle vacío {

 //Cuando el cliente ESP8266 se conectará al corredor,

 //luego llama a la función reconnect y publica y suscribe los datos del broker.

 si (!cliente.conectado) {

 reconectar;

 }

 cliente.bucle;

 }


 ### 

Diagramas de circuito

Diagrama de circuito-ESP8266-ESP-01-Servidor MQTT basado en módem
Diagrama del circuito del cliente Arduino MQTT

Vídeo del proyecto

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.