Բովանդակություն:
- Քայլ 1: Ներածություն
- Քայլ 2: Բնութագրերը
- Քայլ 3: ESP01- ը կարող է ունենալ 128 GPIO:
- Քայլ 4: MCP23016
- Քայլ 5: CLԱՄԱՈՅ
- Քայլ 6: Հասցե
- Քայլ 7: Հրամաններ
- Քայլ 8: Կատեգորիաներ
- Քայլ 9. Հաղորդակցության կառուցվածքը
- Քայլ 10: րագիր
- Քայլ 11: ESP01
- Քայլ 12: Տեղադրեք ESP01
- Քայլ 13 ՝ NodeMCU ESP-12E
- Քայլ 14. NodeMCU ESP-12E տեղադրում
- Քայլ 15. WiFi NodeMCU-32S ESP-WROOM-32
- Քայլ 16. WiFi տեղադրման հանգույց MCU-32S ESP-WROOM-32
- Քայլ 17: Գրադարաններ և փոփոխականներ
- Քայլ 18: Կարգավորում
- Քայլ 19: ConfigurePort
- Քայլ 20: WriteBlockData & CheckButton
- Քայլ 21. ReadPin & ValueFromPin
- Քայլ 22. ESP8266 ծրագիր
- Քայլ 23. ԿԱՐԵՎՈՐ
- Քայլ 24: Ֆայլեր
Video: IO Expander- ը ESP32- ի, ESP8266- ի և Arduino- ի համար. 24 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:50
Wouldանկանու՞մ եք ընդլայնել ձեր ESP32, ESP8266 կամ Arduino- ի IO- ները: Իսկ դուք մտածե՞լ եք 16 նոր GPIO- ների հնարավորության մասին, որոնք կարող են վերահսկվել I2C ավտոբուսի միջոցով: Դե, այսօր ես ձեզ կներկայացնեմ GPIO ընդլայնիչ MCP23016- ը: Բացի այդ, ես ձեզ ցույց կտամ, թե ինչպես կարելի է միկրոկոնտրոլեր հաղորդակցել MCP23016- ի հետ: Ես նաև կխոսեմ ծրագիր ստեղծելու մասին, որտեղ մենք կօգտագործենք այս միկրոկոնտրոլերի ընդամենը 2 կապում `ընդլայնողի հետ շփվելու համար: Մենք դրանք կօգտագործենք LED- ները և կոճակը վերահսկելու համար:
Քայլ 1: Ներածություն
MCP23016 սարքն ապահովում է 16 բիթ GPIO ընդլայնման համար `օգտագործելով I2C ավտոբուսը: Յուրաքանչյուր բիթ կարող է կազմաձևվել առանձին (մուտքագրում կամ ելք):
MCP23016- ը բաղկացած է բազմաթիվ 8-բիթանոց պարամետրերից `մուտքի, ելքի և բևեռայնության ընտրության համար:
Ընդարձակողները պարզ լուծում են տալիս, երբ այլ օրինակների դեպքում IO- ները անհրաժեշտ են անջատիչների, տվիչների, կոճակների և LED- ների համար:
Քայլ 2: Բնութագրերը
16 մուտքային / ելքային կապում (16 մուտքի ստանդարտ)
Արագ I2C ավտոբուսի ժամացույցի հաճախականություն (0-400 կբիթ/վրկ)
Ապարատային հասցեի երեք կապում թույլատրվում է օգտագործել մինչև ութ սարք
Ընդհատել նավահանգստի գրավման ձայնագրիչը
Բեւեռայնության հակադարձ ռեգիստր `մուտքային պորտի տվյալների բեւեռայնությունը սահմանելու համար
Համատեղելի է միկրոկոնտրոլերների մեծամասնության հետ
Քայլ 3: ESP01- ը կարող է ունենալ 128 GPIO:
Օրինակ, որը ցույց է տալիս այս ընդլայնիչի մեծությունը, դրա օգտագործումն է ESP01- ով, որը կարող է միացվել մինչև ութ ընդլայնիչին `ընդամենը երկու IOS- ով` հասնելով 128 GPIO- ի:
Քայլ 4: MCP23016
Այստեղ մենք ունենք ընդլայնողի սխեման, որն ունի ութ բիթանոց երկու խումբ: Սա կազմում է ընդհանուր առմամբ 16 նավահանգիստ: Բացի ընդհատման քորոցից, այն ունի CLK քորոց, որը միացնում է կոնդենսատորն ու ռեզիստորը, որոնք ներքինորեն կապված են տրամաբանական նավահանգստում: Սա պետք է ձևավորի ժամացույց ՝ օգտագործելով բյուրեղային տատանման գաղափարը, որին անհրաժեշտ է 1 ՄՀց ժամացույց: TP կապը օգտագործվում է ժամացույցը չափելու համար: A0, A1 և A2 կապերը երկուական հասցեներ են:
Քայլ 5: CLԱՄԱՈՅ
Հետևաբար, MCP23016- ը օգտագործում է արտաքին RC միացում `ներքին ժամացույցի արագությունը որոշելու համար: Սարքի ճիշտ աշխատանքի համար պահանջվում է (սովորաբար) 1 ՄՀց ներքին ժամացույց: Ներքին ժամացույցը կարելի է չափել TP կապում: REXT- ի և CEXT- ի համար առաջարկվող արժեքները ներկայացված են ստորև:
Քայլ 6: Հասցե
MCP23016 հասցեն որոշելու համար մենք օգտագործում ենք A0, A1 և A2 կապում: Պարզապես դրանք թողեք HIGH կամ LOW հասցեների փոփոխության համար:
Հասցեն կձևավորվի հետևյալ կերպ.
MCP_ Հասցե = 20+ (A0 A1 A2)
Այն դեպքում, երբ A0 A1 A2- ը կարող է վերցնել HIGH / LOW արժեքներ, սա 0 -ից 7 -ի երկուական թիվ է կազմում:
Օրինակ:
A0> GND, A1> GND, A2> GND (նշանակում է 000, ապա 20 + 0 = 20)
Այլապես, A0> HIGH, A1> GND, A2> HIGH (նկատի ունի 101, ապա 20 + 5 = 25)
Քայլ 7: Հրամաններ
Ստորև բերված է աղյուսակ `հաղորդակցության հրամանների հետ: Եկեք օգտագործենք GP0 և GP1, ինչպես նաև IODIR0 և IODIR1:
Քայլ 8: Կատեգորիաներ
GP0 / GP1 - Տվյալների նավահանգստի գրանցամատյաններ
Կան երկու գրանցամատյաններ, որոնք ապահովում են մուտքը GPIO երկու նավահանգիստներին:
Գրանցիչի ընթերցումը ապահովում է այդ նավահանգստի կապերի կարգավիճակը:
Bit = 1> HIGH Bit = 0> LOW
OLAT0 / OLAT1 - ելքային LACTCH REGISTERS
Կան երկու գրանցամատյաններ, որոնք ապահովում են մուտքը երկու նավահանգիստների ելքային նավահանգիստներին:
IPOL0 / IPOL1 - մուտքային բևեռայնության գրանցամատյաններ
Այս գրանցամատյանները թույլ են տալիս օգտագործողին կարգավորել մուտքային պորտի տվյալների բևեռականությունը (GP0 և GP1):
IODIR0 / IODIR1
Կան երկու գրանցամատյաններ, որոնք վերահսկում են քորոցային ռեժիմը: (Մուտք կամ ելք)
Բիթ = 1> Մուտք Bit = 0> Ելք
INTCAP0 / INTCAP1 - Ընդհատել գրանցման գրանցամատյանները
Սրանք գրանցամատյաններ են, որոնք պարունակում են այն պորտի արժեքը, որն առաջացրել է ընդհատումը:
IOCON0 / IOCON1 - I / O Expander Control Register
Սա վերահսկում է MCP23016- ի ֆունկցիոնալությունը:
0 բիթ (IARES> ընդհատել գործունեության լուծում) կարգավորումը վերահսկում է GP պորտի կապում նմուշառման հաճախականությունը:
Bit0 = 0> (կանխադրված) Պորտի գործունեության հայտնաբերման առավելագույն ժամանակը 32 մ է (ցածր էներգիայի սպառում)
Bit0 = 1> նավահանգստում գործունեության հայտնաբերման առավելագույն ժամանակը 200usec է (ավելի մեծ էներգիայի սպառում)
Քայլ 9. Հաղորդակցության կառուցվածքը
Ես այստեղ ցույց եմ տալիս Wire դասը, որը մեր հիմնական Arduino- ի I2C հաղորդակցությունն է, որը նաև թույլ է տալիս ընդլայնողին աշխատել Arduino Uno- ի և Mega- ի հետ: Այնուամենայնիվ, վերջինս արդեն ունի մի քանի IO: Մենք այստեղ զբաղվում ենք չիպի հասցեներով, մուտքի վերահսկմամբ, որոնք գրանցամատյանների կոդերն են, ինչպես նաև տվյալները:
Քայլ 10: րագիր
Մեր ծրագիրը բաղկացած է ESP32- ի MCP23016- ի հետ հաղորդակցվելուց `ավելի շատ GPIO- ներ օգտագործելու համար: Այնուհետև մենք կունենանք կոճակ և մի քանի LED լուսարձակներ `միացված MCP23016- ին: Մենք վերահսկելու ենք դրանք բոլորը ՝ օգտագործելով միայն I2C ավտոբուսը: Այսպիսով, կօգտագործվի միայն երկու ESP32 կապում: Տեսանյութում կարող եք տեսնել ստորև նկարված սխեման:
Քայլ 11: ESP01
Այստեղ ես ցույց եմ տալիս ESP01- ի Pinout- ը:
Քայլ 12: Տեղադրեք ESP01
Այս օրինակում մենք ունենք GPIO0- ը միացված SDA- ում, իսկ GPIO2- ը `SCL- ում: Մենք ունենք նաև ռելեի տախտակ, ազդանշան և LED: Մյուս նավահանգստում, GP1.0- ում, մենք ունենք ևս մեկ LED `դիմադրիչով:
Քայլ 13 ՝ NodeMCU ESP-12E
Այստեղ մենք ունենք NodeMCU ESP-12E- ի Pinout- ը:
Քայլ 14. NodeMCU ESP-12E տեղադրում
Այս դեպքում միակ տարբերությունը առաջին օրինակից այն է, որ դուք համապատասխանաբար միացրել եք D1 և D2 SDA- ին և SCL- ին:
Քայլ 15. WiFi NodeMCU-32S ESP-WROOM-32
Ահա WiFi NodeMCU-32S ESP-WROOM-32- ի Pinout- ը:
Քայլ 16. WiFi տեղադրման հանգույց MCU-32S ESP-WROOM-32
Այս անգամ մյուս երկու օրինակներից հիմնական տարբերությունը կոճակն է, և թարթող երեք LED- ները: Այստեղ SDA- ն միացված է GPIO19- ին, իսկ SCL- ը ՝ GPIO23- ին:
Քայլ 17: Գրադարաններ և փոփոխականներ
Նախ, մենք կներառենք Wire.h- ն, որը պատասխանատու է i2c հաղորդակցության համար, ինչպես նաև MCP23016- ի i2c հասցեն սահմանելու համար: Ես ցույց եմ տալիս մի քանի հրամաններ, նույնիսկ որոշները, որոնք մենք չենք օգտագործում այս նախագծում:
#include // նշեք Wire.h գրադարանի օգտագործումը: // endereço I2C do MCP23016 #define MCPAddress 0x20 // ԳՐԱՆՎԵԼ ՀԱՐԱԲԵՐՈԹՅՈՆԸ ՊԱՏՎԻՐ. Աղյուսակ. 1-3 Microchip MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #define GP0 0x0 // DATA PORT 0X0 // DATA PORT ՊՈՐՏԻ ԳՐԱՆՈՄ 1 #սահմանել OLAT0 0x02 // Ելք LATCH REGISTER 0 #սահմանել OLAT1 0x03 // OUTPUT LATCH REGISTER 1 #սահմանել IPOL0 0x04 // INPUT POLARITY PORT REGISTER 0 #define IPOL1 0x05 // INPTER 0 0 /I/O DIRECTION REGISTER 0 #սահմանել IODIR1 0x07 // I/O DIRECTION REGISTER 1 #սահմանել INTCAP0 0x08 // INTERRUPT CAPTURE REGISTER 0 #define INTCAP1 0x09 // INTERRUPT CAPTURE REGISTER 1 #IGO ԳՐԱՆISՎԵԼ 0 #սահմանել IOCON1 0x0B // I/O EXPANDER CONTROL REGISTER 1
Քայլ 18: Կարգավորում
Այստեղ մենք ունենք չորս տարբեր տեսակի միկրոկառավարիչների նախաստորագրման գործառույթներ: Մենք նաև ստուգում ենք հաճախականությունը, կարգավորում ենք GPIO- ները և տեղադրում կապում: Loop- ում մենք ստուգում ենք կոճակի կարգավիճակը:
void setup () {Serial.begin (9600); ուշացում (1000); Wire.begin (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frequencia // configura o GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // կազմաձևում GPIO1 մուտքով կամ GP1.0 և ելքով GP1- ից դուրս GP1 configurePort (IODIR1, 0x01); // seta todos os pinos do GPIO0 comO LOW writeBlockData (GP0, B00000000); // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000000); } void loop () {// verifica e o botão GP foi pressionado checkButton (GP1); } // ավարտի հանգույց
Քայլ 19: ConfigurePort
Այս քայլում մենք կարգավորում ենք GPIO կապումների ռեժիմը և որոշում նավահանգիստների ռեժիմը:
// configura o GPIO (GP0 ou GP1) // como parametro passamos: // port: GP0 ou GP1 // custom: 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) // օր. uint8_t նավահանգիստ, uint8_t մաքսային) {if (custom == INPUT) {writeBlockData (port, 0xFF); } else if (custom == OUTPUT) {writeBlockData (նավահանգիստ, 0x00); } else {writeBlockData (նավահանգիստ, հարմարեցված); }}
Քայլ 20: WriteBlockData & CheckButton
Այստեղ մենք տվյալներ ենք ուղարկում MCP23016 i2c ավտոբուսի միջոցով, ստուգում ենք կոճակի կարգավիճակը և նշում հաջորդ քայլը ՝ հաշվի առնելով սեղմված կամ չսեղմված լինելու վիճակը:
// envia dados para o MCP23016 através do barramento i2c // cmd: COMANDO (registrador) // data: dados (0-255) void writeBlockData (uint8_t cmd, uint8_t data) {Wire.beginTransmission (MCPAddress); Wire.write (cmd); Wire.write (տվյալներ); Wire.endTransmission (); ուշացում (10); }
// verifica se o botão foi pressionado // parametro GP: GP0 ou GP1 void checkButton (uint8_t GP) {// faz a leitura do pino 0 no GP fornecido uint8_t btn = readPin (0, GP); // se botão pressionado, սահմանել HIGH որպես portas GP0 if (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW else {writeBlockData (GP0, B00000000); }}
Քայլ 21. ReadPin & ValueFromPin
Այստեղ մենք զբաղվում ենք որոշակի քորոցի ընթերցմամբ և բիթային արժեքի ցանկալի դիրքի վերադարձով:
// faz a leitura de um pino específico // pin: pino desejado (0-7) // gp: GP0 ou GP1 // retorno: 0 ou 1 uint8_t readPin (uint8_t pin, uint8_t gp) {uint8_t կարգավիճակ GP = 0; Wire.beginTransmission (MCPAddress); Wire.write (gp); Wire.endTransmission (); Մետաղալար. Խնդրում ենք (MCPA հասցե, 1); // ler do chip 1 բայթ statusGP = Wire.read (); վերադարձի արժեքըFromPin (pin, statusGP); } // retorna o valor do bit na posição desejada // pin: posição do bit (0-7) // statusGP: valor lido do GP (0-255) uint8_t valueFromPin (uint8_t pin, uint8_t statusGP) {return (statusGP & (0x0001 << քորոց]) == 0? 0: 1; }
Քայլ 22. ESP8266 ծրագիր
Այստեղից մենք կտեսնենք, թե ինչպես է ստեղծվել այն ծրագիրը, որը մենք օգտագործել էինք ESP-01- ում և nCMUU ESP-12E- ում, ինչը թույլ է տալիս հասկանալ, թե որքանով են դրանց միջև եղած տարբերությունները նվազագույն:
Մենք միայն կփոխենք i2c կապի կոնստրուկտորի գիծը, որը Wire օբյեկտի սկզբնական մեթոդն է:
Պարզապես մեկնաբանեք տողը ըստ ափսեի, որը մենք պատրաստվում ենք կազմել:
// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01
Կարգավորում
Ուշադրություն դարձրեք, որ շինարարը դեռ մեկնաբանված է: Հետևաբար, մի մեկնաբանեք ըստ ձեր տախտակի (ESP-01 կամ nodeMCU ESP12-E):
void setup () {Serial.begin (9600); ուշացում (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frequencia // configura o GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // կոնֆիգուրացիա GPIO1- ից դուրս OUTPUT (todos os pinos) configurePort (IODIR1, OUTPUT); // seta todos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000001); }
Օղակ
Օղակի մեջ մենք փոխում ենք կապում յուրաքանչյուր 1 վայրկյան: Այսպիսով, երբ GP0- ի pin0- ը միացված է, GP1- ի կապումներն անջատված են: Երբ GP1- ի pin0- ը միացված է, GP0- ի կապումներն անջատված են:
void loop () {// seta o pino 7 do GP0 como HIGH and osoais como LOW writeBlockData (GP0, B10000000); // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000000); ուշացում (1000); // seta todos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta o pino 0 GP1- ով բարձր և ցածր ժամանակներում LOW writeBlockData (GP1, B00000001); ուշացում (1000); } // ավարտի հանգույց
Քայլ 23. ԿԱՐԵՎՈՐ
Օգտագործված փոփոխականներն ու գրադարանը նույնն են, ինչ մենք արել ենք ESP32 ծրագրի համար, ինչպես նաև configurePort և writeBlockData մեթոդները:
Քայլ 24: Ֆայլեր
Ներբեռնեք ֆայլերը.
INO (ESP8266)
INO (ESP32)
Խորհուրդ ենք տալիս:
ESP32- ի մշակում Windows ենթահամակարգի համար Linux- ի համար. 7 քայլ
ESP32- ը Windows- ի ենթահամակարգի համար Linux- ի համար. ESP32- ը Espressif- ի էժան, ցածր էներգիայի միկրոկոնտրոլերային տախտակ է: Այն հանրաճանաչ է արտադրողների շրջանում `ցածր գնով և ներկառուցված ծայրամասային սարքերով, որոնք ներառում են WiFi և Bluetooth: Այնուամենայնիվ, ESP32- ի զարգացման գործիքները պահանջում են Unix- ի նման
Օգտագործեք 1 անալոգային մուտքագրում Arduino- ի համար 6 կոճակի համար. 6 քայլ
Arduino- ի համար օգտագործեք 1 անալոգային մուտք 6 կոճակի համար. Վերջերս մտքովս անցավ, որ ես պետք է կարողանամ օգտագործել անալոգային մուտքերից մեկը `բազմաթիվ թվային մուտքեր բերելու համար: Ես արագ որոնեցի և գտա, թե որտեղ են մարդիկ
3.3V Mod ուլտրաձայնային տվիչների համար (պատրաստեք HC-SR04- ը 3.3V Logic- ի համար ESP32/ESP8266, Particle Photon և այլն) ՝ 4 քայլ
3.3V Mod ուլտրաձայնային տվիչների համար (պատրաստեք HC-SR04- ը 3.3V Logic- ի համար ESP32/ESP8266, Particle Photon և այլն). լարման բաժանարար (Echo հետք -> 2.7kΩ -> Echo pin -> 4.7kΩ -> GND): Խմբագրել. Որոշ բանավեճ է ծավալվել այն մասին, թե արդյոք ESP8266- ն իրականում 5V հանդուրժող է GPIO- ում
Պարտիզանական մարտկոցի սեփականատեր ձեր սեղանի համար / Arduino նախագծերի համար. 3 քայլ
Պարտիզանական մարտկոցի սեփականատեր ձեր սեղանի համար / Arduino նախագծերի համար. Ես փորձեր եմ կատարում DS1307- ի և Arduino- ի հետ, ես պետք է միջոց գտնեի CR1212 մարտկոցը միացնելու համար: Ես մտա իմ միակցիչների տուփի մեջ և չգտա ոչինչ, որը կարող էր օգնել: Հետո, eur ê ka! Ես ունեի լուսավորություն
Ուղեցույց L298 2Amp Motor Driver Shield- ի համար Arduino- ի համար. 6 քայլ
L298 2Amp Motor Driver Shield- ը Arduino- ի համար. Նկարագրություն L298 2Amp Motor Driver Shield- ը Arduino- ի համար հիմնված է L298 շարժիչի վարորդի ինտեգրալ սխեմայի վրա, լիարժեք կամուրջի շարժիչ: Այն կարող է վարել երկու առանձին 2A DC շարժիչներ կամ 1 2A քայլ շարժիչ: Շարժիչի արագությունը և ուղղությունները կարող են վերահսկվել առանձին