Tabla de contenido:

Automatización de bajo costo con ESP01: 19 pasos
Automatización de bajo costo con ESP01: 19 pasos

Video: Automatización de bajo costo con ESP01: 19 pasos

Video: Automatización de bajo costo con ESP01: 19 pasos
Video: Robótica: Prueba con el módulo ESP8266 ESP-01 WIFI 2024, Noviembre
Anonim
Image
Image
MCP23016
MCP23016

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

Dirección
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

Comandos
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

Estructura para la comunicación
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

Programa
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

MCP23016
MCP23016

Paso 9: ESP-01

ESP-01
ESP-01
ESP-01
ESP-01

Esta es una placa de 16 relés.

Paso 10: Montaje de ESP01

Montaje ESP01
Montaje 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

ParserData
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

Aplicación
Aplicación
Aplicación
Aplicación
Aplicación
Aplicación
Aplicación
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:

PDF

INO

Recomendado: