Obsah:
- Krok 1: Úvod
- Krok 2: Charakteristiky
- Krok 3: ESP01 môže mať 128 GPIO
- Krok 4: MCP23016
- Krok 5: HODINY
- Krok 6: Adresa
- Krok 7: Príkazy
- Krok 8: Kategórie:
- Krok 9: Štruktúra pre komunikáciu
- Krok 10: Program
- Krok 11: ESP01
- Krok 12: Montáž ESP01
- Krok 13: NodeMCU ESP-12E
- Krok 14: Montáž NodeMCU ESP-12E
- Krok 15: WiFi NodeMCU-32S ESP-WROOM-32
- Krok 16: Pripojenie WiFi NodeMCU-32S ESP-WROOM-32
- Krok 17: Knižnice a premenné
- Krok 18: Nastavenie
- Krok 19: ConfigurePort
- Krok 20: WriteBlockData & CheckButton
- Krok 21: ReadPin a ValueFromPin
- Krok 22: Program ESP8266
- Krok 23: DÔLEŽITÉ
- Krok 24: Súbory
Video: IO Expander pre ESP32, ESP8266 a Arduino: 24 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 12:00
Chcete rozšíriť IO svojich ESP32, ESP8266 alebo Arduino? A premýšľali ste o možnosti 16 nových GPIO, ktoré je možné ovládať pomocou zbernice I2C? Dnes vám predstavím expandér GPIO MCP23016. Tiež vám ukážem, ako komunikovať mikrokontrolér s MCP23016. Tiež budem hovoriť o vytvorení programu, kde na komunikáciu s expandérom použijeme iba 2 piny tohto mikrokontroléra. Použijeme ich na ovládanie LED diód a tlačidla.
Krok 1: Úvod
Zariadenie MCP23016 poskytuje 16 bitov na rozšírenie GPIO pomocou zbernice I2C. Každý bit je možné konfigurovať jednotlivo (vstup alebo výstup).
MCP23016 pozostáva z viacerých 8-bitových nastavení pre výber vstupu, výstupu a polarity.
Expandéry poskytujú okrem iného jednoduché riešenie, keď sú IO potrebné pre spínače, senzory, tlačidlá a diódy LED.
Krok 2: Charakteristiky
16 vstupných / výstupných pinov (16 vstupných štandardov)
Vysoká hodinová frekvencia zbernice I2C (0-400 kbit/s)
Tri hardvérové adresné kolíky umožňujú použitie až ôsmich zariadení
Záznamník prerušenia portu
Register obrátenia polarity na nastavenie polarity údajov vstupného portu
Kompatibilný s väčšinou mikrokontrolérov
Krok 3: ESP01 môže mať 128 GPIO
Príkladom, ktorý ukazuje veľkosť tohto expandéra, je jeho použitie s ESP01, ktorý je možné pripojiť až k ôsmim expandérom s iba dvoma IOS, dosahujúcimi 128 GPIO.
Krok 4: MCP23016
Tu máme schému expandéra, ktorý má dve skupiny po osem bitov. Spolu je to teda 16 portov. Okrem kolíka prerušenia má pin CLK, ktorý spája kondenzátor a odpor, ktoré sú vnútorne spojené v logickom porte. Toto má vytvoriť hodiny pomocou myšlienky kryštálového oscilátora, ktorý potrebuje hodiny 1 MHz. Na meranie hodín slúži pin TP. Piny A0, A1 a A2 sú binárne adresy.
Krok 5: HODINY
MCP23016 preto používa externý RC obvod na určovanie rýchlosti vnútorných hodín. Na správnu funkciu zariadenia je potrebný (spravidla) vnútorný takt 1 MHz. Vnútorné hodiny je možné merať na kolíku TP. Odporúčané hodnoty pre REXT a CEXT sú uvedené nižšie.
Krok 6: Adresa
Na definovanie adresy MCP23016 potom použijeme piny A0, A1 a A2. Na zmenu adresy ich nechajte na HIGH alebo LOW.
Adresa bude mať nasledujúci tvar:
MCP_Address = 20 + (A0 A1 A2)
Tam, kde A0 A1 A2 môže nadobúdať VYSOKÉ / NÍZKE hodnoty, tvorí to binárne číslo od 0 do 7.
Napríklad:
A0> GND, A1> GND, A2> GND (znamená 000, potom 20 + 0 = 20)
Alebo iný, A0> VYSOKÝ, A1> GND, A2> VYSOKÝ (to znamená 101, potom 20 + 5 = 25)
Krok 7: Príkazy
Nasleduje tabuľka s príkazmi na komunikáciu. Používajme GP0 a GP1, ako aj IODIR0 a IODIR1.
Krok 8: Kategórie:
GP0 / GP1 - Registre dátových portov
Existujú dva registre, ktoré poskytujú prístup k dvom portom GPIO.
Čítanie registra poskytuje stav pinov na tomto porte.
Bit = 1> VYSOKÝ Bit = 0> NÍZKY
OLAT0 / OLAT1 - Výstup REGISTRÁTOROV LACTCH
Existujú dva registre, ktoré poskytujú prístup k výstupným portom týchto dvoch portov.
IPOL0 / IPOL1 - registre polarity vstupu
Tieto registre umožňujú užívateľovi konfigurovať polaritu údajov vstupného portu (GP0 a GP1).
IODIR0 / IODIR1
Režim pinov ovládajú dva registre. (Vstup alebo výstup)
Bit = 1> VSTUP Bit = 0> VÝSTUP
INTCAP0 / INTCAP1 - prerušenie registrov zachytávania
Ide o registre, ktoré obsahujú hodnotu portu, ktorý generoval prerušenie.
IOCON0 / IOCON1 - Riadiaci register expandéra I / O
Toto riadi funkčnosť MCP23016.
Nastavením bitu 0 (IARES> Rozlíšenie aktivity prerušenia) sa riadi vzorkovacia frekvencia pinov portu GP.
Bit0 = 0> (predvolené) Maximálna doba detekcie aktivity portu je 32 ms (nízka spotreba energie)
Bit0 = 1> maximálna doba detekcie aktivity na porte je 200usec (vyššia spotreba energie)
Krok 9: Štruktúra pre komunikáciu
Ukazujem tu triedu Wire, čo je komunikácia I2C v našom jadre Arduino, ktorá tiež umožňuje expandéru pracovať s Arduino Uno a Mega. Ten druhý však už má niekoľko IO. Zaoberáme sa tu adresami čipu, kontrolou prístupu, ktorými sú kódy registrov, ako aj údajmi.
Krok 10: Program
Náš program spočíva v komunikácii ESP32 s MCP23016, aby bolo možné použiť viac GPIO. Potom budeme mať k MCP23016 pripojené tlačidlo a niektoré diódy LED. Všetky budeme ovládať iba pomocou zbernice I2C. Budú teda použité iba dva piny ESP32. Obrazový obvod môžete vidieť nižšie vo videu.
Krok 11: ESP01
Tu uvádzam Pinout ESP01.
Krok 12: Montáž ESP01
V tomto prípade máme GPIO0 pripojený v SDA a GPIO2 zapojený v SCL. Máme tiež reléovú dosku, bzučiak a diódu LED. Na druhom porte, v GP1.0, máme ešte jednu LED s odporom.
Krok 13: NodeMCU ESP-12E
Tu máme Pinout NodeMCU ESP-12E.
Krok 14: Montáž NodeMCU ESP-12E
V tomto prípade je jediným rozdielom od prvého príkladu to, že ste prepojili D1 a D2 v SDA a SCL.
Krok 15: WiFi NodeMCU-32S ESP-WROOM-32
Tu je pinout WiFi NodeMCU-32S ESP-WROOM-32.
Krok 16: Pripojenie WiFi NodeMCU-32S ESP-WROOM-32
Tentoraz je hlavným rozdielom od ostatných dvoch príkladov tlačidlo a tri blikajúce diódy LED. Tu je SDA pripojený k GPIO19, zatiaľ čo SCL je pripojený k GPIO23.
Krok 17: Knižnice a premenné
Najprv zahrnieme Wire.h, ktorý je zodpovedný za komunikáciu i2c, a tiež nastavenie adresy i2c MCP23016. Ukazujem niekoľko príkazov, dokonca aj niektoré, ktoré v tomto projekte nepoužívame.
#include // zadajte použitie knižnice Wire.h. // 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 #define GP1 REGISTRÁCIA PORTU 1 #definovať OLAT0 0x02 // REGISTRÁCIA ZÁPADKU VÝSTUPU 0 #definovať OLAT1 0x03 // REGISTRÁCIA VÝSTUPU LATCH 1 #definovať IPOL0 0x04 // VSTUP POLARITY REGISTRÁCIA 0 #definovať IPOL1 0x05 // VSTUP POLARITY REGISTER 1 # / /REGISTRÁCIA SMEROV I/O 0 #definovať IODIR1 0x07 // REGISTRÁCIA SMEROV I/O 1 #definovať INTCAP0 0x08 // REGISTRÁCIA PRERUŠENIA ZACHYTÁVANIA 0 #definovať INTCAP1 0x09 // PRERUŠIŤ REGISTRÁCIU ZÁZNAMU 1 #definovať IOCON0 0/0 REGISTRÁCIA 0 #definovať IOCON1 0x0B // REGISTRÁCIA REGISTRÁCIE I/O EXPANDÉRA 1
Krok 18: Nastavenie
Tu máme funkcie na inicializáciu štyroch rôznych typov mikrokontrolérov. Tiež kontrolujeme frekvenciu, nastavujeme GPIO a nastavujeme piny. V slučke kontrolujeme stav tlačidla.
void setup () {Serial.begin (9600); oneskorenie (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ácia o GPIO0 como VÝSTUP (všetky osi) configurePort (IODIR0, VÝSTUP); // konfigurácia o GPIO1 como INPUT o GP1.0 e como OUTPUT os outros GP1 configurePort (IODIR1, 0x01); // seta tosos os pinos to GPIO0 como LOW writeBlockData (GP0, B00000000); // seta tosos os pinos to GPIO1 como LOW writeBlockData (GP1, B00000000); } void loop () {// overenie alebo testovanie GP pre tlač checkButton (GP1); } // koncová slučka
Krok 19: ConfigurePort
V tomto kroku nakonfigurujeme režim pinov GPIO a identifikujeme režim portov.
// konfigurácia GPIO (GP0 alebo GP1) // parametre viacerých parametrov: // port: GP0 alebo GP1 // vlastný: VSTUP pre všetky porty ako pre GP trabalharem como entrada // VÝSTUP pre všetky porty ako porty pre 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, o restando como saida void configurePort (uint8_t port, uint8_t custom) {if (custom == INPUT) {writeBlockData (port, 0xFF); } else if (custom == VÝSTUP) {writeBlockData (port, 0x00); } else {writeBlockData (port, vlastny); }}
Krok 20: WriteBlockData & CheckButton
Tu odosielame údaje na MCP23016 cez zbernicu i2c, kontrolujeme stav tlačidla a indikujeme ďalší krok, pričom vezmeme do úvahy stav stlačenia alebo nie.
// všetky údaje o MCP23016 atracé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 (údaje); Wire.endTransmission (); oneskorenie (10); }
// overenie konkrétnych tlakov // parametro GP: GP0 alebo GP1 void checkButton (uint8_t GP) {// faz a leitura do pino 0 no GP fornecido uint8_t btn = readPin (0, GP); // sa presúva, vyberajte VYSOKÉ ako porty GP0 if (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW else {writeBlockData (GP0, B00000000); }}
Krok 21: ReadPin a ValueFromPin
Tu sa zaoberáme čítaním konkrétneho kolíka a návratom bitovej hodnoty do požadovanej polohy.
// 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 (); návratová hodnotaFromPin (pin, statusGP); } // retorna or valor do bit on 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; }
Krok 22: Program ESP8266
Odtiaľto uvidíme, ako bol vytvorený program, ktorý sme použili v ESP-01 a v nodeMCU ESP-12E, čo nám umožňuje pochopiť, ako sú rozdiely medzi nimi minimálne.
Upravíme iba riadok komunikačného konštruktéra i2c, ktorý je počiatočnou metódou objektu Wire.
Stačí odkomentovať riadok podľa platne, ktorú ideme zostavovať.
// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01
Nastaviť
Všimnite si, že staviteľ je stále komentovaný. Odkomentujte preto podľa svojej dosky (ESP-01 alebo nodeMCU ESP12-E).
void setup () {Serial.begin (9600); oneskorenie (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frekvencia // konfigurácia o GPIO0 como VÝSTUP (všetky osi) configurePort (IODIR0, VÝSTUP); // konfigurácia o GPIO1 como VÝSTUP (všetky osi) configurePort (IODIR1, VÝSTUP); // seta tosos os pinos to GPIO0 como LOW writeBlockData (GP0, B00000000); // seta tosos os pinos to GPIO1 como LOW writeBlockData (GP1, B00000001); }
Slučka
V slučke prepíname piny každú 1 sekundu. Keď je teda pin0 GP0 zapnutý, kolíky GP1 sú vypnuté. Keď je pin0 modulu GP1 zapnutý, kolíky GP0 sú vypnuté.
void loop () {// seta o pino 7 do GP0 como HIGH e os demais como LOW writeBlockData (GP0, B10000000); // seta tosos os pinos to GPIO1 como LOW writeBlockData (GP1, B00000000); oneskorenie (1000); // seta tosos os pinos to GPIO0 como LOW writeBlockData (GP0, B00000000); // seta o pino 0 do GP1 como HIGH e os demais como LOW writeBlockData (GP1, B00000001); oneskorenie (1000); } // koncová slučka
Krok 23: DÔLEŽITÉ
Použité premenné a knižnica sú rovnaké ako v programe, ktorý sme urobili pre ESP32, a tiež v metódach configurePort a writeBlockData.
Krok 24: Súbory
Stiahnite si súbory:
INO (ESP8266)
INO (ESP32)
Odporúča:
Bezdrôtová komunikácia LoRa 3 km až 8 km s nízkymi nákladmi na zariadenie E32 (sx1278/sx1276) pre Arduino, Esp8266 alebo Esp32: 15 krokov
Bezdrôtová komunikácia LoRa 3 km až 8 km s nízkymi nákladmi na zariadenie E32 (sx1278/sx1276) pre Arduino, Esp8266 alebo Esp32: Vytváram knižnicu na správu EBYTE E32 na základe série zariadení LoRa Semtech, veľmi výkonného, jednoduchého a lacného zariadenia. Verzia 3 km tu, verzia 8 km tu Môžu pracovať na vzdialenosť 3 000 až 8 000 m a majú mnoho funkcií
LED indikátor vzdialenosti pre postroj pre psa: 5 krokov (s obrázkami)
LED indikátor vzdialenosti Postroj pre psa: Väčšinou beriem svojho psa Rusia na prechádzku, keď zapadá slnko, aby sa mohol hrať, kým sa príliš nezahreje. Problém je v tom, že keď je mimo vodítka, niekedy je príliš vzrušený a beží ďalej, ako by mal, a pri slabom svetle a ostatnými psami
Zaujímavé pokyny pre programovanie programovania pre návrhára-ovládanie farieb: 10 krokov
Zaujímavé pokyny pre programovanie programovania pre návrhárov-Ovládanie farieb: V predchádzajúcich kapitolách sme si povedali viac o tom, ako použiť kód na tvarovanie, a nie o znalostné body o farbe. V tejto kapitole sa pokúsime hlbšie preskúmať tento aspekt znalostí
Odpojovacia doska vhodná pre Breadboard pre ESP8266-01 s regulátorom napätia: 6 krokov (s obrázkami)
Odpojovacia doska priateľská k doske pre ESP8266-01 s regulátorom napätia: Ahoj všetci! Dúfam, že sa máš dobre. V tomto tutoriále ukážem, ako som vyrobil tento prispôsobený adaptér vhodný pre chlebové dosky pre modul ESP8266-01 so správnou reguláciou napätia a funkciami, ktoré umožňujú režim blesku ESP. Tento režim som urobil
Výukový program pre štít ovládača motora L298 2Amp pre Arduino: 6 krokov
Tutorial pre štít ovládača motora L298 2Amp pre Arduino: Popis Štítok ovládača motora L298 2Amp pre Arduino je založený na integrovanom obvode motora L298, ovládači motora s plným mostom. Môže poháňať dva samostatné 2A jednosmerné motory alebo 1 2A krokový motor. Rýchlosť a smery motora je možné ovládať samostatne