Innehållsförteckning:

Lågkostnadsautomation med ESP01: 19 steg
Lågkostnadsautomation med ESP01: 19 steg

Video: Lågkostnadsautomation med ESP01: 19 steg

Video: Lågkostnadsautomation med ESP01: 19 steg
Video: Голубая стрела (1958) фильм 2024, November
Anonim
Image
Image
MCP23016
MCP23016

Idag diskuterar vi automatisering med ESP01 med 16 reläer. Detta är en superbillig designmodell där du kan multiplicera modulerna och få upp till 128 reläer, eftersom det är möjligt att sätta upp till åtta portutbyggare i denna mikrokontroller.

I vår krets har du en applikation på en smartphone som kommunicerar med ESP01. Den kommer att ha en expander med 16 portar, var och en ansluten till ett relä. Vi har också en 3v3 justerbar källa. Vi kommer därför att styra en 16-kanals relämodul med ESP01 via Android-appen, som jag gör tillgänglig för dig.

Steg 1: Tips att komma ihåg

Det är viktigt att notera, mina vänner, att jag använde detta chip i en krets som heter MCP23016. Det är också viktigt för dig att titta på videon EXPANSOR OF IOS FOR ESP32, ESP8266 AND ARDUINO, där jag testar enheten och visar att den fungerar för dessa tre typer av kort.

Steg 2: MCP23016

Här har vi en bild av MCP23016, som är ett chip med 28 stift. Det är viktigt att nämna att det också finns modellen MCP23017, som är vanligare och inte behöver ett motstånd och kondensator, eftersom den har en intern klocka. Detta gör det enklare, men dess fästning skiljer sig från det vi visar i den här videon.

Steg 3: Adress

Adress
Adress

För att definiera adressen till MCP23016 använder vi stiften A0, A1 och A2. Du kan bara lämna dem på HIGH eller LOW för adressändringen.

Adressen kommer att formas enligt följande:

MCP_Address = 20 + (A2 A1 A0)

Där A2 A1 A0 kan ta HIGH / LOW -värden, bildas ett binärt tal från 0 till 7.

Till exempel:

A2> GND, A1> GND, A0> GND (betyder 000, då 20 + 0 = 20)

Eller annars, A2> HÖG, A1> GND, A0> HÖG (betyder 101, sedan 20 + 5 = 25)

Steg 4: Kommandon

Kommandon
Kommandon

Här är en tabell med kommandon för kommunikation:

Steg 5: Kategorier

GP0 / GP1 - Dataportregister

Det finns två register som ger åtkomst till de två GPIO -portarna.

Registeravläsningen ger status för stiften på den porten.

Bit = 1> HIGH Bit = 0> LÅG

IODIR0 / IODIR1

Det finns två register som styr stiftläget. (Ingång eller utmatning)

Bit = 1> INPUT Bit = 0> OUTPUT

Steg 6: Struktur för kommunikation

Struktur för kommunikation
Struktur för kommunikation

Här pratar vi om chipets adress och får tillgång till kommandot och data, vilket är ett slags protokoll som måste göras för att skicka information.

Steg 7: Programmera

Program
Program

Vi gör ett program som består av att kommunicera ESP01 med MCP23016 för att få fler GPIO: er att använda. Dessa 16 nya GPIO: er som vi kommer att styra en 16-kanals relämodul.

Kommandon skickas till ESP01 via en Android -applikation.

Steg 8: MCP23016

MCP23016
MCP23016

Steg 9: ESP-01

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

Detta är en 16-stafettkort.

Steg 10: Montering av ESP01

Montering ESP01
Montering ESP01

Steg 11: Bibliotek och variabler

Vi kommer att inkludera de bibliotek som är ansvariga för i2c -kommunikation och för att skapa åtkomstpunkten och webbservern. Vi definierar adressen till chipet och portarna. Slutligen definierar vi variablerna för att lagra värdena på MCP -stiften.

#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 definiera 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 gör MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

Steg 12: Konfiguration

Vi initierar ESP01 och konfigurerar portarna. Vi konfigurerar också åtkomstpunkten och initierar servern.

void setup () {Serial.begin (9600); fördröjning (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}

Steg 13: Loop

Här kontrollerar jag om några klienter har anslutits till servern. Vi läste också den första förfrågningsraden. Vi extraherar data för manipulation, definierar standardsvarhuvudet och skickar detta svar till klienten.

void loop () {WiFiClient -klient = 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 ("ogiltig begäran"); lämna tillbaka; } klient.flush (); Sträng 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); } // slutslinga

Steg 14: ParserData

ParserData
ParserData

Från begäran letar vi efter data relaterade till reläerna. Vi skickar sedan data till 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 värde = -1; int index = data.indexOf ("/MR"); // busca o index gör prefixo MR if (data [index+5] == '/') ///MR01/1, onde 0 = GP; 1 = RELE; 1 = ESTADO (på/av) {gp = data [index+3]-'0'; relä = data [index+4]-'0'; värde = data [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); }}

Steg 15: ConfigurePort

Vi ställer in GPIO -pinläget (GP0 eller GP1).

// konfiguration 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 // anpassad om värde av 0-255 indikering 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); } annars if (custom == OUTPUT) {writeBlockData (port, 0x00); } annat {writeBlockData (port, anpassad); }}

Steg 16: WritePinData

I denna del av koden ändrar vi tillståndet för en önskad pin och skickar data till MCP.

// muda o estado de um pino desejado, passando como parametro: // pin = pino desejado; värde = 0/1 (på/av); gp = 0/1 (PORT do MCP) void writePinData (int pin, int value, uint8_t gp) {uint8_t statusGP = 0; om (gp == GP0) statusGP = currentValueGP0; annars statusGP = currentValueGP1; om (värde == 0) {statusGP & = ~ (B00000001 << (pin)); // muda o pino para LOW} annars if (värde == 1) {statusGP | = (B00000001 << (pin)); // muda o pino para HIGH} if (gp == GP0) currentValueGP0 = statusGP; annars currentValueGP1 = statusGP; // envia os dados para o MCP writeBlockData (gp, statusGP); fördröjning (10); }

Steg 17: WriteBlockData & SetupWiFi

Här skickar vi data till MCP23016 via i2c -bussen. Därefter konfigurerar vi egenskaperna för att aktivera åtkomstpunkten. Slutligen konfigurerade vi WiFi för åtkomstpunktsläge och skapade ett AP med SSID och LÖSENORD.

// 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 (); fördröjning (10); }

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

Steg 18: App

App
App
App
App
App
App
App
App

För att skapa programmet använder vi MIT App Inventor 2, som kan nås via länken:

ai2.appinventor.mit.edu/

Applikationen består av två skärmar som innehåller åtta par knappar i varje, vilket indikerar status för varje relä.

Följande är några av de programmeringsblock som används:

VIKTIGT: Standard -IP -adressen för ESP, eftersom åtkomstpunkten är 192.168.4.1

1. När skärmen initialiseras lagrar vi IP: n i minnet och kallar proceduren för att återställa status för knapparna (ON / OFF).

2. Ring den andra skärmen

1. När du klickar på PÅ -knappen på ett av reläerna kommer vi att göra visuella ändringar i knappen (gröna block). WebViewer1. GoToUrl begär vår ESP01 genom att länka MR01 / 1 -data i URL: en.

2. När du klickar på AV -knappen på ett av reläerna gör vi visuella ändringar i knappen (gröna block). WebViewer1. GoToUrl gör en begäran till vår ESP01 genom att länka MR01 / 0 -data i URL: en.

Denna procedur används för att återställa status för knapparna (reläer), eftersom när du ändrar skärmen återgår den till skapningsmönstret.

Det gula blocket upprepas för vart och ett av knappparen.

Steg 19: Ladda ner

Här är projektfilerna att ladda ner:

MIT App Inventor 2 projektfil - ladda ner

Applikations -APK för att installera på Android - ladda ner

Ladda ner de andra filerna:

PDF

INO

Rekommenderad: