Sisällysluettelo:
- Vaihe 1: Johdanto
- Vaihe 2: Ominaisuudet
- Vaihe 3: ESP01: llä voi olla 128 GPIO: ta
- Vaihe 4: MCP23016
- Vaihe 5: KELLO
- Vaihe 6: Osoite
- Vaihe 7: Komennot
- Vaihe 8: Luokat:
- Vaihe 9: Viestinnän rakenne
- Vaihe 10: Ohjelmoi
- Vaihe 11: ESP01
- Vaihe 12: ESP01: n asennus
- Vaihe 13: NodeMCU ESP-12E
- Vaihe 14: NodeMCU ESP-12E: n asennus
- Vaihe 15: WiFi-solmuMCU-32S ESP-WROOM-32
- Vaihe 16: WiFi-asennussolmuMCU-32S ESP-WROOM-32
- Vaihe 17: Kirjastot ja muuttujat
- Vaihe 18: Asennus
- Vaihe 19: ConfigurePort
- Vaihe 20: WriteBlockData & CheckButton
- Vaihe 21: ReadPin & ValueFromPin
- Vaihe 22: ESP8266 -ohjelma
- Vaihe 23: TÄRKEÄÄ
- Vaihe 24: Tiedostot
Video: IO Expander ESP32, ESP8266 ja Arduino: 24 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:03
Haluatko laajentaa ESP32: n, ESP8266: n tai Arduinon IO: ita? Oletko ajatellut mahdollisuutta 16 uudelle GPIO: lle, joita voidaan ohjata I2C -väylän avulla? Tänään esittelen sinulle GPIO -laajennuksen MCP23016. Näytän myös, kuinka voit kommunikoida mikro -ohjaimen kanssa MCP23016: n kanssa. Puhun myös sellaisen ohjelman luomisesta, jossa käytämme vain kahta tämän mikro -ohjaimen nastaa kommunikoidaksesi laajentimen kanssa. Käytämme niitä LEDien ja painikkeen ohjaamiseen.
Vaihe 1: Johdanto
MCP23016 -laite tarjoaa 16 bittiä GPIO -laajennukseen I2C -väylän avulla. Jokainen bitti voidaan konfiguroida erikseen (tulo tai lähtö).
MCP23016 sisältää useita 8-bittisiä asetuksia tulo-, lähtö- ja napaisuusvalintaa varten.
Laajennukset tarjoavat yksinkertaisen ratkaisun, kun IO: ita tarvitaan muun muassa kytkimiin, antureihin, painikkeisiin ja LED -valoihin.
Vaihe 2: Ominaisuudet
16 tulo- / lähtönastausta (16 tulovakioa)
Nopea I2C-väylän kellotaajuus (0-400 kt/s)
Kolme laitteisto -osoitetappia mahdollistaa jopa kahdeksan laitteen käytön
Keskeytä Port Capture Recorder
Napaisuuden kääntörekisteri syöttöporttitietojen napaisuuden asettamiseksi
Yhteensopiva useimpien mikro -ohjaimien kanssa
Vaihe 3: ESP01: llä voi olla 128 GPIO: ta
Esimerkki tämän laajennuksen suuruudesta on sen käyttö ESP01: n kanssa, joka voidaan liittää enintään kahdeksaan laajennukseen vain kahdella IOS: lla, saavuttaen 128 GPIO: ta.
Vaihe 4: MCP23016
Tässä meillä on kaavamainen laajennin, jossa on kaksi kahdeksan bitin ryhmää. Tämä tarkoittaa yhteensä 16 porttia. Keskeytystapin lisäksi siinä on CLK -nasta, joka yhdistää kondensaattorin ja vastuksen, jotka on kytketty sisäisesti logiikkaporttiin. Tämä muodostaa kellon käyttämällä kideoskillaattoria, joka tarvitsee 1 MHz: n kellon. TP -tappia käytetään kellon mittaamiseen. Nastat A0, A1 ja A2 ovat binääriosoitteita.
Vaihe 5: KELLO
MCP23016 käyttää siksi ulkoista RC -piiriä sisäisen kellon nopeuden määrittämiseen. Laitteen toimimiseksi vaaditaan (yleensä) 1 MHz: n sisäinen kello. Sisäinen kello voidaan mitata TP -tapista. REXT: n ja CEXT: n suositellut arvot on esitetty alla.
Vaihe 6: Osoite
MCP23016: n osoitteen määrittämiseen käytämme sitten nastoja A0, A1 ja A2. Jätä ne vain HIGH tai LOW osoitteeseen.
Osoite muodostetaan seuraavasti:
MCP_osoite = 20 + (A0 A1 A2)
Jos A0 A1 A2 voi ottaa HIGH / LOW -arvoja, tämä muodostaa binääriluvun 0-7.
Esimerkiksi:
A0> GND, A1> GND, A2> GND (tarkoittaa 000, sitten 20 + 0 = 20)
Tai muuten, A0> HIGH, A1> GND, A2> HIGH (tarkoittaa 101, sitten 20 + 5 = 25)
Vaihe 7: Komennot
Alla on taulukko kommunikointikomennoilla. Käytetään GP0 ja GP1 sekä IODIR0 ja IODIR1.
Vaihe 8: Luokat:
GP0 / GP1 - Dataportin rekisterit
On olemassa kaksi rekisteriä, jotka tarjoavat pääsyn kahteen GPIO -porttiin.
Rekisterin lukema näyttää kyseisen portin nastojen tilan.
Bitti = 1> HIGH Bit = 0> LOW
OLAT0 / OLAT1 - LACTCH -lähtörekisterit
On olemassa kaksi rekisteriä, jotka tarjoavat pääsyn kahden portin lähtöportteihin.
IPOL0 / IPOL1 - Tulojen napaisuusrekisterit
Näiden rekisterien avulla käyttäjä voi määrittää tuloporttitietojen (GP0 ja GP1) napaisuuden.
IODIR0 / IODIR1
Pin -tilaa ohjaavat kaksi rekisteriä. (Tulo tai lähtö)
Bitti = 1> TULOBitti = 0> LÄHTÖ
INTCAP0 / INTCAP1 - Keskeytä sieppausrekisterit
Nämä ovat rekistereitä, jotka sisältävät keskeytyksen tuottaneen portin arvon.
IOCON0 / IOCON1 - I / O Expander Control Register
Tämä ohjaa MCP23016 -laitteen toimintaa.
Asetusbitti 0 (IARES> Keskeytyksen toiminnan tarkkuus) ohjaa GP -portin nastojen näytteenottotaajuutta.
Bit0 = 0> (oletus) Portin aktiivisuuden enimmäisaika on 32 ms (alhainen virrankulutus)
Bit0 = 1> portin aktiivisuuden havaitsemisaika on 200 s (suurempi virrankulutus)
Vaihe 9: Viestinnän rakenne
Näytän tässä Wire -luokan, joka on Arduinon ytimen I2C -viestintä, joka mahdollistaa myös laajennuksen työskentelyn Arduino Unon ja Megan kanssa. Jälkimmäisellä on kuitenkin jo useita IO: ita. Käsittelemme täällä sirun osoitteita, kulunvalvontaa, jotka ovat rekisterien koodeja, sekä tietoja.
Vaihe 10: Ohjelmoi
Ohjelmamme koostuu ESP32: n kommunikoimisesta MCP23016: n kanssa, jotta käytettävissä olisi enemmän GPIO: ita. Meillä on sitten painike ja jotkut LEDit kytketty MCP23016: een. Hallitsemme niitä kaikkia vain I2C -väylän avulla. Näin ollen käytetään vain kahta ESP32 -nastaa. Näet alla olevan kuvapiirin videosta.
Vaihe 11: ESP01
Tässä näytän ESP01: n Pinoutin.
Vaihe 12: ESP01: n asennus
Tässä esimerkissä GPIO0 on kytketty SDA: han ja GPIO2 SCL: ään. Meillä on myös relelevy, summeri ja LED. Toisessa portissa, GP1.0, meillä on vielä yksi LED, jossa on vastus.
Vaihe 13: NodeMCU ESP-12E
Tässä meillä on NodeMCU ESP-12E: n Pinout.
Vaihe 14: NodeMCU ESP-12E: n asennus
Tässä tapauksessa ainoa ero ensimmäiseen esimerkkiin on, että olet liittänyt D1 ja D2 SDA- ja SCL -järjestelmiin.
Vaihe 15: WiFi-solmuMCU-32S ESP-WROOM-32
Tässä on WiFi-solmun pinoutMCU-32S ESP-WROOM-32.
Vaihe 16: WiFi-asennussolmuMCU-32S ESP-WROOM-32
Tällä kertaa tärkein ero muihin kahteen esimerkkiin on painike ja kolme vilkkuvaa LEDiä. Tässä SDA on kytketty GPIO19: een, kun taas SCL on kytketty GPIO23: een.
Vaihe 17: Kirjastot ja muuttujat
Ensinnäkin sisällytämme Wire.h: n, joka vastaa i2c -viestinnästä, ja asetamme MCP23016: n i2c -osoitteen. Näytän useita komentoja, jopa joitain, joita emme käytä tässä projektissa.
#include // määritä Wire.h -kirjaston käyttö. // endereço I2C do MCP23016 #define MCPAddress 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 POLP /I/O -SUUNTAREGISTERI 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 REGISTER 0 #define IOCON1 0x0B // I/O EXPANDER CONTROL REGISTER 1
Vaihe 18: Asennus
Tässä meillä on toiminnot neljän eri tyyppisen mikro -ohjaimen alustamiseen. Tarkistamme myös taajuuden, asetamme GPIO: t ja asetamme nastat. Silmukassa tarkistamme painikkeen tilan.
void setup () {Serial.begin (9600); viive (1000); Wire.begin (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // taajuus // kokoonpano tai GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // configura o GPIO1 como INPUT o GP1.0 e 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); } // lopetuslenkki
Vaihe 19: ConfigurePort
Tässä vaiheessa määritämme GPIO -nastojen tilan ja tunnistamme porttien tilan.
// konfigurointi GPIO (GP0 tai GP1) // como parametro passamos: // portti: GP0 ou GP1 // custom: INPUT for todas as portas do GP trabalharem como entrada // OUTPUT for todos as portas do GP trabalharem como saida/ / custom um valor de 0-255 indicando o modo das portas (1 = INPUT, 0 = OUTPUT) // esim: 0x01 tai B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entrada, o restando como saida void configurePort (uint8_t -portti, uint8_t mukautettu) {if (custom == INPUT) {writeBlockData (portti, 0xFF); } else if (custom == LÄHTÖ) {writeBlockData (portti, 0x00); } else {writeBlockData (portti, mukautettu); }}
Vaihe 20: WriteBlockData & CheckButton
Täällä lähetämme tietoja MCP23016: een i2c -väylän kautta, tarkistamme painikkeen tilan ja osoitamme seuraavan vaiheen ottaen samalla huomioon sen, onko sitä painettu vai ei.
// envia dados para o MCP23016 através do barramento i2c // cmd: COMANDO (rekisteröijä) // data: dados (0-255) void writeBlockData (uint8_t cmd, uint8_t data) {Wire.beginTransmission (MCPAddress); Wire.write (cmd); Wire.write (data); Wire.endTransmission (); viive (10); }
// verifica se o botão foi pressionado // parametri GP: GP0 tai 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, set para HIGH as portas GP0 if (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW else {writeBlockData (GP0, B00000000); }}
Vaihe 21: ReadPin & ValueFromPin
Käsittelemme tässä tietyn nastan lukemista ja bittiarvon palauttamista haluttuun kohtaan.
// 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 siru 1 tavu statusGP = Wire.read (); return valueFromPin (pin, statusGP); } // retorna o valor do bit na posição desejada // pin: posição bit (0-7) // statusGP: valor lido do GP (0-255) uint8_t valueFromPin (uint8_t pin, uint8_t statusGP) {return (statusGP & (0x0001 << nasta)) == 0? 0: 1; }
Vaihe 22: ESP8266 -ohjelma
Täältä näemme, kuinka ESP-01: ssä ja solmun MCU ESP-12E: ssä käyttämämme ohjelma luotiin, joten voimme ymmärtää, kuinka erot niiden välillä ovat vähäiset.
Muokkaamme vain i2c -viestintäkonstruktorin riviä, joka on Wire -objektin alkutapa.
Poista kommentti vain rivistä sen levyn mukaan, jonka aiomme koota.
// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01
Perustaa
Huomaa, että rakentajaa kommentoidaan edelleen. Älä siis kommentoi korttisi mukaan (ESP-01 tai nodeMCU ESP12-E).
void setup () {Serial.begin (9600); viive (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // taajuus // kokoonpano tai 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); }
Silmukka
Silmukassa vaihdamme tapit 1 sekunnin välein. Näin ollen, kun GP0: n nasta 0 on päällä, GP1: n nastat ovat pois päältä. Kun GP1: n pin0 on päällä, GP0 -nastat ovat pois päältä.
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); viive (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); viive (1000); } // lopetuslenkki
Vaihe 23: TÄRKEÄÄ
Käytetyt muuttujat ja kirjasto ovat samat kuin ohjelmassa, jota teimme ESP32: lle, samoin kuin configurePort- ja writeBlockData -menetelmät.
Vaihe 24: Tiedostot
Lataa tiedostot:
INO (ESP8266)
INO (ESP32)
Suositeltava:
Raspberry Pi - PCA9536 Input/output Expander Python -opetusohjelma: 4 vaihetta
Raspberry Pi-PCA9536 Tulo-/lähtölaajennin Python-opetusohjelma: PCA9536 on 8-nastainen CMOS-laite, joka tarjoaa 4 bittiä yleiskäyttöistä rinnakkaistuloa/-lähtöä (GPIO) I2C-väylä-/SMBus-sovelluksiin. Se koostuu 4-bittisestä kokoonpanorekisteristä, joka palvelee tulo- tai lähtövalintaa, 4-bittinen
ESP32 Bluetooth -opetusohjelma - ESP32: n sisäänrakennetun Bluetoothin käyttö: 5 vaihetta
ESP32 Bluetooth -opetusohjelma | ESP32: n sisäänrakennetun Bluetoothin käyttäminen: Hei kaverit Koska ESP32 -kortin mukana tulee WiFi ja amp; Bluetooth molemmilla, mutta useimmissa projekteissamme käytämme yleensä vain Wifi -yhteyttä, emme käytä Bluetoothia, joten näissä ohjeissa näytän kuinka helppoa on käyttää ESP32 & Perusprojekteihisi
ESP32 CAM -laitteen käytön aloittaminen - Videon suoratoisto ESP CAM: n avulla Wifi -yhteyden kautta - ESP32 -turvakameraprojekti: 8 vaihetta
ESP32 CAM -laitteen käytön aloittaminen | Videon suoratoisto ESP CAM: n avulla Wifi -yhteyden kautta | ESP32 -turvakameraprojekti: Tänään opimme käyttämään tätä uutta ESP32 CAM -korttia ja miten voimme koodata sen ja käyttää sitä turvakamerana ja saada suoratoistovideon wifi -yhteyden kautta
ESP32: n käytön aloittaminen - ESP32 -levyjen asentaminen Arduino IDE: hen - ESP32 vilkkuva koodi: 3 vaihetta
ESP32: n käytön aloittaminen | ESP32 -levyjen asentaminen Arduino IDE: hen | ESP32 Blink Code: Tässä ohjeessa näemme, kuinka aloittaa työskentely esp32: n kanssa ja miten asennetaan esp32 -levyt Arduino IDE: hen, ja ohjelmoimme esp 32: n suorittamaan vilkkuva koodi käyttämällä arduino ide
PCF8591 (i2c Analog I/O Expander) Nopea ja helppokäyttöinen: 9 vaihetta
PCF8591 (i2c Analog I/O Expander) Nopea ja helppokäyttöinen: Kirjasto käyttää i2c pcf8591 IC: tä arduinon ja esp8266: n kanssa. Tämä IC voi ohjata (kunnes 4) analogista tuloa ja/tai 1 analogista lähtöä, kuten mitata jännitettä, lukea termistorin arvoa tai himmentää lediä.Voi lukea analogisen arvon ja kirjoittaa analogisen arvon vain 2 johdolla