Taula de continguts:

Automatització de baix cost amb ESP01: 19 passos
Automatització de baix cost amb ESP01: 19 passos

Vídeo: Automatització de baix cost amb ESP01: 19 passos

Vídeo: Automatització de baix cost amb ESP01: 19 passos
Vídeo: Resolució de problemes enormes a baix cost: supercomputació amb tecnologia smartphone 2024, Desembre
Anonim
Image
Image
MCP23016
MCP23016

Avui parlarem de l’automatització mitjançant ESP01 amb 16 relés. Es tracta d’un model de disseny molt barat on podeu multiplicar els mòduls i obtenir fins a 128 relés, ja que és possible posar fins a vuit expandidors de ports en aquest microcontrolador.

Al nostre circuit, tindreu una aplicació en un telèfon intel·ligent que es comunica amb l’ESP01. Tindrà un expansor amb 16 ports, cadascun connectat a un relé. També tenim una font ajustable de 3v3. Per tant, controlarem un mòdul de retransmissió de 16 canals mitjançant ESP01 mitjançant l’aplicació Android, que poso a la vostra disposició.

Pas 1: Consell per recordar

És important tenir en compte, amics meus, que he utilitzat aquest xip en un circuit anomenat MCP23016. També és important que vegeu el vídeo EXPANSOR OF IOS PER ESP32, ESP8266 I ARDUINO, en què provo el dispositiu i demostro que funciona per a aquests tres tipus de taules.

Pas 2: MCP23016

Aquí tenim una imatge del MCP23016, que és un xip amb 28 pins. És important esmentar que també hi ha el model MCP23017, que és més comú i no necessita resistència ni condensador, perquè té un rellotge intern. Això ho fa més fàcil, però el seu fixació és diferent del que mostrem en aquest vídeo.

Pas 3: adreça

adreça
adreça

Per definir l'adreça de l'MCP23016, fem servir els pins A0, A1 i A2. Podeu deixar-los a HIGH o LOW per al canvi d’adreça.

L'adreça es formarà de la següent manera:

MCP_Address = 20 + (A2 A1 A0)

On A2 A1 A0 pot prendre valors ALT / BAIX, es forma un número binari de 0 a 7.

Per exemple:

A2> GND, A1> GND, A0> GND (vol dir 000, llavors 20 + 0 = 20)

O d’una altra manera, A2> ALTA, A1> GND, A0> ALTA (vol dir 101, llavors 20 + 5 = 25)

Pas 4: ordres

Ordres
Ordres

Aquí hi ha una taula amb ordres per a la comunicació:

Pas 5: categories

GP0 / GP1: registres de ports de dades

Hi ha dos registres que proporcionen accés als dos ports GPIO.

La lectura del registre proporciona l'estat dels pins d'aquest port.

Bit = 1> ALT Bit = 0> BAIX

IODIR0 / IODIR1

Hi ha dos registres que controlen el mode pin. (Entrada o sortida)

Bit = 1> INPUT Bit = 0> OUTPUT

Pas 6: Estructura de la comunicació

Estructura per a la Comunicació
Estructura per a la Comunicació

Aquí parlem de l'adreça del xip i accedim a l'ordre i a les dades, que és una mena de protocol que cal fer per enviar informació.

Pas 7: programa

Programa
Programa

Farem un programa que consisteix a comunicar l’ESP01 amb l’MCP23016 per tal de tenir més GPIO a utilitzar. Aquests 16 nous GPIO que tindrem controlaran un mòdul de relé de 16 canals.

Els comandaments s’enviaran a ESP01 mitjançant una aplicació per a Android.

Pas 8: MCP23016

MCP23016
MCP23016

Pas 9: ESP-01

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

Es tracta d’una placa de 16 relés.

Pas 10: muntatge de ESP01

Muntatge ESP01
Muntatge ESP01

Pas 11: biblioteques i variables

Inclourem les biblioteques responsables de la comunicació i2c i de la creació del punt d’accés i del servidor web. Definim l'adreça del xip i els ports. Finalment, definim les variables per emmagatzemar els valors dels pins MCP.

. define GP0 0x00 // REGISTRE PORT DADES 0 #define GP1 0x01 // REGISTRE PORT DADES 1 #define IODIR0 0x06 // REGISTRE DIRECCIÓ E / S 0 #define IODIR1 0x07 // REGISTRE DIRECCIÓ E / S 1 // guarda os valores dos pinos fer MCP uint8_tValorGP0 actual = 0; uint8_tCurrentValueGP1 = 0;

Pas 12: Configuració

Inicialitzem l’ESP01 i configurem els ports. També configurem el punt d’accés i inicialitzem el servidor.

configuració nul·la () {Serial.begin (9600); retard (1000); Wire.begin (0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, OUTPUT); configurePort (IODIR1, OUTPUT); writeBlockData (GP0, 0x00); writeBlockData (GP1, 0x00); setupWiFi (); // configuració del punt d'accés server.begin (); // inicialització del servidor}

Pas 13: bucle

Aquí comprovo si hi ha clients connectats al servidor. També llegim la primera línia de sol·licitud. Extraiem les dades per manipular-les, definim la capçalera de resposta predeterminada i enviem aquesta resposta al client.

bucle buit () {client WiFiClient = servidor.available (); // Verifica se um cliente foi conectado if (! Client) {return; } String req = client.readStringUntil ('\ r'); // Faz a leitura da primera 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 da requisição extrai os dados para manipulação} else {Serial.println ("invalid request"); tornar; } client.flush (); Cadena s = "HTTP / 1.1 200 OK / r / n"; // cabeçalho patró de resposta client.print (s); // envia a resposta per o client delay (1); } // final de bucle

Pas 14: ParserData

ParserData
ParserData

Des de la sol·licitud, busquem les dades relacionades amb els relés. A continuació, enviem les dades al MCP23016.

// a partir da requisição busca os dados referente aos relésvoid parserData (String data) {uint8_t relay = -1; uint8_t gp = -1; valor uint8_t = -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 (activat / desactivat) {gp = data [index + 3] - '0'; relé = dades [índex + 4] - '0'; valor = dades [índex + 6] - '0'; // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (relay-1, value, gp); }}

Pas 15: ConfigurePort

Establim el mode de pin GPIO (GP0 o GP1).

// configura o modo dos pinos GPIO (GP0 ou GP1) // com a paràmetre passem: // port: GP0 o GP1 // INPUT per a tots com portes de GP treballant com a entrada // OUTPUT per a tots com portes de GP treballant com a 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 treballant com a entrada, o restant com a said void configurePort (port uint8_t, uint8_t personalitzat) {if (personalitzat == INPUT) {writeBlockData (port, 0xFF); } else if (personalitzat == OUTPUT) {writeBlockData (port, 0x00); } else {writeBlockData (port, personalitzat); }}

Pas 16: WritePinData

En aquesta part del codi, canviem l’estat d’un pin desitjat i enviem les dades al MCP.

// muda o estat de um pinyol deixat, passant com a paràmetre: // pin = pinyo deixat; valor = 0/1 (activat / desactivat); gp = 0/1 (PORT do MCP) void writePinData (pin int, valor int, uint8_t gp) {uint8_t statusGP = 0; if (gp == GP0) statusGP = currentValueGP0; else statusGP = ValorValentGP1; if (valor == 0) {statusGP & = ~ (B00000001 << (pin)); // muda o pino para LOW} else if (valor == 1) {statusGP | = (B00000001 << (pin)); // muda o pino para HIGH} if (gp == GP0) currentValueGP0 = statusGP; elseValorGP1 actual = estatGP; // envia os dados para o MCP writeBlockData (gp, statusGP); retard (10); }

Pas 17: WriteBlockData i SetupWiFi

Aquí, enviem dades al MCP23016 mitjançant el bus i2c. A continuació, configurem les propietats per habilitar el punt d'accés. Finalment, vam configurar el WiFi per al mode de punt d'accés i vam crear un AP amb SSID i la contrasenya.

// envia dados para o MCP23016 através do barramento i2c // reg: REGISTRADOR // data: dados (0-255) void writeBlockData (uint8_t port, uint8_t data) {Wire.beginTransmission (MCPAddress); Wire.write (port); Wire.write (dades); Wire.endTransmission (); retard (10); }

// configura com a propietats per habilitar o ACCESS POINTvoid setupWiFi () {WiFi.mode (WIFI_AP); WiFi.softAP ("ESP01_RELAY", "12345678"); }

Pas 18: aplicació

Aplicació
Aplicació
Aplicació
Aplicació
Aplicació
Aplicació
Aplicació
Aplicació

Per crear l'aplicació, fem servir MIT App Inventor 2, al qual es pot accedir mitjançant l'enllaç:

ai2.appinventor.mit.edu/

L’aplicació consta de dues pantalles que contenen vuit parells de botons cadascun, que indiquen l’estat de cada relé.

Els següents són alguns dels blocs de programació utilitzats:

IMPORTANT: l'adreça IP per defecte de l'ESP, ja que el punt d'accés és 192.168.4.1

1. Quan la pantalla s’inicialitza, emmagatzemem l’IP a la memòria i cridem al procediment per recuperar l’estat dels botons (ON / OFF).

2. Truqueu a l'altra pantalla

1. En fer clic al botó ON d’un dels relés, farem canvis visuals al botó (blocs verds). WebViewer1. GoToUrl fa una sol·licitud del nostre ESP01 enllaçant les dades MR01 / 1 a l'URL.

2. En fer clic al botó OFF d’un dels relés, farem canvis visuals al botó (blocs verds). WebViewer1. GoToUrl fa una sol·licitud al nostre ESP01 mitjançant l'enllaç de les dades MR01 / 0 a l'URL.

Aquest procediment s’utilitza per recuperar l’estat dels botons (relés), ja que en canviar la pantalla, torna al patró de creació.

El bloc groc es repeteix per a cadascun dels parells de botons.

Pas 19: baixada

Aquests són els fitxers del projecte per descarregar:

Fitxer del projecte MIT App Inventor 2: descàrrega

APK d'aplicació per instal·lar a Android: descarregar

Descarregueu els altres fitxers:

PDF

INO

Recomanat: