Tabla de contenido:
- Paso 1: Consejo para recordar
- Paso 2: MCP23016
- Paso 3: Dirección
- Paso 4: comandos
- Paso 5: Categorías
- Paso 6: Estructura para la comunicación
- Paso 7: Programa
- Paso 8: MCP23016
- Paso 9: ESP-01
- Paso 10: Montaje de ESP01
- Paso 11: Bibliotecas y variables
- Paso 12: configuración
- Paso 13: bucle
- Paso 14: ParserData
- Paso 15: ConfigurePort
- Paso 16: WritePinData
- Paso 17: WriteBlockData y SetupWiFi
- Paso 18: Aplicación
- Paso 19: Descarga
Video: Automatización de bajo costo con ESP01: 19 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
Hoy, discutiremos la automatización usando ESP01 con 16 relés. Este es un modelo de diseño súper barato donde puedes multiplicar los módulos y conseguir hasta 128 relés, ya que es posible poner hasta ocho expansores de puertos en este microcontrolador.
En nuestro circuito tendrás una aplicación en un smartphone que se comunica con el ESP01. Tendrá un expansor con 16 puertos, cada uno conectado a un relé. También tenemos una fuente ajustable 3v3. Por lo tanto, controlaremos un módulo de relé de 16 canales utilizando ESP01 a través de la aplicación de Android, que pongo a su disposición.
Paso 1: Consejo para recordar
Es importante notar, amigos míos, que usé este chip en un circuito llamado MCP23016. También es importante que veas el video EXPANSOR DE IOS PARA ESP32, ESP8266 Y ARDUINO, en el que pruebo el dispositivo y demuestro que funciona para estos tres tipos de placas.
Paso 2: MCP23016
Aquí tenemos una imagen del MCP23016, que es un chip con 28 pines. Es importante mencionar que también está el modelo MCP23017, que es más común y no necesita resistor ni capacitor, porque tiene reloj interno. Esto lo hace más fácil, pero su fijación es diferente de lo que mostramos en este video.
Paso 3: Dirección
Para definir la dirección del MCP23016, usamos los pines A0, A1 y A2. Puede dejarlos en HIGH o LOW para el cambio de dirección.
La dirección se formará de la siguiente manera:
Dirección_MCP = 20 + (A2 A1 A0)
Donde A2 A1 A0 puede tomar valores ALTO / BAJO, se forma un número binario de 0 a 7.
Por ejemplo:
A2> GND, A1> GND, A0> GND (significa 000, luego 20 + 0 = 20)
O de otro modo, A2> HIGH, A1> GND, A0> HIGH (significa 101, luego 20 + 5 = 25)
Paso 4: comandos
Aquí hay una tabla con comandos para la comunicación:
Paso 5: Categorías
GP0 / GP1 - Registros de puerto de datos
Hay dos registros que proporcionan acceso a los dos puertos GPIO.
La lectura del registro proporciona el estado de los pines en ese puerto.
Bit = 1> ALTO Bit = 0> BAJO
IODIR0 / IODIR1
Hay dos registros que controlan el modo pin. (Entrada o salida)
Bit = 1> ENTRADA Bit = 0> SALIDA
Paso 6: Estructura para la comunicación
Aquí hablamos de la dirección del chip y accedemos al comando y a los datos, que es un tipo de protocolo que se debe realizar para enviar información.
Paso 7: Programa
Haremos un programa que consiste en comunicar el ESP01 con el MCP23016 para tener más GPIOs a utilizar. Estos 16 nuevos GPIO que tendremos controlarán un módulo de relé de 16 canales.
Los comandos se enviarán a ESP01 a través de una aplicación de Android.
Paso 8: MCP23016
Paso 9: ESP-01
Esta es una placa de 16 relés.
Paso 10: Montaje de ESP01
Paso 11: Bibliotecas y variables
Incluiremos las bibliotecas responsables de la comunicación i2c y de la creación del punto de acceso y el servidor web. Definimos la dirección del chip y los puertos. Finalmente, definimos las variables para almacenar los valores de los pines MCP.
#include // responsável pela comunicação i2c. # include // responsável por criar o accesspoint eo webserver WiFiServer server (80); // webserver para accesarmos através do aplicativo // endereço I2C do MCP23016 #define MCPAddress 0x20 // ENDEREÇOS DE REGISTRADORES # definir GP0 0x00 // REGISTRO DE PUERTO DE DATOS 0 #define GP1 0x01 // REGISTRO DE PUERTO DE DATOS 1 #definir IODIR0 0x06 // REGISTRO DE DIRECCIÓN DE E / S 0 #definir IODIR1 0x07 // REGISTRO DE DIRECCIÓN DE E / S 1 // guardar valores de dos pinos hacer MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;
Paso 12: configuración
Inicializamos el ESP01 y configuramos los puertos. También configuramos el Access Point e inicializamos el servidor.
configuración vacía () {Serial.begin (9600); retraso (1000); Wire.begin (0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, SALIDA); configurePort (IODIR1, SALIDA); writeBlockData (GP0, 0x00); writeBlockData (GP1, 0x00); setupWiFi (); // configuración del punto de acceso server.begin (); // inicialización del servidor}
Paso 13: bucle
Aquí verifico si se ha conectado algún cliente al servidor. También leemos la primera línea de solicitud. Extraemos los datos para su manipulación, definimos el encabezado de respuesta predeterminado y enviamos esta respuesta al cliente.
bucle vacío () {Cliente WiFiClient = servidor disponible (); // Verifica se um cliente foi conectado if (! Client) {return; } String req = client.readStringUntil ('\ r'); // Faz a leitura da primeira linha da requisição / * / MR é o header prefixo para saber se a requisição é a esperada para os relés * / if (req.indexOf ("/ MR")! = -1) {parserData (req); // a partir de la solicitud extrai os dados para manipulação} else {Serial.println ("solicitud inválida"); regreso; } client.flush (); Cadena s = "HTTP / 1.1 200 OK / r / n"; // cabeçalho padrão de resposta client.print (s); // envia a resposta para o cliente delay (1); } // fin del ciclo
Paso 14: ParserData
Desde la solicitud buscamos los datos relacionados con los relés. Luego enviamos los datos al MCP23016.
// a partir de la solicitud busca os datos referentes aos relésvoid parserData (String data) {uint8_t relay = -1; uint8_t gp = -1; uint8_t valor = -1; int index = data.indexOf ("/ MR"); // busca o index do prefixo MR if (data [index + 5] == '/') // / MR01 / 1, onde 0 = GP; 1 = RELE; 1 = ESTADO (activar / desactivar) {gp = datos [índice + 3] - '0'; relé = datos [índice + 4] - '0'; valor = datos [índice + 6] - '0'; // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (relay-1, value, gp); }}
Paso 15: ConfigurePort
Configuramos el modo pin GPIO (GP0 o GP1).
// configura o modo dos pinos GPIO (GP0 ou GP1) // como parametro passamos: // port: GP0 ou GP1 // INPUT para todos as portas do GP trabalharem como entrada // OUTPUT para todos as portas do GP trabalharem como saida // custom um valor de 0-255 indicando o modo das portas (1 = INPUT, 0 = OUTPUT) // ex: 0x01 ou B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entrada, o restante como saida void configurePort (puerto uint8_t, uint8_t personalizado) {if (personalizado == ENTRADA) {writeBlockData (puerto, 0xFF); } else if (personalizado == SALIDA) {writeBlockData (puerto, 0x00); } else {writeBlockData (puerto, personalizado); }}
Paso 16: WritePinData
En esta parte del código, cambiamos el estado de un pin deseado y enviamos los datos al MCP.
// muda o estado de um pino desejado, passando como parametro: // pin = pino desejado; valor = 0/1 (encendido / apagado); gp = 0/1 (PUERTO do MCP) void writePinData (pin int, valor int, uint8_t gp) {uint8_t statusGP = 0; if (gp == GP0) statusGP = currentValueGP0; else statusGP = currentValueGP1; if (valor == 0) {statusGP & = ~ (B00000001 << (pin)); // muda o pino para LOW} else if (value == 1) {statusGP | = (B00000001 << (pin)); // muda o pino para HIGH} if (gp == GP0) currentValueGP0 = statusGP; else currentValueGP1 = statusGP; // enviamos los datos para o MCP writeBlockData (gp, statusGP); retraso (10); }
Paso 17: WriteBlockData y SetupWiFi
Aquí, enviamos datos al MCP23016 a través del bus i2c. A continuación, configuramos las propiedades para habilitar el Access Point. Finalmente, configuramos el WiFi para el modo Access Point y creamos un AP con SSID y la CONTRASEÑA.
// enviamos datos para o MCP23016 através do barramento i2c // reg: REGISTRADOR // data: dados (0-255) void writeBlockData (puerto uint8_t, datos uint8_t) {Wire.beginTransmission (MCPAddress); Wire.write (puerto); Wire.write (datos); Wire.endTransmission (); retraso (10); }
// configura como propiedades para habilitar o ACCESS POINTvoid setupWiFi () {WiFi.mode (WIFI_AP); WiFi.softAP ("ESP01_RELAY", "12345678"); }
Paso 18: Aplicación
Para crear la aplicación utilizamos MIT App Inventor 2, a la que se puede acceder a través del enlace:
ai2.appinventor.mit.edu/
La aplicación consta de dos pantallas que contienen ocho pares de botones en cada una, que indican el estado de cada relé.
Los siguientes son algunos de los bloques de programación utilizados:
IMPORTANTE: La dirección IP predeterminada del ESP, ya que el punto de acceso es 192.168.4.1
1. Cuando se inicializa la pantalla, almacenamos la IP en la memoria y llamamos al procedimiento para recuperar el estado de los botones (ON / OFF).
2. Llamar a la otra pantalla
1. Al hacer clic en el botón ON de uno de los relés, haremos cambios visuales en el botón (bloques verdes). WebViewer1. GoToUrl realiza una solicitud para nuestro ESP01 vinculando los datos MR01 / 1 en la URL.
2. Al hacer clic en el botón OFF de uno de los relés, haremos cambios visuales en el botón (bloques verdes). WebViewer1. GoToUrl realiza una solicitud a nuestro ESP01 vinculando los datos MR01 / 0 en la URL.
Este procedimiento se utiliza para recuperar el estado de los botones (relés), ya que al cambiar de pantalla se vuelve al patrón de creación.
El bloque amarillo se repite para cada uno de los pares de botones.
Paso 19: Descarga
Aquí están los archivos del proyecto para descargar:
Archivo de proyecto MIT App Inventor 2 - descargar
Aplicación APK para instalar en Android - descargar
Descarga los otros archivos:
INO
Recomendado:
Automatización del hogar de bricolaje a bajo costo con Esp8266: 6 pasos
Automatización del hogar de bricolaje de bajo costo con Esp8266: Hola a todos, hoy en este instructivo les mostraré cómo preparé mi propia automatización del hogar como un paso hacia una casa inteligente usando un módulo ESP 8266 generalmente conocido como nodemcu, así que sin perder el tiempo. empecemos:)
Automatización habladora -- Audio de Arduino -- Automatización controlada por voz -- Módulo Bluetooth HC - 05: 9 pasos (con imágenes)
Automatización habladora || Audio de Arduino || Automatización controlada por voz || HC - 05 Módulo Bluetooth: …………………………. SUSCRÍBETE A mi canal de YouTube para ver más videos …. …. En este video, hemos construido una Automatización Habladora … Cuando envíe un comando de voz a través del móvil, encenderá los dispositivos domésticos y enviará comentarios i
¡Haga una pista con sensor de bajo costo en minutos!: 10 pasos (con imágenes)
¡Haga una vía con sensor de bajo costo en minutos!: En mi Instructable anterior, le mostré cómo hacer un diseño de tren modelo con revestimiento automático. Usó un segmento de pista, llamado 'pista con sensores'. Es muy útil tenerlo en un modelo de ferrocarril. Puedo ser utilizado para lo siguiente: Bloquear
El 'Sup - un ratón para personas con cuadriplejia - Bajo costo y código abierto: 12 pasos (con imágenes)
El 'Sup - un ratón para personas con cuadriplejía - Bajo costo y código abierto: en la primavera de 2017, la familia de mi mejor amigo me preguntó si quería volar a Denver y ayudarlos con un proyecto. Tienen un amigo, Allen, que tiene cuadriplejía como resultado de un accidente en bicicleta de montaña. Félix (mi amigo) y yo hicimos una rápida búsqueda
Robot de dibujo de bajo costo compatible con Arduino: 15 pasos (con imágenes)
Robot de dibujo de bajo costo compatible con Arduino: Nota: ¡Tengo una nueva versión de este robot que usa una placa de circuito impreso, es más fácil de construir y tiene detección de obstáculos por infrarrojos! Échale un vistazo en http://bit.ly/OSTurtle Diseñé este proyecto para un taller de 10 horas para ChickTech.org cuyo objetivo es i