Inhoudsopgave:

Goedkope automatisering met ESP01 - Ajarnpa
Goedkope automatisering met ESP01 - Ajarnpa

Video: Goedkope automatisering met ESP01 - Ajarnpa

Video: Goedkope automatisering met ESP01 - Ajarnpa
Video: ESP-01(s) DHT11 + HomeAssistant + ESPHome 2024, November
Anonim
Image
Image
MCP23016
MCP23016

Vandaag bespreken we automatisering met ESP01 met 16 relais. Dit is een super goedkoop ontwerpmodel waarbij je de modules kunt vermenigvuldigen en tot 128 relais kunt krijgen, aangezien het mogelijk is om tot acht poortuitbreidingen in deze microcontroller te plaatsen.

In ons circuit heb je een applicatie op een smartphone die communiceert met de ESP01. Het zal een uitbreiding hebben met 16 poorten, elk verbonden met een relais. We hebben ook een 3v3 instelbare bron. We zullen daarom een 16-kanaals relaismodule met ESP01 aansturen via de Android-applicatie, die ik u ter beschikking stel.

Stap 1: Tip om te onthouden

Het is belangrijk op te merken, mijn vrienden, dat ik deze chip heb gebruikt in een circuit genaamd MCP23016. Het is ook belangrijk dat je de video EXPANSOR OF IOS FOR ESP32, ESP8266 AND ARDUINO bekijkt, waarin ik het apparaat test en laat zien dat het werkt voor deze drie soorten boards.

Stap 2: MCP23016

Hier hebben we een afbeelding van de MCP23016, een chip met 28 pinnen. Het is belangrijk om te vermelden dat er ook het MCP23017-model is, dat vaker voorkomt en geen weerstand en condensator nodig heeft, omdat het een interne klok heeft. Dit maakt het gemakkelijker, maar het vastzetten is anders dan wat we in deze video laten zien.

Stap 3: Adres

Adres
Adres

Om het adres van de MCP23016 te definiëren, gebruiken we pinnen A0, A1 en A2. U kunt ze gewoon op HOOG of LAAG laten staan voor de adreswijziging.

Het adres wordt als volgt gevormd:

MCP_Adres = 20 + (A2 A1 A0)

Waar A2 A1 A0 HOGE / LAGE waarden kan aannemen, vormt zich een binair getal van 0 tot 7.

Bijvoorbeeld:

A2> GND, A1> GND, A0> GND (betekent 000, dan 20 + 0 = 20)

Of anders, A2> HOOG, A1> GND, A0> HOOG (betekent 101, dan 20 + 5 = 25)

Stap 4: Opdrachten

Commando's
Commando's

Hier is een tabel met opdrachten voor communicatie:

Stap 5: Categorieën

GP0 / GP1 - Gegevenspoortregisters

Er zijn twee registers die toegang geven tot de twee GPIO-poorten.

De registeruitlezing geeft de status van de pinnen op die poort weer.

Bit = 1> HOOG Bit = 0> LAAG

IODIR0 / IODIR1

Er zijn twee registers die de pin-modus regelen. (Ingang of Uitgang)

Bit = 1> INGANG Bit = 0> UITGANG

Stap 6: Structuur voor communicatie

Structuur voor communicatie
Structuur voor communicatie

Hier hebben we het over het adres van de chip en hebben we toegang tot de opdracht en gegevens, wat een soort protocol is dat moet worden gedaan om informatie te verzenden.

Stap 7: Programmeren

Programma
Programma

We zullen een programma doen dat bestaat uit het communiceren van de ESP01 met de MCP23016 om meer GPIO's te gebruiken. Deze 16 nieuwe GPIO's die we zullen hebben, gaan een 16-kanaals relaismodule aansturen.

Opdrachten worden via een Android-applicatie naar ESP01 gestuurd.

Stap 8: MCP23016

MCP23016
MCP23016

Stap 9: ESP-01

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

Dit is een bord met 16 relais.

Stap 10: ESP01. monteren

Montage ESP01
Montage ESP01

Stap 11: Bibliotheken en variabelen

We zullen de bibliotheken opnemen die verantwoordelijk zijn voor i2c-communicatie en voor het maken van het toegangspunt en de webserver. We definiëren het adres van de chip en de poorten. Ten slotte definiëren we de variabelen om de waarden van de MCP-pinnen op te slaan.

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

Stap 12: Instellen

We initialiseren de ESP01 en configureren de poorten. We configureren ook het Access Point en initialiseren de server.

void setup() { Serial.begin(9600); vertraging (1000); Draad.begin(0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, UITGANG); configurePort (IODIR1, UITGANG); writeBlockData(GP0, 0x00); writeBlockData(GP1, 0x00); wifi instellen(); //configuratie van Access Point server.begin();//inicializa o server}

Stap 13: Loop

Hier controleer ik of er clients zijn verbonden met de server. We lezen ook de eerste verzoekregel. We extraheren de gegevens voor manipulatie, definiëren de standaard antwoordheader en sturen dit antwoord naar de klant.

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 é een esperada para os relés */ if(req.indexOf ("/MR") != -1) { parserData(req); //een deel van de vereiste extrai os dados para manipulação } else{ Serial.println ("ongeldig verzoek"); opbrengst; } cliënt.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); } // eindlus

Stap 14: ParserData

ParserData
ParserData

Vanuit het verzoek gaan we op zoek naar de gegevens met betrekking tot de relais. Wij sturen de gegevens vervolgens naar de MCP23016.

// een partir da requisição busca os dados referente en relésvoid parserData (String data) { uint8_t relay = -1; uint8_t gp = -1; uint8_t waarde = -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(aan/uit) { gp = data[index+3]-'0'; relais = data[index+4]-'0'; waarde = gegevens[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); } }

Stap 15: Poort configureren

We stellen de GPIO-pinmodus in (GP0 of GP1).

//configura of modo dos pinos GPIO (GP0 of GP1)//como parametro passamos: // port: GP0 of GP1 // INPUT para todos as portas do GP trabalharem como entrada // OUTPUT para todos as portas do GP trabalharem como saida // custom um valor de 0-255 indicando of modo das portas (1=INPUT, 0=OUTPUT) // ex: 0x01 of B00000001 of 1: indica que apenas of GPX.0 trabalhará como entrada, of restante como saida void configurePort (uint8_t poort, uint8_t aangepast) {if(aangepast == INPUT) {writeBlockData(poort, 0xFF); } else if(custom == OUTPUT) {writeBlockData(poort, 0x00); } else {writeBlockData(poort, aangepast); } }

Stap 16: SchrijfPinData

In dit deel van de code veranderen we de status van een gewenste pin en sturen de gegevens naar de MCP.

//muda o estado de um pino desejado, passando como parametro://pin = pino desejado; waarde = 0/1 (aan/uit); gp = 0/1 (PORT do MCP) void writePinData (int pin, int value, uint8_t gp) { uint8_t statusGP = 0; if(gp == GP0) statusGP = huidigeWaardeGP0; anders statusGP = huidigeWaardeGP1; if (waarde == 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; anders huidige WaardeGP1 = statusGP; //Envia os dados para o MCP writeBlockData(gp, statusGP); vertraging(10); }

Stap 17: WriteBlockData & SetupWiFi

Hier sturen we data naar de MCP23016 via de i2c bus. Vervolgens configureren we de eigenschappen om het toegangspunt in te schakelen. Ten slotte hebben we de WiFi geconfigureerd voor de Access Point-modus en een AP gemaakt met SSID en het PASWOORD.

//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 (poort); Wire.write (gegevens); Wire.endTransmission(); vertraging(10); }

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

Stap 18: App

App
App
App
App
App
App
App
App

Om de applicatie te maken, gebruiken we MIT App Inventor 2, die toegankelijk is via de link:

ai2.appinventor.mit.edu/

De applicatie bestaat uit twee schermen met elk acht paar knoppen, die de status van elk relais aangeven.

Hieronder volgen enkele van de gebruikte programmeerblokken:

BELANGRIJK: Het standaard IP-adres van de ESP, aangezien het toegangspunt 192.168.4.1 is

1. Wanneer het scherm wordt geïnitialiseerd, slaan we het IP-adres op in het geheugen en roepen we de procedure op om de status van de knoppen te herstellen (AAN / UIT).

2. Bel het andere scherm

1. Wanneer u op de AAN-knop van een van de relais klikt, zullen we visuele wijzigingen aanbrengen in de knop (groene blokken). WebViewer1. GoToUrl doet een aanvraag voor onze ESP01 door de MR01/1 data in de URL te linken.

2. Wanneer u op de UIT-knop van een van de relais klikt, zullen we visuele wijzigingen aanbrengen in de knop (groene blokken). WebViewer1. GoToUrl doet een verzoek aan onze ESP01 door de MR01 / 0-gegevens in de URL te koppelen.

Deze procedure wordt gebruikt om de status van de knoppen (relais) te herstellen, omdat bij het veranderen van het scherm terugkeert naar het aanmaakpatroon.

Het gele blok wordt herhaald voor elk van de knopparen.

Stap 19: Downloaden

Hier zijn de projectbestanden om te downloaden:

MIT App Inventor 2 projectbestand - downloaden

Applicatie APK om op Android te installeren - downloaden

Download de andere bestanden:

PDF

INO

Aanbevolen: