Satura rādītājs:

Zemu izmaksu automatizācija ar ESP01: 19 soļi
Zemu izmaksu automatizācija ar ESP01: 19 soļi

Video: Zemu izmaksu automatizācija ar ESP01: 19 soļi

Video: Zemu izmaksu automatizācija ar ESP01: 19 soļi
Video: Blitzwolf BW-IS8 - Zigbee датчик температуры и влажности, подключаем в zigbee2mqtt и SLS 2024, Novembris
Anonim
Image
Image
MCP23016
MCP23016

Šodien mēs apspriedīsim automatizāciju, izmantojot ESP01 ar 16 relejiem. Šis ir īpaši lēts dizaina modelis, kurā varat pavairot moduļus un iegūt līdz 128 relejiem, jo šajā mikrokontrollerī ir iespējams ievietot līdz astoņiem portu paplašinātājiem.

Mūsu ķēdē jums būs lietojumprogramma viedtālrunī, kas sazinās ar ESP01. Tam būs paplašinātājs ar 16 portiem, katrs savienots ar releju. Mums ir arī 3v3 regulējams avots. Tāpēc mēs kontrolēsim 16 kanālu releja moduli, izmantojot ESP01, izmantojot Android lietojumprogrammu, kuru es jums darīšu pieejamu.

1. solis: padoms, kas jāatceras

Mani draugi, ir svarīgi atzīmēt, ka es izmantoju šo mikroshēmu ķēdē ar nosaukumu MCP23016. Jums arī ir svarīgi noskatīties video IOS EXPANSOR OF ESP32, ESP8266 UN ARDUINO, kurā es testēju ierīci un parādīju, ka tā darbojas šo trīs veidu dēļiem.

2. darbība: MCP23016

Šeit mums ir MCP23016 attēls, kas ir mikroshēma ar 28 tapām. Ir svarīgi pieminēt, ka ir arī modelis MCP23017, kas ir biežāk sastopams un kuram nav nepieciešams rezistors un kondensators, jo tam ir iekšējais pulkstenis. Tas padara to vieglāku, taču tā piespraude atšķiras no tā, ko mēs parādām šajā videoklipā.

3. darbība: adrese

Adrese
Adrese

Lai definētu MCP23016 adresi, mēs izmantojam tapas A0, A1 un A2. Jūs varat vienkārši atstāt tos HIGH vai LOW adreses maiņai.

Adrese tiks veidota šādi:

MCP_Address = 20 + (A2 A1 A0)

Ja A2 A1 A0 var iegūt HIGH / LOW vērtības, binārs skaitlis no 0 līdz 7.

Piemēram:

A2> GND, A1> GND, A0> GND (nozīmē 000, tad 20 + 0 = 20)

Vai citādi, A2> HIGH, A1> GND, A0> HIGH (nozīmē 101, tad 20 + 5 = 25)

4. solis: komandas

Komandas
Komandas

Šeit ir tabula ar komandām saziņai:

5. darbība. Kategorijas

GP0 / GP1 - datu portu reģistri

Ir divi reģistri, kas nodrošina piekļuvi abiem GPIO portiem.

Reģistra nolasījums nodrošina tapas statusu šajā ostā.

Bits = 1> HIGH Bit = 0> LOW

IODIR0 / IODIR1

Ir divi reģistri, kas kontrolē tapas režīmu. (Ievads vai izvads)

Bits = 1> IEVADES bits = 0> IZEJA

6. darbība: saziņas struktūra

Komunikācijas struktūra
Komunikācijas struktūra

Šeit mēs runājam par mikroshēmas adresi un piekļūstam komandai un datiem, kas ir sava veida protokols, kas jādara, lai nosūtītu informāciju.

7. solis: programma

Programma
Programma

Mēs izveidosim programmu, kas sastāv no ESP01 saziņas ar MCP23016, lai varētu izmantot vairāk GPIO. Šie 16 jaunie GPIO, kas mums būs, kontrolēs 16 kanālu releja moduli.

Komandas tiks nosūtītas uz ESP01, izmantojot Android lietojumprogrammu.

8. darbība: MCP23016

MCP23016
MCP23016

9. darbība: ESP-01

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

Šī ir 16 releju dēlis.

10. darbība: ESP01 uzstādīšana

Montāža ESP01
Montāža ESP01

11. darbība: bibliotēkas un mainīgie

Mēs iekļausim bibliotēkas, kas atbildīgas par i2c komunikāciju, kā arī par piekļuves punkta un tīmekļa servera izveidi. Mēs definējam mikroshēmas adresi un portus. Visbeidzot, mēs definējam mainīgos, lai saglabātu MCP tapas vērtības.

#include // responseável pela comunicação i2c. #include // responseá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 // ENDEREÇOS DE REGISTR definēt GP0 0x00 // DATU PORTU REĢISTRS 0 #define GP1 0x01 // DATU PORTU REĢISTRS 1 #define IODIR0 0x06 // I/O DIRECTION REGISTER 0 #define IODIR1 0x07 // I/O DIRECTION REGISTER 1 // guarda os valores dos pinos vai MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

12. darbība: iestatīšana

Mēs inicializējam ESP01 un konfigurējam portus. Mēs arī konfigurējam piekļuves punktu un inicializējam serveri.

void setup () {Serial.begin (9600); kavēšanās (1000); Wire.begin (0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, OUTPUT); configurePort (IODIR1, OUTPUT); writeBlockData (GP0, 0x00); writeBlockData (GP1, 0x00); setupWiFi (); // konfigurējiet piekļuves punkta serveri.begin (); // inicializa o server}

13. darbība: cilpa

Šeit es pārbaudu, vai serverim ir pievienoti klienti. Mēs arī izlasījām pirmo pieprasījuma rindiņu. Mēs iegūstam datus manipulācijām, definējam noklusējuma atbildes galveni un nosūtām šo atbildi klientam.

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 ("nederīgs pieprasījums"); atgriešanās; } client.flush (); String s = "HTTP/1.1 200 Labi / r / n"; // cabeçalho padrão de resposta client.print (s); // envia a resposta para o cliente delay (1); } // beigu cilpa

14. darbība: ParserData

ParserData
ParserData

Pēc pieprasījuma mēs meklējam datus, kas saistīti ar relejiem. Pēc tam mēs nosūtām datus uz MCP23016.

// a partir da requisição busca os dados referente aos relésvoid parserData (String data) {uint8_t relejs = -1; uint8_t gp = -1; uint8_t vērtība = -1; int indekss = data.indexOf ("/MR"); // busca o index do prefixo MR if (data [index+5] == '/') ///MR01/1, onde 0 = GP; 1 = RELE; 1 = ESTADO (ieslēgts/izslēgts) {gp = dati [indekss+3]-'0'; relejs = dati [indekss+4]-'0'; vērtība = dati [indekss+6]-'0'; // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (relejs-1, vērtība, gp); }}

15. darbība. ConfigurePort

Mēs iestatām GPIO pin režīmu (GP0 vai GP1).

// konfigurācija vai modo dos pinos GPIO (GP0 vai GP1) // como parametro passamos: // ports: GP0 ou 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 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 ports, uint8_t pielāgots) {if (custom == INPUT) {writeBlockData (ports, 0xFF); } cits if (custom == OUTPUT) {writeBlockData (ports, 0x00); } else {writeBlockData (ports, pielāgots); }}

16. darbība. RakstietPinData

Šajā koda daļā mēs mainām vēlamās tapas stāvokli un nosūtām datus uz MCP.

// muda o estado de um pino desejado, passando como parametro: // pin = pino desejado; vērtība = 0/1 (ieslēgts/izslēgts); gp = 0/1 (PORT do MCP) void writePinData (int pin, int value, uint8_t gp) {uint8_t statusGP = 0; ja (gp == GP0) statusGP = currentValueGP0; cits statusGP = currentValueGP1; ja (vērtība == 0) {statusGP & = ~ (B00000001 << (pin)); // muda o pino para LOW} else if (vērtība == 1) {statusGP | = (B00000001 << (pin)); // muda o pino para HIGH} if (gp == GP0) currentValueGP0 = statusGP; cits currentValueGP1 = statusGP; // envia os dados para vai MCP writeBlockData (gp, statusGP); kavēšanās (10); }

17. darbība: WriteBlockData & SetupWiFi

Šeit mēs nosūtām datus uz MCP23016, izmantojot i2c kopni. Tālāk mēs konfigurējam rekvizītus, lai iespējotu piekļuves punktu. Visbeidzot, mēs konfigurējām WiFi piekļuves punkta režīmam un izveidojām AP ar SSID un PASSWORD.

// envia dados para o MCP23016 através do barramento i2c // reg: REGISTRADOR // dati: dados (0-255) void writeBlockData (uint8_t ports, uint8_t dati) {Wire.beginTransmission (MCPAddress); Wire.write (ports); Wire.write (dati); Wire.endTransmission (); kavēšanās (10); }

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

18. darbība: lietotne

Lietotne
Lietotne
Lietotne
Lietotne
Lietotne
Lietotne
Lietotne
Lietotne

Lai izveidotu lietojumprogrammu, mēs izmantojam MIT App Inventor 2, kuram var piekļūt, izmantojot saiti:

ai2.appinventor.mit.edu/

Lietojumprogramma sastāv no diviem ekrāniem, kuros katrā ir astoņi pogu pāri, norādot katra releja statusu.

Šeit ir daži no izmantotajiem programmēšanas blokiem:

SVARĪGI: ESP noklusējuma IP adrese, jo piekļuves punkts ir 192.168.4.1

1. Kad ekrāns tiek inicializēts, mēs saglabājam IP atmiņā un izsaucam procedūru, lai atjaunotu pogu stāvokli (ON / OFF).

2. Zvaniet uz citu ekrānu

1. Noklikšķinot uz viena no relejiem pogas IESLĒGT, mēs vizuāli mainīsim pogu (zaļie bloki). WebViewer1. GoToUrl pieprasa mūsu ESP01, saistot MR01 / 1 datus URL.

2. Noklikšķinot uz viena no relejiem pogas IZSLĒGT, mēs vizuāli mainīsim pogu (zaļie bloki). WebViewer1. GoToUrl iesniedz pieprasījumu mūsu ESP01, URL sasaistot MR01 / 0 datus.

Šo procedūru izmanto, lai atjaunotu pogu (releju) stāvokli, jo, mainot ekrānu, tas atgriežas pie izveides modeļa.

Dzeltenais bloks atkārtojas katram pogu pārim.

19. darbība: lejupielādējiet

Šeit ir lejupielādējami projekta faili:

MIT App Inventor 2 projekta fails - lejupielādēt

Lietojumprogrammas APK instalēšanai android - lejupielādēt

Lejupielādējiet citus failus:

PDF

ES NĒ

Ieteicams: