Tartalomjegyzék:
- 1. lépés: Bevezetés
- 2. lépés: Jellemzők
- 3. lépés: Az ESP01 128 GPIO -val rendelkezhet
- 4. lépés: MCP23016
- 5. lépés: ÓRA
- 6. lépés: Cím
- 7. lépés: Parancsok
- 8. lépés: Kategóriák:
- 9. lépés: A kommunikáció felépítése
- 10. lépés: Programozás
- 11. lépés: ESP01
- 12. lépés: Az ESP01 felszerelése
- 13. lépés: NodeMCU ESP-12E
- 14. lépés: A NodeMCU ESP-12E felszerelése
- 15. lépés: WiFi NodeMCU-32S ESP-WROOM-32
- 16. lépés: WiFi szerelési csomópontMCU-32S ESP-WROOM-32
- 17. lépés: Könyvtárak és változók
- 18. lépés: Beállítás
- 19. lépés: ConfigurePort
- 20. lépés: WriteBlockData & CheckButton
- 21. lépés: ReadPin és ValueFromPin
- 22. lépés: ESP8266 program
- 23. lépés: FONTOS
- 24. lépés: Fájlok
Videó: IO Expander ESP32, ESP8266 és Arduino esetén: 24 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:43
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
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
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
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
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
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
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
Itt mutatom az ESP01 Pinout -ját.
12. lépés: Az ESP01 felszerelése
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
Itt van a NodeMCU ESP-12E pinoutja.
14. lépés: A NodeMCU ESP-12E felszerelése
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
Itt található a WiFi NodeMCU-32S ESP-WROOM-32 pinoutja.
16. lépés: 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:
INO (ESP8266)
INO (ESP32)
Ajánlott:
WLED (ESP8266 esetén) + IFTTT + Google Segéd: 5 lépés
WLED (ESP8266 -on) + IFTTT + Google Segéd: Ez az oktatóanyag elsajátítja az IFTTT és a Google Assistant for WLED használatát egy ESP8266 -on. A WLED & ESP8266, kövesse ezt az útmutatót a tynickről: https: //tynick.com/blog/11-03-2019/getting-started… Kiáltson az Aircookie-hoz egy ilyen nagyszerű szoftverért
Az ESP32/VGA32 terminál használata Z80-MBC2 esetén: 7 lépés
Az ESP32/VGA32 terminál használata Z80-MBC2 esetén: Az ANSI terminál szoftver felépítése és telepítése ESP32/VGA32 kártyára. Ezután csatlakoztassa a Z80-MBC2 kártyához
LoRa 3–8 km vezeték nélküli kommunikáció alacsony költségű E32 (sx1278/sx1276) eszközzel Arduino, Esp8266 vagy Esp32 esetén: 15 lépés
LoRa 3Km -8Km vezeték nélküli kommunikáció alacsony költségű E32 (sx1278/sx1276) eszközzel Arduino, Esp8266 vagy Esp32 számára: Könyvtárat hozok létre az EBYTE E32 kezeléséhez, a LoRa eszköz Semtech sorozatán alapuló, nagyon erős, egyszerű és olcsó eszköz segítségével. 3 km -es verzió itt, 8 km -es verzió itt 3000 és 8000 m közötti távolságon dolgozhatnak, és sok funkcióval rendelkeznek
Első lépések a Python használatával ESP8266 és ESP32 esetén: 6 lépés
Kezdő lépések a Python használatával az ESP8266 és ESP32 rendszerekhez: Bacground Az ESP8266 és fiatalabb öccse, az ESP32 olcsó Wi-Fi mikrochipek, teljes TCP/IP verem és mikrovezérlő képességgel. Az ESP8266 chip először 2014 -ben került a gyártóközösség figyelmébe. Azóta az alacsony ár (
WiFi hőmérséklet naplózó (ESP8266 esetén): 11 lépés (képekkel)
WiFi hőmérséklet -naplózó (ESP8266 -mal): Üdvözlöm, örülök, hogy itt láthatom. Remélem, hogy ebben az oktatóanyagban hasznos információkat talál. Bátran küldjön nekem javaslatokat, kérdéseket, … Íme néhány alapvető adat és a projekt gyors áttekintése. Mobil felhasználóknak: Videó. Tudassa velem, hogy