Tartalomjegyzék:

IO Expander ESP32, ESP8266 és Arduino esetén: 24 lépés
IO Expander ESP32, ESP8266 és Arduino esetén: 24 lépés

Videó: IO Expander ESP32, ESP8266 és Arduino esetén: 24 lépés

Videó: IO Expander ESP32, ESP8266 és Arduino esetén: 24 lépés
Videó: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, Július
Anonim
Image
Image
Bevezetés
Bevezetés

Bővíteni szeretné az ESP32, ESP8266 vagy Arduino IO -jait? És gondolkozott már 16 új GPIO lehetőségéről, amelyeket az I2C busszal vezérelhet? Nos, ma bemutatom nektek az MCP23016 GPIO bővítőt. Ezenkívül megmutatom, hogyan kell kommunikálni egy mikrokontrollert az MCP23016 készülékkel. Arról is beszélek, hogy hozzunk létre egy programot, ahol ennek a mikrovezérlőnek csak 2 érintkezőjét használjuk a bővítővel való kommunikációhoz. Ezeket a LED -ek és a gomb vezérlésére fogjuk használni.

1. lépés: Bevezetés

Az MCP23016 eszköz 16 bitet biztosít a GPIO bővítéshez az I2C busz használatával. Minden bit egyedileg konfigurálható (bemenet vagy kimenet).

Az MCP23016 több 8 bites beállításból áll a bemenet, a kimenet és a polaritás kiválasztásához.

A bővítők egyszerű megoldást kínálnak, amikor az IO -kra többek között a kapcsolók, érzékelők, gombok és LED -ek szükségesek.

2. lépés: Jellemzők

16 bemeneti / kimeneti érintkező (16 bemeneti szabvány)

Gyors I2C busz órajel (0-400 kb/s)

Három hardvercím -tű lehetővé teszi akár nyolc eszköz használatát

A Port Capture Recorder megszakítása

Polaritás -visszafordító regiszter a bemeneti port adatok polaritásának beállításához

Kompatibilis a legtöbb mikrokontrollerrel

3. lépés: Az ESP01 128 GPIO -val rendelkezhet

Az ESP01 128 GPIO -val rendelkezhet!
Az ESP01 128 GPIO -val rendelkezhet!

Egy példa, amely megmutatja ennek a bővítőnek a nagyságát, az ESP01 használata, amely akár nyolc bővítőhöz is csatlakoztatható, csak két IOS segítségével, elérve a 128 GPIO -t.

4. lépés: MCP23016

MCP23016
MCP23016

Itt van a bővítővázlat, amely két nyolc bitből álló csoportot tartalmaz. Ez összesen 16 portot jelent. A megszakító csap mellett CLK -csap is van, amely összeköti a kondenzátort és az ellenállást, amelyek belsőleg egy logikai portba vannak csatlakoztatva. Ez az óra kialakítása, egy kristályoszcillátor ötletének felhasználásával, amelyhez 1 MHz -es óra szükséges. A TP csap az óra mérésére szolgál. Az A0, A1 és A2 érintkezők bináris címek.

5. lépés: ÓRA

ÓRA
ÓRA
ÓRA
ÓRA

Az MCP23016 ezért külső RC áramkört használ a belső óra sebességének meghatározásához. Az eszköz megfelelő működéséhez 1 MHz belső óra szükséges (általában). A belső óra a TP csapon mérhető. A REXT és a CEXT ajánlott értékei az alábbiakban láthatók.

6. lépés: Cím

Az MCP23016 címének meghatározásához az A0, A1 és A2 csapokat használjuk. Hagyja őket a HIGH vagy LOW pozícióban a címváltoztatáshoz.

A cím a következőképpen alakul:

MCP_cím = 20 + (A0 A1 A2)

Ahol A0 A1 A2 HIGH / LOW értékeket vehet fel, ez bináris számot képez 0 és 7 között.

Például:

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

Különben, A0> HIGH, A1> GND, A2> HIGH (jelentése 101, majd 20 + 5 = 25)

7. lépés: Parancsok

Parancsok
Parancsok

Az alábbiakban egy táblázat található a kommunikációs parancsokkal. Használjuk a GP0 -t és a GP1 -et, valamint az IODIR0 -t és az IODIR1 -et.

8. lépés: Kategóriák:

GP0 / GP1 - Adatport -nyilvántartók

Két regiszter biztosítja a hozzáférést a két GPIO porthoz.

A regiszter leolvasása megadja az adott porton lévő csapok állapotát.

Bit = 1> HIGH Bit = 0> LOW

OLAT0 / OLAT1 - Kimeneti LACTCH REGISZTEREK

Két regiszter biztosítja a hozzáférést a két port kimeneti portjaihoz.

IPOL0 / IPOL1 - Bemeneti polaritásregiszterek

Ezek a regiszterek lehetővé teszik a felhasználó számára a bemeneti port adatok (GP0 és GP1) polaritásának konfigurálását.

IODIR0 / IODIR1

Két regiszter szabályozza a pin módot. (Bemenet vagy kimenet)

Bit = 1> BEMENET Bit = 0> KIMENET

INTCAP0 / INTCAP1 - Megszakítási rögzítési nyilvántartások

Ezek a regiszterek tartalmazzák a megszakítást generáló port értékét.

IOCON0 / IOCON1 - I / O bővítő vezérlő regiszter

Ez vezérli az MCP23016 működését.

A 0. beállítási bit (IARES> Interrupt Activity Resolution) szabályozza a GP port csapjainak mintavételi gyakoriságát.

Bit0 = 0> (alapértelmezett) A maximális porttevékenység-észlelési idő 32 ms (alacsony fogyasztás)

Bit0 = 1> a maximális tevékenység észlelési idő a porton 200usec (nagyobb energiafogyasztás)

9. lépés: A kommunikáció felépítése

A kommunikáció szerkezete
A kommunikáció szerkezete

Mutatom itt a Wire osztályt, amely az I2C kommunikáció az alap Arduino -ban, amely lehetővé teszi a bővítő számára az Arduino Uno és a Mega együttműködését is. Ez utóbbinak azonban már több IO -ja van. Itt a chip címeivel, a hozzáférés -vezérléssel foglalkozunk, amelyek a regiszterek kódjai, valamint az adatokkal.

10. lépés: Programozás

Program
Program

Programunk az ESP32 és az MCP23016 közötti kommunikációból áll, hogy több GPIO használható legyen. Ezután egy gombot és néhány LED -et csatlakoztatunk az MCP23016 -hoz. Mindegyiket csak az I2C busz segítségével fogjuk irányítani. Így csak két ESP32 csap lesz használatban. Az alábbi képáramkört láthatja a videóban.

11. lépés: ESP01

ESP01
ESP01

Itt mutatom az ESP01 Pinout -ját.

12. lépés: Az ESP01 felszerelése

Szerelés ESP01
Szerelés ESP01

Ebben a példában a GPIO0 csatlakozik az SDA -hoz, és a GPIO2 az SCL -hez. Van egy relé tábla, egy hangjelző és egy LED is. A másik porton, a GP1.0 -ban van még egy LED, ellenállással.

13. lépés: NodeMCU ESP-12E

NodeMCU ESP-12E
NodeMCU ESP-12E

Itt van a NodeMCU ESP-12E pinoutja.

14. lépés: A NodeMCU ESP-12E felszerelése

Szerelési csomópontMCU ESP-12E
Szerelési csomópontMCU ESP-12E

Ebben az esetben az egyetlen különbség az első példához képest az, hogy a D1 -et és a D2 -t csatlakoztatta az SDA -hoz, illetve az SCL -hez.

15. lépés: WiFi NodeMCU-32S ESP-WROOM-32

WiFi csomópontMCU-32S ESP-WROOM-32
WiFi csomópontMCU-32S ESP-WROOM-32

Itt található a WiFi NodeMCU-32S ESP-WROOM-32 pinoutja.

16. lépés: WiFi szerelési csomópontMCU-32S ESP-WROOM-32

WiFi szerelési csomópontMCU-32S ESP-WROOM-32
WiFi szerelési csomópontMCU-32S ESP-WROOM-32

Ezúttal a fő különbség a másik két példától a gomb, és a három villogó LED. Itt az SDA a GPIO19 -hez, míg az SCL a GPIO23 -hoz van csatlakoztatva.

17. lépés: Könyvtárak és változók

Először is beírjuk a Wire.h -t, amely felelős az i2c kommunikációért, valamint az MCP23016 i2c -címének beállítását. Több parancsot mutatok, még néhányat is, amelyeket nem használunk ebben a projektben.

#include // adja meg a Wire.h könyvtár használatát. // endereço I2C do MCP23016 #define MCPAdd 0x20 // COMMAND BYTE TO REGISTER RELATIONSHIP: Table: 1-3 of Microchip MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #define GP0 0x00 // DATA PORT REGISTER 0 #0 PORT REGISTER 1 #define OLAT0 0x02 // OUTPUT LATCH REGISTER 0 #define OLAT1 0x03 // OUTPUT LATCH REGISTER 1 #define IPOL0 0x04 // INPUT POLARITY PORT REGISTER 0 #define IPOL1 0x05 // INPUT REGISTER /I/O DIRECTION REGISTER 0 #define IODIR1 0x07 // I/O DIRECTION REGISTER 1 #define INTCAP0 0x08 // INTERRUPT CAPTURE REGISTER 0 #define INTCAP1 0x09 // INTERRUPT CAPTURE REGISTER 1 #define IOC0 REGISZTER 0 #define IOCON1 0x0B // I/O EXPANDER CONTROL REGISTER 1

18. lépés: Beállítás

Itt négy különböző típusú mikrovezérlő inicializálására van lehetőségünk. Ellenőrizzük a gyakoriságot, beállítjuk a GPIO -kat és beállítjuk a csapokat. A ciklusban ellenőrizzük a gomb állapotát.

void setup () {Serial.begin (9600); késleltetés (1000); Wire.begin (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frekvencia // konfiguráció vagy GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // configura o GPIO1 como INPUT vagy GP1.0 és como OUTPUT os outros 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); } // vége ciklus

19. lépés: ConfigurePort

Ebben a lépésben konfiguráljuk a GPIO csapok módját és azonosítjuk a portok módját.

// konfiguráció GPIO (GP0 ou GP1) // como parametro passamos: // port: GP0 ou GP1 // egyéni: 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) // például: 0x01 ou B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entrada, o restando como saida void configurePort (uint8_t port, uint8_t custom) {if (custom == INPUT) {writeBlockData (port, 0xFF); } else if (egyéni == KIMENET) {writeBlockData (port, 0x00); } else {writeBlockData (port, egyéni); }}

20. lépés: WriteBlockData & CheckButton

Itt adatokat küldünk az MCP23016 -nak az i2c buszon keresztül, ellenőrizzük a gomb állapotát, és jelezzük a következő lépést, miközben figyelembe vesszük a lenyomást vagy sem.

// envia dados para o MCP23016 através do barramento i2c // cmd: COMANDO (regisztrátor) // adatok: dados (0-255) void writeBlockData (uint8_t cmd, uint8_t data) {Wire.beginTransmission (MCPAddress); Wire.write (cmd); Wire.write (adatok); Wire.endTransmission (); késleltetés (10); }

// verifica se o botão foi pressionado // paraméter GP: GP0 vagy 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, seta para HIGH as portas GP0 if (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW else {writeBlockData (GP0, B00000000); }}

21. lépés: ReadPin és ValueFromPin

Itt egy adott csap leolvasásával foglalkozunk, és a bitértéknek a kívánt pozícióba való visszatérésével.

// 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 statusGP = 0; Wire.beginTransmission (MCPAddress); Wire.write (gp); Wire.endTransmission (); Wire.requestFrom (MCPAddress, 1); // ler do chip 1 byte statusGP = Wire.read (); return valueFromPin (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 << pin)) == 0? 0: 1; }

22. lépés: ESP8266 program

Innen látni fogjuk, hogyan jött létre az ESP-01-ben és a nodeMCU ESP-12E-ben használt program, amely lehetővé teszi számunkra, hogy megértsük, mennyire minimálisak a különbségek közöttük.

Csak az i2c kommunikációs konstruktor vonalát fogjuk módosítani, amely a Wire objektum kezdeti módszere.

Csak vegye ki a megjegyzést a sor szerint a lemez szerint, amelyet összeállítunk.

// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01

Beállít

Vegye figyelembe, hogy az építtető továbbra is megjegyzést kapott. Ezért hagyja figyelmen kívül a táblája szerint (ESP-01 vagy nodeMCU ESP12-E).

void setup () {Serial.begin (9600); késleltetés (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frekvencia // konfiguráció vagy GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // configura o GPIO1 como 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); }

Hurok

A hurokban 1 másodpercenként cseréljük a csapokat. Így amikor a GP0 pin0 be van kapcsolva, a GP1 csapjai ki vannak kapcsolva. Ha a GP1 pin0 be van kapcsolva, a GP0 csapok ki vannak kapcsolva.

void loop () {// seta o pino 7 do GP0 como HIGH e os demais como LOW writeBlockData (GP0, B10000000); // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000000); késleltetés (1000); // seta todos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta o pino 0 do GP1 como HIGH e os demais como LOW writeBlockData (GP1, B00000001); késleltetés (1000); } // vége ciklus

23. lépés: FONTOS

A használt változók és könyvtár ugyanazok, mint az ESP32 programnál, valamint a configurePort és writeBlockData metódusoknál.

24. lépés: Fájlok

Töltse le a fájlokat:

PDF

INO (ESP8266)

INO (ESP32)

Ajánlott: