Turinys:

Pigių išlaidų automatizavimas naudojant ESP01: 19 žingsnių
Pigių išlaidų automatizavimas naudojant ESP01: 19 žingsnių

Video: Pigių išlaidų automatizavimas naudojant ESP01: 19 žingsnių

Video: Pigių išlaidų automatizavimas naudojant ESP01: 19 žingsnių
Video: Kokių reikia sąlygų įsirengti Saulės elektrinei? 2024, Lapkritis
Anonim
Image
Image
MCP23016
MCP23016

Šiandien mes aptarsime automatizavimą naudojant ESP01 su 16 relių. Tai itin pigus dizaino modelis, kuriame galite padauginti modulius ir gauti iki 128 relių, nes šiame mikrovaldiklyje galima įdėti iki aštuonių prievadų plėtiklių.

Mūsų grandinėje turėsite programą išmaniajame telefone, kuri bendrauja su ESP01. Jame bus plėtiklis su 16 prievadų, kiekvienas prijungtas prie relės. Taip pat turime 3v3 reguliuojamą šaltinį. Todėl mes valdysime 16 kanalų relės modulį, naudodami ESP01 per „Android“programą, kurią jums pateikiu.

1 žingsnis: patarimas prisiminti

Mano draugai, svarbu pažymėti, kad aš naudoju šį lustą grandinėje, pavadintoje MCP23016. Taip pat jums svarbu žiūrėti vaizdo įrašą „EXPANSOR OF IOS“, skirtas ESP32, ESP8266 IR ARDUINO, kuriame išbandau įrenginį ir parodau, kad jis tinka šių trijų tipų plokštėms.

2 veiksmas: MCP23016

Čia mes turime MCP23016 vaizdą, kuris yra lustas su 28 kaiščiais. Svarbu paminėti, kad taip pat yra MCP23017 modelis, kuris yra labiau paplitęs ir jam nereikia rezistoriaus ir kondensatoriaus, nes jis turi vidinį laikrodį. Tai palengvina, tačiau jo prisegimas skiriasi nuo to, ką parodome šiame vaizdo įraše.

3 žingsnis: adresas

Adresas
Adresas

Norėdami apibrėžti MCP23016 adresą, naudojame kaiščius A0, A1 ir A2. Galite tiesiog palikti juos HIGH arba LOW, kad pakeistumėte adresą.

Adresas bus suformuotas taip:

MCP_Address = 20 + (A2 A1 A0)

Kai A2 A1 A0 gali turėti HIGH / LOW reikšmes, dvejetainis skaičius nuo 0 iki 7 formų.

Pavyzdžiui:

A2> GND, A1> GND, A0> GND (reiškia 000, tada 20 + 0 = 20)

Arba kitaip, A2> HIGH, A1> GND, A0> HIGH (reiškia 101, tada 20 + 5 = 25)

4 žingsnis: komandos

Komandos
Komandos

Čia yra lentelė su komandomis bendravimui:

5 žingsnis: kategorijos

GP0 / GP1 - duomenų prievadų registrai

Yra du registrai, suteikiantys prieigą prie dviejų GPIO prievadų.

Registro rodmenys pateikia to prievado kaiščių būseną.

Bit = 1> HIGH Bit = 0> LOW

IODIR0 / IODIR1

Yra du registrai, valdantys kaiščio režimą. (Įvestis arba išvestis)

Bitas = 1> Įvesties bitas = 0> IŠVESTIS

6 žingsnis: bendravimo struktūra

Bendravimo struktūra
Bendravimo struktūra

Čia mes kalbame apie lusto adresą ir pasiekiame komandą bei duomenis, kurie yra tam tikras protokolas, kurį reikia atlikti norint išsiųsti informaciją.

7 žingsnis: programa

Programa
Programa

Mes atliksime programą, kurią sudarys ryšys su ESP01 su MCP23016, kad būtų galima naudoti daugiau GPIO. Šie 16 naujų GPIO, kuriuos turėsime, valdys 16 kanalų relės modulį.

Komandos bus siunčiamos į ESP01 per „Android“programą.

8 veiksmas: MCP23016

MCP23016
MCP23016

9 veiksmas: ESP-01

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

Tai yra 16 relių lenta.

10 veiksmas: ESP01 montavimas

Montavimas ESP01
Montavimas ESP01

11 veiksmas: bibliotekos ir kintamieji

Įtrauksime bibliotekas, atsakingas už „i2c“bendravimą, prieigos taško ir žiniatinklio serverio kūrimą. Mes nustatome lusto adresą ir prievadus. Galiausiai mes apibrėžiame kintamuosius, kad būtų išsaugotos MCP kaiščių vertės.

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

12 veiksmas: sąranka

Mes inicijuojame ESP01 ir konfigūruojame prievadus. Taip pat konfigūruojame prieigos tašką ir inicijuojame serverį.

void setup () {Serial.begin (9600); vėlavimas (1000); Viela.pradėti (0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, OUTPUT); configurePort (IODIR1, OUTPUT); writeBlockData (GP0, 0x00); writeBlockData (GP1, 0x00); setupWiFi (); // konfigūruoti prieigos taško serverį.begin (); // inicializacija arba serveris}

13 žingsnis: ciklas

Čia aš patikrinu, ar prie serverio buvo prijungti klientai. Mes taip pat perskaitėme pirmąją užklausos eilutę. Mes ištraukiame duomenis manipuliavimui, nustatome numatytąją atsakymo antraštę ir siunčiame šį atsakymą klientui.

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 ("negaliojantis prašymas"); grįžti; } client.flush (); Eilutė s = "HTTP/1.1 200 Gerai / r / n"; // cabeçalho padrão de resposta client.print (s); // envia a resposta para o cliente delay (1); } // pabaigos kilpa

14 veiksmas: „ParserData“

ParserData
ParserData

Iš užklausos ieškome duomenų, susijusių su relėmis. Tada siunčiame duomenis į MCP23016.

// a partir da requisição busca os dados referente aos relésvoid parserData (Styginių duomenys) {uint8_t relė = -1; uint8_t gp = -1; uint8_t reikšmė = -1; int indeksas = data.indexOf ("/MR"); // busca o index do prefixo MR if (data [indeksas+5] == '/') ///MR01/1, onde 0 = GP; 1 = RELE; 1 = ESTADO (įjungta/išjungta) {gp = duomenys [indeksas+3]-'0'; relė = duomenys [indeksas+4]-'0'; vertė = duomenys [indeksas+6]-'0'; // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (relė-1, vertė, gp); }}

15 veiksmas: „ConfigurePort“

Mes nustatome GPIO kaiščio režimą (GP0 arba GP1).

// konfigūracija arba modo dos pinos GPIO (GP0 arba GP1) // bendri parametrai passamos: // prievadas: GP0 ou GP1 // Įvestis, kaip viskas, kaip portas do GP trabalharem como entrada // OUTPUT para todos as portas do GP trabalharem como saida // custom um valor de 0-255 indicando o modo das portas (1 = INPUT, 0 = OUTPUT) // pvz: 0x01 ou B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entrada, o restante como saida void configurePort (uint8_t prievadas, uint8_t pasirinktinis) {if (custom == INPUT) {writeBlockData (prievadas, 0xFF); } else if (custom == OUTPUT) {writeBlockData (prievadas, 0x00); } else {writeBlockData (prievadas, pasirinktinis); }}

16 žingsnis: „WritePinData“

Šioje kodo dalyje keičiame norimo kaiščio būseną ir siunčiame duomenis į MCP.

// muda o estado de um pino desejado, passando como parametro: // pin = pino desejado; vertė = 0/1 (įjungta/išjungta); gp = 0/1 (PORT do MCP) void writePinData (int pin, int value, uint8_t gp) {uint8_t statusGP = 0; if (gp == GP0) statusGP = currentValueGP0; else statusGP = currentValueGP1; if (vertė == 0) {statusGP & = ~ (B00000001 << (kaištis)); // muda o pino para LOW} else if (vertė == 1) {statusGP | = (B00000001 << (kaištis)); // muda o pino para HIGH} if (gp == GP0) currentValueGP0 = statusGP; else currentValueGP1 = statusGP; // envia os dados para arba MCP writeBlockData (gp, statusGP); vėlavimas (10); }

17 veiksmas: „WriteBlockData“ir „SetupWiFi“

Čia mes siunčiame duomenis į MCP23016 per „i2c“magistralę. Tada sukonfigūruojame ypatybes, kad įjungtumėte prieigos tašką. Galiausiai sukonfigūravome „WiFi“prieigos taško režimui ir sukūrėme AP su SSID ir PASSWORD.

// envia dados para o MCP23016 através do barramento i2c // reg: REGISTRADOR // duomenys: dados (0-255) void writeBlockData (uint8_t prievadas, uint8_t duomenys) {Wire.beginTransmission (MCPAddress); Wire.write (prievadas); Wire.write (duomenys); Wire.endTransmission (); vėlavimas (10); }

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

18 veiksmas: programa

App
App
App
App
App
App
App
App

Norėdami sukurti programą, naudojame „MIT App Inventor 2“, kurią galima pasiekti per nuorodą:

ai2.appinventor.mit.edu/

Programą sudaro du ekranai, kuriuose kiekvienoje yra aštuonios mygtukų poros, nurodančios kiekvienos relės būseną.

Toliau pateikiami kai kurie naudojami programavimo blokai:

SVARBU: numatytasis ESP IP adresas, nes prieigos taškas yra 192.168.4.1

1. Kai ekranas inicijuojamas, mes išsaugome IP atmintyje ir iškviečiame procedūrą, kaip atkurti mygtukų būseną (ON / OFF).

2. Skambinkite į kitą ekraną

1. Paspaudę vienos iš relių mygtuką ON, mes padarysime vizualius mygtuko pakeitimus (žalios spalvos kaladėlės). WebViewer1. GoToUrl pateikia užklausą dėl mūsų ESP01, susiedamas MR01 / 1 duomenis URL.

2. Spustelėję vienos iš relių mygtuką OFF, mes padarysime vizualius mygtuko pakeitimus (žalios spalvos blokai). WebViewer1. GoToUrl pateikia užklausą mūsų ESP01, susiedamas MR01 / 0 duomenis URL.

Ši procedūra naudojama atkurti mygtukų (relių) būseną, nes keičiant ekraną, jis grįžta prie kūrimo modelio.

Geltonas blokas kartojasi kiekvienai mygtukų porai.

19 veiksmas: atsisiųskite

Čia galite atsisiųsti projekto failus:

„MIT App Inventor 2“projekto failas - atsisiųskite

Programos APK įdiegti „Android“- atsisiųskite

Atsisiųskite kitus failus:

PDF

AŠ NE

Rekomenduojamas: