Sadržaj:

Automatizacija s niskim troškovima s ESP01: 19 koraka
Automatizacija s niskim troškovima s ESP01: 19 koraka

Video: Automatizacija s niskim troškovima s ESP01: 19 koraka

Video: Automatizacija s niskim troškovima s ESP01: 19 koraka
Video: Crypto Pirates Daily News - January 22nd 2022 - Latest Crypto News Update 2024, Studeni
Anonim
Image
Image
MCP23016
MCP23016

Danas ćemo raspravljati o automatizaciji pomoću ESP01 sa 16 releja. Ovo je super jeftin model dizajna u kojem možete pomnožiti module i dobiti do 128 releja, jer je moguće staviti do osam proširivača portova u ovaj mikrokontroler.

U našem krugu imat ćete aplikaciju na pametnom telefonu koja komunicira s ESP01. Imat će ekspander sa 16 priključaka, svaki spojen na relej. Imamo i podesivi izvor 3v3. Stoga ćemo kontrolirati 16-kanalni relejni modul pomoću ESP01 putem Android aplikacije, koju vam stavljam na raspolaganje.

Korak 1: Savjet za pamćenje

Važno je napomenuti, prijatelji moji, da sam ovaj čip koristio u krugu zvanom MCP23016. Također vam je važno pogledati video EKSPANZOR IOS -a ZA ESP32, ESP8266 I ARDUINO, u kojem testiram uređaj i pokazujem da radi za ove tri vrste ploča.

Korak 2: MCP23016

Ovdje imamo sliku MCP23016, koji je čip sa 28 pinova. Važno je napomenuti da postoji i model MCP23017, koji je češći i ne treba otpornik i kondenzator, jer ima unutarnji sat. To olakšava posao, ali njegovo prikvačivanje razlikuje se od onoga što prikazujemo u ovom videu.

Korak 3: Adresa

Adresa
Adresa

Za definiranje adrese MCP23016 koristimo pinove A0, A1 i A2. Za promjenu adrese možete ih ostaviti na VISOKO ili NISKO.

Adresa će se formirati na sljedeći način:

MCP_Address = 20 + (A2 A1 A0)

Tamo gdje A2 A1 A0 može uzeti VISOKE / NISKE vrijednosti, formira se binarni broj od 0 do 7.

Na primjer:

A2> GND, A1> GND, A0> GND (znači 000, zatim 20 + 0 = 20)

Ili drugačije, A2> HIGH, A1> GND, A0> HIGH (znači 101, zatim 20 + 5 = 25)

Korak 4: Naredbe

Naredbe
Naredbe

Evo tablice s naredbama za komunikaciju:

Korak 5: Kategorije

GP0 / GP1 - Registri portova za podatke

Postoje dva registra koji omogućuju pristup dvama GPIO priključcima.

Očitavanje registra osigurava status pinova na tom priključku.

Bit = 1> HIGH Bit = 0> LOW

IODIR0 / IODIR1

Postoje dva registra koji kontroliraju pin način rada. (Ulaz ili izlaz)

Bit = 1> ULAZ Bit = 0> IZLAZ

Korak 6: Struktura komunikacije

Struktura za komunikaciju
Struktura za komunikaciju

Ovdje govorimo o adresi čipa, te pristupu naredbi i podacima, što je svojevrsni protokol koji je potrebno učiniti za slanje informacija.

Korak 7: Program

Program
Program

Napravit ćemo program koji se sastoji od komunikacije ESP01 s MCP23016 kako bismo imali više GPIO -ova za korištenje. Ovih 16 novih GPIO-a koje ćemo imati kontrolirat će 16-kanalni relejni modul.

Naredbe će se slati na ESP01 putem Android aplikacije.

Korak 8: MCP23016

MCP23016
MCP23016

Korak 9: ESP-01

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

Ovo je ploča sa 16 releja.

Korak 10: Montiranje ESP01

Montaža ESP01
Montaža ESP01

Korak 11: Knjižnice i varijable

Uključit ćemo knjižnice odgovorne za i2c komunikaciju, te za stvaranje pristupne točke i web poslužitelja. Definiramo adresu čipa i portove. Na kraju, definiramo varijable za spremanje vrijednosti MCP pinova.

#include // responvel pela comunicação i2c. #include // responvel por criar o accesspoint eo webserver WiFiServer poslužitelj (80); // webserver para acessarmos através to applicativo // endereço I2C do MCP23016 #define MCPAddress 0x20 // ENDEREADOS REGES definirati GP0 0x00 // REGISTAR PORTA PODATAKA 0 #define GP1 0x01 // REGISTAR PORTA PODATAKA 1 #define IODIR0 0x06 // REGISTAR I/O SMJERNICE 0 #define IODIR1 0x07 // REGISTAR I/O SMJERNICE 1 // guarda os valores dos pinos do MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

Korak 12: Postavljanje

Pokrećemo ESP01 i konfiguriramo portove. Također konfiguriramo pristupnu točku i inicijaliziramo poslužitelj.

void setup () {Serial.begin (9600); kašnjenje (1000); Wire.begin (0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, OUTPUT); configurePort (IODIR1, OUTPUT); writeBlockData (GP0, 0x00); writeBlockData (GP1, 0x00); setupWiFi (); // konfiguracija pristupne točke server.begin (); // inicijalizacija poslužitelja}

Korak 13: Petlja

Ovdje provjeravam jesu li neki klijenti povezani s poslužiteljem. Pročitali smo i prvi redak zahtjeva. Izdvajamo podatke za manipulaciju, definiramo zadano zaglavlje odgovora i šaljemo ovaj odgovor klijentu.

void loop () {WiFiClient client = server.available (); // 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 prefiksu zaglavlja za sablju se zahtijeva kao esperada za os relés */if (req.indexOf ("/MR")! = -1) {parserData (req); // dio da requisição extrai os dados para manipulação} else {Serial.println ("nevažeći zahtjev"); povratak; } client.flush (); Niz 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); } // završna petlja

Korak 14: ParserData

ParserData
ParserData

Od zahtjeva tražimo podatke vezane za releje. Zatim šaljemo podatke na MCP23016.

// partir da requisição busca os dados referente aos relésvoid parserData (Podaci o nizu) {uint8_t relay = -1; uint8_t gp = -1; vrijednost 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 (uključeno/isključeno) {gp = podaci [indeks+3]-'0'; relej = podaci [indeks+4]-'0'; vrijednost = podaci [indeks+6]-'0'; // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (relej-1, vrijednost, gp); }}

Korak 15: Konfigurirajte port

Postavili smo GPIO pin način rada (GP0 ili GP1).

// konfiguracija o načinu rada za GPIO (GP0 ili 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 // prilagođena 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 (uint8_t port, uint8_t custom) {if (custom == INPUT) {writeBlockData (port, 0xFF); } else if (custom == OUTPUT) {writeBlockData (port, 0x00); } else {writeBlockData (port, prilagođeno); }}

Korak 16: WritePinData

U ovom dijelu koda mijenjamo stanje željenog pina i šaljemo podatke MCP -u.

// muda o estado de um pino desejado, passando como parametro: // pin = pino desejado; vrijednost = 0/1 (uključeno/isključeno); gp = 0/1 (PORT do MCP) void writePinData (int pin, int vrijednost, uint8_t gp) {uint8_t statusGP = 0; if (gp == GP0) statusGP = currentValueGP0; else statusGP = currentValueGP1; if (vrijednost == 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; // envia os dados para o MCP writeBlockData (gp, statusGP); kašnjenje (10); }

Korak 17: WriteBlockData & SetupWiFi

Ovdje podatke šaljemo na MCP23016 putem sabirnice i2c. Zatim konfiguriramo svojstva za omogućavanje pristupne točke. Konačno, konfigurirali smo WiFi za način pristupne točke i stvorili AP sa SSID -om i lozinkom.

// envia dados para 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 (podaci); Wire.endTransmission (); kašnjenje (10); }

// konfigurirati kao prilagođene parametre za o ACCESS POINTvoid setupWiFi () {WiFi.mode (WIFI_AP); WiFi.softAP ("ESP01_RELAY", "12345678"); }

Korak 18: Aplikacija

Aplikacija
Aplikacija
Aplikacija
Aplikacija
Aplikacija
Aplikacija
Aplikacija
Aplikacija

Za izradu aplikacije koristimo MIT App Inventor 2, kojem se može pristupiti putem veze:

ai2.appinventor.mit.edu/

Aplikacija se sastoji od dva zaslona koji sadrže po osam parova gumba u svakom, koji pokazuju status svakog releja.

Slijede neki od programskih blokova koji se koriste:

VAŽNO: Zadana IP adresa ESP -a, jer je pristupna točka 192.168.4.1

1. Kad se zaslon inicijalizira, spremamo IP u memoriju i pozivamo postupak za oporavak stanja gumba (UKLJ. / ISKLJ.).

2. Pozovite drugi zaslon

1. Klikom na gumb ON na jednom od releja izvršit ćemo vizualne promjene u gumbu (zeleni blokovi). WebViewer1. GoToUrl upućuje zahtjev za naš ESP01 povezivanjem podataka MR01 / 1 u URL -u.

2. Kada kliknemo gumb OFF na jednom od releja, izvršit ćemo vizualne promjene u gumbu (zeleni blokovi). WebViewer1. GoToUrl upućuje zahtjev našem ESP01 povezivanjem podataka MR01 / 0 u URL -u.

Ovaj se postupak koristi za oporavak stanja gumba (releja), jer se pri promjeni zaslona vraća na obrazac stvaranja.

Žuti blok se ponavlja za svaki od parova gumba.

Korak 19: Preuzmite

Evo datoteka projekta za preuzimanje:

Datoteka projekta MIT App Inventor 2 - preuzimanje

APK aplikacije za instaliranje na androidu - preuzimanje

Preuzmite ostale datoteke:

PDF

INO

Preporučeni: