Բովանդակություն:

Costածր ծախսերի ավտոմատացում ESP01- ով `19 քայլ
Costածր ծախսերի ավտոմատացում ESP01- ով `19 քայլ

Video: Costածր ծախսերի ավտոմատացում ESP01- ով `19 քայլ

Video: Costածր ծախսերի ավտոմատացում ESP01- ով `19 քայլ
Video: Բյուջետային մեքենաներ մինչև 3000 եվրո: Մեքենաներ Լիտվայից, 2020 թվականի նոյեմբեր: 2024, Նոյեմբեր
Anonim
Image
Image
MCP23016
MCP23016

Այսօր մենք կքննարկենք ESP01- ի միջոցով ավտոմատացումը ՝ 16 ռելեով: Սա սուպեր էժան դիզայնի մոդել է, որտեղ կարող եք բազմապատկել մոդուլները և ստանալ մինչև 128 ռելե, քանի որ այս միկրոկոնտրոլերում հնարավոր է տեղադրել մինչև ութ նավահանգիստ ընդլայնիչ:

Մեր շրջագծում դուք կունենաք ծրագիր սմարթֆոնի վրա, որը շփվում է ESP01- ի հետ: Այն կունենա 16 նավահանգիստ ունեցող ընդլայնիչ, որոնցից յուրաքանչյուրը միացված է ռելեին: Մենք ունենք նաև 3v3 կարգավորելի աղբյուր: Հետևաբար, մենք վերահսկելու ենք ESP01- ի միջոցով օգտագործվող 16-ալիքային ռելեի մոդուլը ՝ Android հավելվածի միջոցով, որը ես ձեզ հասանելի եմ դարձնում:

Քայլ 1: Հիշելու հուշում

Կարևոր է նշել, ընկերներ, որ ես օգտագործել եմ այս չիպը MCP23016 կոչվող միացումում: Ձեզ համար նույնպես կարևոր է դիտել EXPANSOR OF IOS FOR ESP32, ESP8266 AND ARDUINO տեսանյութը, որում ես սարքը փորձարկում եմ և ցույց տալիս, որ այն աշխատում է այս երեք տիպի տախտակների համար:

Քայլ 2: MCP23016

Այստեղ մենք ունենք MCP23016- ի պատկերը, որը 28 կապում ունեցող չիպ է: Կարևոր է նշել, որ կա նաև MCP23017 մոդելը, որն ավելի տարածված է և չունի դիմադրության և կոնդենսատորի կարիք, քանի որ ունի ներքին ժամացույց: Սա հեշտացնում է, բայց դրա ամրացումը տարբերվում է այն բանից, ինչ մենք ցույց ենք տալիս այս տեսանյութում:

Քայլ 3: Հասցե

Հասցե
Հասցե

MCP23016 հասցեն սահմանելու համար մենք օգտագործում ենք A0, A1 և A2 կապում: Հասցեի փոփոխության համար դրանք կարող եք թողնել HIGH կամ LOW- ում:

Հասցեն կձևավորվի հետևյալ կերպ.

MCP_ Հասցե = 20+ (A2 A1 A0)

Այն դեպքում, երբ A2 A1 A0- ն կարող է վերցնել HIGH / LOW արժեքներ, երկուական թիվ ՝ 0 -ից 7 ձև:

Օրինակ:

A2> GND, A1> GND, A0> GND (նշանակում է 000, ապա 20 + 0 = 20)

Կամ այլ կերպ, A2> HIGH, A1> GND, A0> HIGH (նշանակում է 101, ապա 20 + 5 = 25)

Քայլ 4: Հրամաններ

Հրամաններ
Հրամաններ

Ահա մի սեղան ՝ հաղորդակցության հրամանների հետ.

Քայլ 5: Կատեգորիաներ

GP0 / GP1 - Տվյալների նավահանգստի գրանցամատյաններ

Կան երկու գրանցամատյաններ, որոնք ապահովում են մուտքը GPIO երկու նավահանգիստներին:

Գրանցիչի ընթերցումը ապահովում է այդ նավահանգստի կապերի կարգավիճակը:

Bit = 1> HIGH Bit = 0> LOW

IODIR0 / IODIR1

Կան երկու գրանցամատյաններ, որոնք վերահսկում են քորոցային ռեժիմը: (Մուտք կամ ելք)

Բիթ = 1> Մուտք Bit = 0> Ելք

Քայլ 6. Հաղորդակցության կառուցվածքը

Հաղորդակցության կառուցվածքը
Հաղորդակցության կառուցվածքը

Այստեղ մենք խոսում ենք չիպի հասցեի և հրամանի և տվյալների հասանելիության մասին, ինչը մի տեսակ արձանագրություն է, որը պետք է արվի տեղեկատվություն ուղարկելու համար:

Քայլ 7: րագիր

Ծրագիրը
Ծրագիրը

Մենք կանենք ծրագիր, որը բաղկացած է ESP01- ի MCP23016- ի հետ հաղորդակցվելուց `ավելի շատ GPIO- ներ օգտագործելու համար: Այս 16 նոր GPIO- ները, որոնք մենք կունենանք, վերահսկելու են 16-ալիքային ռելեի մոդուլը:

Հրամանները ESP01- ին կուղարկվեն Android հավելվածի միջոցով:

Քայլ 8: MCP23016

MCP23016
MCP23016

Քայլ 9: ESP-01

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

Սա 16 ռելեի տախտակ է:

Քայլ 10: ESP01 տեղադրում

Մոնտաժ ESP01
Մոնտաժ ESP01

Քայլ 11: Գրադարաններ և փոփոխականներ

Մենք կներառենք i2c հաղորդակցության, ինչպես նաև Access Point և վեբ սերվեր ստեղծելու համար պատասխանատու գրադարանները: Մենք սահմանում ենք չիպի և նավահանգիստների հասցեն: Վերջապես, մենք սահմանում ենք փոփոխականները ՝ MCP կապերի արժեքները պահելու համար:

#include // responsável pela comunicação i2c. #include // responsável por criar or accesspoint eo webserver WiFiServer server (80); // webserver para acessarmos através do aplicativo // endereço I2C do MCP23016 #define MCPAddress 0XOR // #ENDERE սահմանել GP0 0x00 // ՏՎՅԱԼՆԵՐԻ ՀԱՄԱԳՈՐԱԿՈ 0ԹՅՈՆ 0 #սահմանել GP1 0x01 // ՏՎՅԱԼՆԵՐԻ ՄԱՍԻՆ ԳՐԱՆՈ 1Մ 1 #սահմանել IODIR0 0x06 // I/O DIRECTION REGISTER 0 #սահմանել IODIR1 0x07 // I/O DIRECTION REGISTER 1 // guarda os valores dos pinos անել MCP uint8_t currentValueGP0 = 0; uint8_t ընթացիկԱրժեքԳՊ 1 = 0;

Քայլ 12: Կարգավորում

Մենք նախաստորագրում ենք ESP01- ը և կարգավորում նավահանգիստները: Մենք նաև կարգավորում ենք Access Point- ը և նախաստորագրում սերվերը:

void setup () {Serial.begin (9600); ուշացում (1000); Wire.begin (0, 2); // ESP01 Wire.setClock (200000); configurePort (IODIR0, OUTPUT); configurePort (IODIR1, OUTPUT); writeBlockData (GP0, 0x00); writeBlockData (GP1, 0x00); setupWiFi (); // configuração do Access Point server.begin (); // inicializa o server}

Քայլ 13: Օղակ

Այստեղ ես ստուգում եմ, արդյոք որևէ հաճախորդ միացված է սերվերին: Մենք կարդում ենք նաև հարցման առաջին տողը: Մենք արդյունահանում ենք տվյալները մանիպուլյացիայի համար, սահմանում ենք կանխադրված պատասխանի վերնագիրը և այս պատասխանը ուղարկում ենք հաճախորդին:

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 (պահանջ); // a partir da requisição extrai os dados para manipulação} else {Serial.println («անվավեր պահանջ»); վերադարձ; } client.flush (); Տող s = "HTTP/1.1 200 OK / r / n"; // cabeçalho padrão de resposta client.print (ներ); // envia a resposta para o հաճախորդների ուշացում (1); } // ավարտի հանգույց

Քայլ 14: ParserData

ParserData
ParserData

Հարցումից մենք փնտրում ենք ռելեների հետ կապված տվյալները: Այնուհետեւ մենք տվյալները ուղարկում ենք MCP23016:

// a partir da requisição busca os dados referente aos relésvoid parserData (Լարային տվյալներ) {uint8_t ռելե = -1; uint8_t gp = -1; uint8_t արժեք = -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 (միացված/անջատված) {gp = տվյալներ [ինդեքս+3]-'0'; փոխանցում = տվյալներ [ինդեքս+4]-'0'; արժեք = տվյալներ [ինդեքս+6]-'0'; // envia os dados para o MCP23016 // [ռելե -1] porque o MCP vai de 0-7 os pinos writePinData (ռելե -1, արժեք, gp); }}

Քայլ 15: ConfigurePort

Մենք սահմանում ենք GPIO կապի ռեժիմը (GP0 կամ GP1):

// configura 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 // 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, or restante como saida void configurePort (uint8_t նավահանգիստ, uint8_t մաքսային) {if (custom == INPUT) {writeBlockData (port, 0xFF); } else if (custom == OUTPUT) {writeBlockData (նավահանգիստ, 0x00); } else {writeBlockData (նավահանգիստ, հարմարեցված); }}

Քայլ 16: WritePinData

Կոդի այս հատվածում մենք փոխում ենք ցանկալի քորոցի վիճակը և տվյալները ուղարկում MCP:

// muda o estado de um pino desejado, passando como parametro: // pin = pino desejado; արժեքը = 0/1 (միացված/անջատված); gp = 0/1 (PORT do MCP) void writePinData (int pin, int value, uint8_t gp) {uint8_t կարգավիճակ GP = 0; եթե (gp == GP0) կարգավիճակը GP = ընթացիկԱրժեքը GP0; այլ կարգավիճակ GP = currentValueGP1; եթե (արժեքը == 0) {statusGP & = ~ (B00000001 << (քորոց)); // muda o pino para LOW} այլ դեպքում, եթե (արժեքը == 1) {statusGP | = (B00000001 << (քորոց)); // muda o pino para HIGH} if (gp == GP0) currentValueGP0 = statusGP; այլ ընթացիկValueGP1 = statusGP; // envia os dados para o MCP writeBlockData (gp, statusGP); ուշացում (10); }

Քայլ 17: WriteBlockData & SetupWiFi

Այստեղ մենք տվյալներ ենք ուղարկում MCP23016 i2c ավտոբուսի միջոցով: Հաջորդը, մենք կարգավորում ենք հատկությունները `մուտքի կետը միացնելու համար: Ի վերջո, մենք կազմաձևեցինք WiFi- ի մուտքի կետի ռեժիմի համար և ստեղծեցինք APID ՝ SSID- ով և PASSWORD- ով:

// 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 (նավահանգիստ); Wire.write (տվյալներ); Wire.endTransmission (); ուշացում (10); }

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

Քայլ 18: Հավելված

Հավելված
Հավելված
Հավելված
Հավելված
Հավելված
Հավելված
Հավելված
Հավելված

Հավելվածը ստեղծելու համար մենք օգտագործում ենք MIT App Inventor 2 -ը, որին կարելի է ծանոթանալ հետևյալ հղումով.

ai2.appinventor.mit.edu/

Հավելվածը բաղկացած է երկու էկրանից, որոնցում յուրաքանչյուրը պարունակում է ութ զույգ կոճակ ՝ նշելով յուրաքանչյուր ռելեի կարգավիճակը:

Ստորև բերված են որոշ ծրագրավորման բլոկներ.

ԿԱՐԵՎՈՐ. ESP- ի կանխադրված IP հասցեն, քանի որ Մուտքի կետը 192.168.4.1 է

1. Երբ էկրանը սկզբնավորվում է, մենք պահում ենք IP- ն հիշողության մեջ և կանչում կոճակների վիճակը վերականգնելու կարգը (ON / OFF):

2. Callանգահարեք մյուս էկրանին

1. Ռելեներից մեկի ON կոճակին սեղմելիս մենք կոճակում տեսողական փոփոխություններ կկատարենք (կանաչ բլոկներ): WebViewer1. GoToUrl- ը հարցում է ներկայացնում մեր ESP01- ի համար ՝ MR01 / 1 տվյալները URL- ին կապելով:

2. Ռելեներից մեկի OFF կոճակը սեղմելիս մենք կոճակում տեսողական փոփոխություններ կկատարենք (կանաչ բլոկներ): WebViewer1. GoToUrl- ը հարցում է անում մեր ESP01- ին ՝ URL- ում կապելով MR01 / 0 տվյալները:

Այս ընթացակարգը օգտագործվում է կոճակների (ռելեներ) վիճակը վերականգնելու համար, քանի որ էկրանը փոխելիս այն վերադառնում է ստեղծման օրինակին:

Դեղին բլոկը կրկնվում է կոճակների զույգերից յուրաքանչյուրի համար:

Քայլ 19: Ներբեռնեք

Ահա նախագծի ֆայլերը ներբեռնման համար.

MIT App Inventor 2 նախագծի ֆայլ - ներբեռնում

Android հավելվածում տեղադրելու APK հավելված - ներբեռնեք

Ներբեռնեք այլ ֆայլեր.

PDF

ԻՆՈ

Խորհուրդ ենք տալիս: