Innholdsfortegnelse:

Lavprisautomatisering med ESP01: 19 trinn
Lavprisautomatisering med ESP01: 19 trinn

Video: Lavprisautomatisering med ESP01: 19 trinn

Video: Lavprisautomatisering med ESP01: 19 trinn
Video: Умное окно - автоматизация проветривания комнаты, интеграция в Home Assistant 2024, November
Anonim
Image
Image
MCP23016
MCP23016

I dag diskuterer vi automatisering ved bruk av ESP01 med 16 reléer. Dette er en superbillig designmodell hvor du kan multiplisere modulene og få opptil 128 reléer, da det er mulig å sette opptil åtte portutvidere i denne mikrokontrolleren.

I vår krets vil du ha en applikasjon på en smarttelefon som kommuniserer med ESP01. Den vil ha en ekspander med 16 porter, hver koblet til et relé. Vi har også en 3v3 justerbar kilde. Vi vil derfor kontrollere en 16-kanals relemodul ved bruk av ESP01 gjennom Android-appen, som jeg gjør tilgjengelig for deg.

Trinn 1: Tips å huske

Det er viktig å merke seg, venner, at jeg brukte denne brikken i en krets kalt MCP23016. Det er også viktig for deg å se videoen EXPANSOR OF IOS FOR ESP32, ESP8266 AND ARDUINO, der jeg tester enheten og viser at den fungerer for disse tre typene brett.

Trinn 2: MCP23016

Her har vi et bilde av MCP23016, som er en brikke med 28 pinner. Det er viktig å nevne at det også er modellen MCP23017, som er mer vanlig og ikke trenger motstand og kondensator, fordi den har en intern klokke. Dette gjør det enklere, men festingen er forskjellig fra det vi viser i denne videoen.

Trinn 3: Adresse

Adresse
Adresse

For å definere adressen til MCP23016 bruker vi pinnene A0, A1 og A2. Du kan bare la dem stå på HIGH eller LOW for adresseendringen.

Adressen vil bli dannet som følger:

MCP_Address = 20 + (A2 A1 A0)

Der A2 A1 A0 kan ta HIGH / LOW verdier, dannes et binært tall fra 0 til 7.

For eksempel:

A2> GND, A1> GND, A0> GND (betyr 000, deretter 20 + 0 = 20)

Hvis ikke, A2> HØY, A1> GND, A0> HØY (betyr 101, deretter 20 + 5 = 25)

Trinn 4: Kommandoer

Kommandoer
Kommandoer

Her er en tabell med kommandoer for kommunikasjon:

Trinn 5: Kategorier

GP0 / GP1 - Dataportregistre

Det er to registre som gir tilgang til de to GPIO -portene.

Registeravlesningen gir status for pinnene på den porten.

Bit = 1> HIGH Bit = 0> LAV

IODIR0 / IODIR1

Det er to registre som styrer pin -modus. (Inngang eller utgang)

Bit = 1> INNGANG Bit = 0> UTGANG

Trinn 6: Struktur for kommunikasjon

Struktur for kommunikasjon
Struktur for kommunikasjon

Her snakker vi om adressen til brikken, og får tilgang til kommandoen og dataene, som er en slags protokoll som må gjøres for å sende informasjon.

Trinn 7: Program

Program
Program

Vi gjør et program som består i å kommunisere ESP01 med MCP23016 for å ha flere GPIO -er å bruke. Disse 16 nye GPIO-ene vi kommer til å styre en 16-kanals relemodul.

Kommandoer blir sendt til ESP01 via en Android -applikasjon.

Trinn 8: MCP23016

MCP23016
MCP23016

Trinn 9: ESP-01

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

Dette er et 16-stafettbrett.

Trinn 10: Montering av ESP01

Montering ESP01
Montering ESP01

Trinn 11: Biblioteker og variabler

Vi vil inkludere bibliotekene som er ansvarlige for i2c -kommunikasjon, og for å lage tilgangspunktet og webserveren. Vi definerer adressen til brikken og portene. Til slutt definerer vi variablene for å lagre verdiene til MCP -pinnene.

#include // responsável pela comunicação i2c. #include // responsável por criar o accesspoint eo webserver WiFiServer server (80); // webserver para acessarmos através do aplicativo // endereço I2C do MCP23016 #define MCPAddress 0x20 // ENDEREOS definere 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 gjør MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

Trinn 12: Oppsett

Vi initialiserer ESP01 og konfigurerer portene. Vi konfigurerer også tilgangspunktet og initialiserer serveren.

ugyldig oppsett () {Serial.begin (9600); forsinkelse (1000); Wire.begin (0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, OUTPUT); configurePort (IODIR1, OUTPUT); writeBlockData (GP0, 0x00); writeBlockData (GP1, 0x00); setupWiFi (); // konfiguração do Access Point server.begin (); // inicializa o server}

Trinn 13: Sløyfe

Her sjekker jeg om noen klienter har blitt koblet til serveren. Vi leste også den første forespørselslinjen. Vi trekker ut dataene for manipulasjon, definerer standard svaroverskrift og sender dette svaret til klienten.

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 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 ("ugyldig forespørsel"); komme tilbake; } client.flush (); String 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); } // ende sløyfe

Trinn 14: ParserData

ParserData
ParserData

Fra forespørselen ser vi etter dataene relatert til reléene. Vi sender deretter dataene til 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 verdi = -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 (på/av) {gp = data [indeks+3]-'0'; relé = data [indeks+4]-'0'; verdi = data [indeks+6]-'0'; // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (relay-1, value, gp); }}

Trinn 15: ConfigurePort

Vi angir GPIO -pin -modus (GP0 eller GP1).

// konfigura 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 // tilpasset verdi for 0-255 indikasjoner for portas (1 = INNGANG, 0 = UTGANG) // eks: 0x01 eller B00000001 eller 1: indikasjon som åpner for GPX.0-inngang, eller restant for å si ugyldig konfigureringPort (uint8_t port, uint8_t tilpasset) {if (custom == INPUT) {writeBlockData (port, 0xFF); } annet hvis (tilpasset == OUTPUT) {writeBlockData (port, 0x00); } annet {writeBlockData (port, tilpasset); }}

Trinn 16: WritePinData

I denne delen av koden endrer vi tilstanden til en ønsket pin og sender dataene til MCP.

// muda o estado de um pino desejado, passando como parametro: // pin = pino desejado; verdi = 0/1 (på/av); gp = 0/1 (PORT do MCP) void writePinData (int pin, int value, uint8_t gp) {uint8_t statusGP = 0; hvis (gp == GP0) statusGP = currentValueGP0; ellers statusGP = currentValueGP1; hvis (verdi == 0) {statusGP & = ~ (B00000001 << (pin)); // muda o pino para LOW} annet hvis (verdi == 1) {statusGP | = (B00000001 << (pin)); // muda o pino para HIGH} if (gp == GP0) currentValueGP0 = statusGP; ellers currentValueGP1 = statusGP; // envia os dados para o MCP writeBlockData (gp, statusGP); forsinkelse (10); }

Trinn 17: WriteBlockData & SetupWiFi

Her sender vi data til MCP23016 via i2c -bussen. Deretter konfigurerer vi egenskapene for å aktivere tilgangspunktet. Til slutt konfigurerte vi WiFi for tilgangspunktmodus og opprettet en AP med SSID og PASSORD.

// 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 (data); Wire.endTransmission (); forsinkelse (10); }

// konfigura as propriedades para habilitar o ACCESS POINTvoid setupWiFi () {WiFi.mode (WIFI_AP); WiFi.softAP ("ESP01_RELAY", "12345678"); }

Trinn 18: App

App
App
App
App
App
App
App
App

For å lage programmet bruker vi MIT App Inventor 2, som du kan få tilgang til via lenken:

ai2.appinventor.mit.edu/

Applikasjonen består av to skjermer som inneholder åtte par knapper i hver, som angir statusen til hvert relé.

Følgende er noen av programmeringsblokkene som brukes:

VIKTIG: Standard IP -adresse for ESP, ettersom tilgangspunktet er 192.168.4.1

1. Når skjermen initialiseres, lagrer vi IP -en i minnet og kaller fremgangsmåten for å gjenopprette tilstanden til knappene (PÅ / AV).

2. Ring den andre skjermen

1. Når du klikker på PÅ -knappen på et av reléene, vil vi gjøre visuelle endringer i knappen (grønne blokker). WebViewer1. GoToUrl sender en forespørsel om ESP01 ved å koble MR01 / 1 -dataene i URL -en.

2. Når du klikker på AV -knappen på en av reléene, vil vi gjøre visuelle endringer i knappen (grønne blokker). WebViewer1. GoToUrl sender en forespørsel til ESP01 vår ved å koble MR01 / 0 -dataene i URL -en.

Denne prosedyren brukes til å gjenopprette tilstanden til knappene (releer), fordi når du endrer skjermen, går den tilbake til opprettelsesmønsteret.

Den gule blokken gjentas for hvert av knappeparene.

Trinn 19: Last ned

Her er prosjektfilene for nedlasting:

MIT App Inventor 2 prosjektfil - last ned

Applikasjons -APK for å installere på Android - last ned

Last ned de andre filene:

PDF

INO

Anbefalt: