Cuprins:

Automatizare low cost cu ESP01: 19 pași
Automatizare low cost cu ESP01: 19 pași

Video: Automatizare low cost cu ESP01: 19 pași

Video: Automatizare low cost cu ESP01: 19 pași
Video: Cum sa îți pui sistem de aspersoare îngropate Homemaintenance/Rainbird 2024, Noiembrie
Anonim
Image
Image
MCP23016
MCP23016

Astăzi, vom discuta despre automatizarea utilizării ESP01 cu 16 relee. Acesta este un model de design foarte ieftin în care puteți multiplica modulele și puteți obține până la 128 de relee, deoarece este posibil să puneți până la opt dispozitive de expansiune în acest microcontroler.

În circuitul nostru, veți avea o aplicație pe un smartphone care comunică cu ESP01. Va avea un expansor cu 16 porturi, fiecare conectat la un releu. De asemenea, avem o sursă reglabilă 3v3. Prin urmare, vom controla un modul de releu cu 16 canale folosind ESP01 prin intermediul aplicației Android, pe care vi-l pun la dispoziție.

Pasul 1: Sfat de reținut

Este important de menționat, prieteni, că am folosit acest cip într-un circuit numit MCP23016. De asemenea, este important să vizionați videoclipul EXPANSOR OF IOS FOR ESP32, ESP8266 AND ARDUINO, în care testez dispozitivul și arăt că funcționează pentru aceste trei tipuri de plăci.

Pasul 2: MCP23016

Aici avem o imagine a MCP23016, care este un cip cu 28 de pini. Este important de menționat că există și modelul MCP23017, care este mai frecvent și nu are nevoie de rezistență și condensator, deoarece are un ceas intern. Acest lucru îl face mai ușor, dar fixarea acestuia este diferită de ceea ce arătăm în acest videoclip.

Pasul 3: adresa

Abordare
Abordare

Pentru a defini adresa MCP23016, folosim pinii A0, A1 și A2. Puteți doar să le lăsați la HIGH sau LOW pentru schimbarea adresei.

Adresa va fi formată după cum urmează:

MCP_Address = 20 + (A2 A1 A0)

Unde A2 A1 A0 poate lua valori HIGH / LOW, un număr binar de la 0 la 7 forme.

De exemplu:

A2> GND, A1> GND, A0> GND (înseamnă 000, apoi 20 + 0 = 20)

Sau altfel, A2> HIGH, A1> GND, A0> HIGH (înseamnă 101, apoi 20 + 5 = 25)

Pasul 4: Comenzi

Comenzi
Comenzi

Iată un tabel cu comenzi pentru comunicare:

Pasul 5: Categorii

GP0 / GP1 - Registre de porturi de date

Există două registre care oferă acces la cele două porturi GPIO.

Citirea registrului oferă starea pinilor de pe acel port.

Bit = 1> HIGH Bit = 0> LOW

IODIR0 / IODIR1

Există două registre care controlează modul pin. (Intrare sau ieșire)

Bit = 1> INPUT Bit = 0> OUTPUT

Pasul 6: Structura pentru comunicare

Structura pentru comunicare
Structura pentru comunicare

Aici vorbim despre adresa cipului și accesăm comanda și datele, care este un fel de protocol care trebuie făcut pentru a trimite informații.

Pasul 7: Program

Program
Program

Vom face un program care constă în comunicarea ESP01 cu MCP23016 pentru a avea mai multe GPIO-uri de utilizat. Aceste 16 noi GPIO-uri pe care le vom avea vor controla un modul de releu cu 16 canale.

Comenzile vor fi trimise către ESP01 printr-o aplicație Android.

Pasul 8: MCP23016

MCP23016
MCP23016

Pasul 9: ESP-01

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

Aceasta este o placă cu 16 relee.

Pasul 10: Montarea ESP01

Montare ESP01
Montare ESP01

Pasul 11: Biblioteci și variabile

Vom include bibliotecile responsabile pentru comunicarea i2c și pentru crearea punctului de acces și a serverului web. Definim adresa cipului și a porturilor. În cele din urmă, definim variabilele pentru a stoca valorile pinilor MCP.

#include // responsável pela comunicação i2c. # include // responsável por criar o accesspoint eo webserver WiFiServer server (80); // webserver pentru acessarmos através do aplicativo // endereço I2C do MCP23016 #define MCPAddress 0x20 // ENDEREÇOS DE REGISTRADORES # define GP0 0x00 // DATA PORT REGISTER 0 #define GP1 0x01 // DATA PORT REGISTER 1 #define IODIR0 0x06 // I / O DIRECTION REGISTER 0 #define IODIR1 0x07 // I / O DIRECTION REGISTER 1 // guarda os valores dos pinos faceți MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

Pasul 12: Configurare

Inițializăm ESP01 și configurăm porturile. De asemenea, configurăm punctul de acces și inițializăm serverul.

void setup () {Serial.begin (9600); întârziere (1000); Wire.begin (0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, OUTPUT); configurePort (IODIR1, OUTPUT); writeBlockData (GP0, 0x00); writeBlockData (GP1, 0x00); setupWiFi (); // configurarea Access Point server.begin (); // inițializarea serverului}

Pasul 13: Buclă

Aici verific dacă au fost conectați clienți la server. De asemenea, am citit prima linie de solicitare. Extragem datele pentru manipulare, definim antetul de răspuns implicit și trimitem acest răspuns clientului.

bucla void () {client WiFiClient = server.available (); // Verifica se um client a fost conectat if (! Client) {return; } String req = client.readStringUntil ('\ r'); // Faz a leitura da prima 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"); întoarcere; } client.flush (); Șirul s = "HTTP / 1.1 200 OK / r / n"; // cabeçalho padrão de răspuns client.print (s); // envia a răspuns pentru o client delay (1); } // sfârșitul buclei

Pasul 14: ParserData

ParserData
ParserData

Din cerere, căutăm datele legate de relee. Apoi trimitem datele către MCP23016.

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

Pasul 15: ConfigurePort

Setăm modul pin GPIO (GP0 sau GP1).

// configura o modo dos pinos GPIO (GP0 ou GP1) // as parametro passamos: // port: GP0 ou GP1 // INPUT pentru toți ca porti de GP de lucru ca intrare // OUTPUT pentru toți ca porti de GP de lucru ca saida // custom um valor de 0-255 indicando o modo das portas (1 = INPUT, 0 = OUTPUT) // ex: 0x01 ou B00000001 ou 1: indica ce apenas o GPX.0 lucrare ca intrare, sau restante ca saida void configurePort (port uint8_t, uint8_t custom) {if (custom == INPUT) {writeBlockData (port, 0xFF); } else if (custom == OUTPUT) {writeBlockData (port, 0x00); } else {writeBlockData (port, personalizat); }}

Pasul 16: WritePinData

În această parte a codului, schimbăm starea pinului dorit și trimitem datele către MCP.

// muda o stare de um pino desejado, trecând ca parametru: // pin = pino desejado; valoare = 0/1 (pornit / oprit); gp = 0/1 (PORT do MCP) void writePinData (pin int, valoare int, uint8_t gp) {uint8_t statusGP = 0; if (gp == GP0) statusGP = currentValueGP0; else statusGP = CurrentValueGP1; if (valoare == 0) {statusGP & = ~ (B00000001 << (pin)); // muda o pino para LOW} else if (valoare == 1) {statusGP | = (B00000001 << (pin)); // muda o pino para HIGH} if (gp == GP0) currentValueGP0 = statusGP; else currentValueGP1 = statusGP; // envia os dados para o MCP writeBlockData (gp, statusGP); întârziere (10); }

Pasul 17: WriteBlockData & SetupWiFi

Aici, trimitem date către MCP23016 prin magistrala i2c. Apoi, configurăm proprietățile pentru a activa punctul de acces. În cele din urmă, am configurat WiFi pentru modul Punct de acces și am creat un AP cu SSID și PASSWORD.

// 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 (date); Wire.endTransmission (); întârziere (10); }

// configurați ca programe pentru abilitare o ACCESS POINTvoid setupWiFi () {WiFi.mode (WIFI_AP); WiFi.softAP ("ESP01_RELAY", "12345678"); }

Pasul 18: aplicație

Aplicație
Aplicație
Aplicație
Aplicație
Aplicație
Aplicație
Aplicație
Aplicație

Pentru a crea aplicația, folosim MIT App Inventor 2, care poate fi accesat prin link:

ai2.appinventor.mit.edu/

Aplicația constă din două ecrane care conțin opt perechi de butoane în fiecare, indicând starea fiecărui releu.

Următoarele sunt câteva dintre blocurile de programare utilizate:

IMPORTANT: Adresa IP implicită a ESP, deoarece punctul de acces este 192.168.4.1

1. Când ecranul se inițializează, stocăm IP-ul în memorie și apelăm procedura de recuperare a stării butoanelor (ON / OFF).

2. Apelați celălalt ecran

1. Când facem clic pe butonul PORNIT al unuia dintre relee, vom face modificări vizuale în buton (blocuri verzi). WebViewer1. GoToUrl face o solicitare pentru ESP01 prin legarea datelor MR01 / 1 în URL.

2. Când facem clic pe butonul OPRIT al unuia dintre relee, vom face modificări vizuale în buton (blocuri verzi). WebViewer1. GoToUrl face o solicitare către ESP01 prin legarea datelor MR01 / 0 din URL.

Această procedură este utilizată pentru a recupera starea butoanelor (relee), deoarece la schimbarea ecranului, acesta revine la modelul de creație.

Blocul galben se repetă pentru fiecare dintre perechile de butoane.

Pasul 19: Descărcați

Iată fișierele proiectului pentru descărcare:

Fișierul proiectului MIT App Inventor 2 - descărcați

Aplicație APK pentru instalare pe Android - descărcare

Descărcați celelalte fișiere:

PDF

EU NU

Recomandat: