Sadržaj:
- Korak 1: Uvod
- Korak 2: Karakteristike
- Korak 3: ESP01 može imati 128 GPIO -a
- Korak 4: MCP23016
- Korak 5: SAT
- Korak 6: Adresa
- Korak 7: Naredbe
- Korak 8: Kategorije:
- Korak 9: Struktura za komunikaciju
- Korak 10: Program
- Korak 11: ESP01
- Korak 12: Montiranje ESP01
- Korak 13: NodeMCU ESP-12E
- Korak 14: Montiranje NodeMCU ESP-12E
- Korak 15: WiFi NodeMCU-32S ESP-WROOM-32
- Korak 16: WiFi čvor za montažuMCU-32S ESP-WROOM-32
- Korak 17: Knjižnice i varijable
- Korak 18: Postavljanje
- Korak 19: Konfigurirajte port
- Korak 20: WriteBlockData & CheckButton
- Korak 21: ReadPin & ValueFromPin
- Korak 22: Program ESP8266
- Korak 23: VAŽNO
- Korak 24: Datoteke
Video: IO ekspander za ESP32, ESP8266 i Arduino: 24 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
Želite li proširiti IO -ove vašeg ESP32, ESP8266 ili Arduina? Jeste li razmišljali o mogućnosti 16 novih GPIO -a koji se mogu kontrolirati pomoću I2C sabirnice? Pa danas ću vam predstaviti GPIO ekspander MCP23016. Također ću vam pokazati kako komunicirati mikrokontroler s MCP23016. Također ću govoriti o stvaranju programa u kojem ćemo koristiti samo 2 pina ovog mikrokontrolera za komunikaciju s proširivačem. Koristit ćemo ih za kontrolu LED dioda i gumba.
Korak 1: Uvod
Uređaj MCP23016 pruža 16 bita za GPIO proširenje pomoću I2C sabirnice. Svaki bit može se konfigurirati zasebno (ulaz ili izlaz).
MCP23016 sastoji se od više 8-bitnih postavki za odabir ulaza, izlaza i polariteta.
Proširivači pružaju jednostavno rješenje kada su IO -ovi potrebni za prekidače, senzore, gumbe i LED diode, među ostalim primjerima.
Korak 2: Karakteristike
16 ulaznih / izlaznih pinova (16 ulaznih standarda)
Brza frekvencija takta sabirnice I2C (0-400 kbita/s)
Tri priključka za hardversku adresu omogućuju korištenje do osam uređaja
Snimanje snimanja prekida portova
Registar za promjenu polariteta za postavljanje polariteta ulaznih podataka porta
Kompatibilan s većinom mikrokontrolera
Korak 3: ESP01 može imati 128 GPIO -a
Primjer koji pokazuje veličinu ovog proširivača je njegova upotreba s ESP01, koji se može spojiti na do osam proširivača sa samo dva IOS -a, dostižući 128 GPIO -a.
Korak 4: MCP23016
Ovdje imamo shemu proširivača koji ima dvije grupe od osam bitova. To čini ukupno 16 priključaka. Uz pin za prekid, on ima pin CLK, koji povezuje kondenzator i otpornik, koji su interno povezani u logički port. Ovo je za stvaranje sata, koristeći ideju kristalnog oscilatora, kojem je potreban takt od 1 MHz. TP pin se koristi za mjerenje sata. Igle A0, A1 i A2 su binarne adrese.
Korak 5: SAT
MCP23016 stoga koristi vanjski RC krug za određivanje brzine unutarnjeg sata. Za ispravan rad uređaja potreban je (obično) unutarnji sat od 1 MHz. Unutarnji sat može se mjeriti na TP pinu. Preporučene vrijednosti za REXT i CEXT prikazane su u nastavku.
Korak 6: Adresa
Za definiranje adrese MCP23016 tada koristimo pinove A0, A1 i A2. Za promjenu adrese ostavite ih na VISOKOM ili NISKOM.
Adresa će se formirati na sljedeći način:
MCP_Adress = 20 + (A0 A1 A2)
Tamo gdje A0 A1 A2 može poprimiti VISOKE / NISKE vrijednosti, to tvori binarni broj od 0 do 7.
Na primjer:
A0> GND, A1> GND, A2> GND (znači 000, zatim 20 + 0 = 20)
Ili drugo, A0> HIGH, A1> GND, A2> HIGH (znači 101, zatim 20 + 5 = 25)
Korak 7: Naredbe
Dolje je tablica s naredbama za komunikaciju. Koristimo GP0 i GP1, kao i IODIR0 i IODIR1.
Korak 8: Kategorije:
GP0 / GP1 - Registri portova za podatke
Postoje dva registra koji omogućuju pristup dvama GPIO priključcima.
Očitavanje registra osigurava status pinova na tom priključku.
Bit = 1> HIGH Bit = 0> LOW
OLAT0 / OLAT1 - IZLAZNI REGISTRI LACTCH
Postoje dva registra koji omogućuju pristup izlaznim portovima dvaju portova.
IPOL0 / IPOL1 - Registri ulaznih polariteta
Ti registri omogućuju korisniku da konfigurira polaritet ulaznih podataka porta (GP0 i GP1).
IODIR0 / IODIR1
Postoje dva registra koji kontroliraju pin način rada. (Ulaz ili izlaz)
Bit = 1> ULAZ Bit = 0> IZLAZ
INTCAP0 / INTCAP1 - Registri hvatanja prekida
To su registri koji sadrže vrijednost porta koji je generirao prekid.
IOCON0 / IOCON1 - Upravljački registar I / O ekspandera
Time se kontrolira funkcionalnost MCP23016.
Postavni bit 0 (IARES> Razrješenje aktivnosti prekida) kontrolira frekvenciju uzorkovanja pinova GP priključka.
Bit0 = 0> (zadano) Maksimalno vrijeme otkrivanja aktivnosti priključka je 32 ms (niska potrošnja energije)
Bit0 = 1> maksimalno vrijeme otkrivanja aktivnosti na priključku je 200usec (veća potrošnja energije)
Korak 9: Struktura za komunikaciju
Ovdje pokazujem klasu Wire, koja je I2C komunikacija u našem jezgri Arduina, koja također omogućuje proširivaču rad s Arduino Uno i Mega. Međutim, potonji već ima nekoliko IO -ova. Ovdje se bavimo adresama čipa, kontrolom pristupa, kodovima registara, kao i podacima.
Korak 10: Program
Naš program sastoji se od komuniciranja ESP32 s MCP23016 kako bi se moglo koristiti više GPIO -ova. Tada ćemo imati gumb i neke LED diode spojene na MCP23016. Kontrolirat ćemo sve njih koristeći samo I2C sabirnicu. Tako će se koristiti samo dva ESP32 pina. Krug slike možete vidjeti ispod u videu.
Korak 11: ESP01
Ovdje pokazujem ispis ESP01.
Korak 12: Montiranje ESP01
U ovom primjeru imamo GPIO0 spojen u SDA, a GPIO2 u SCL. Također imamo relejnu ploču, zujalicu i LED diodu. S druge strane, u GP1.0, imamo još jednu LED sa otpornikom.
Korak 13: NodeMCU ESP-12E
Ovdje imamo ispis NodeMCU ESP-12E.
Korak 14: Montiranje NodeMCU ESP-12E
U ovom slučaju, jedina razlika od prvog primjera je ta što ste spojili D1 i D2 u SDA odnosno SCL.
Korak 15: WiFi NodeMCU-32S ESP-WROOM-32
Ovdje je ispis WiFi NodeMCU-32S ESP-WROOM-32.
Korak 16: WiFi čvor za montažuMCU-32S ESP-WROOM-32
Ovaj put glavna razlika od druga dva primjera je gumb i tri trepereće LED diode. Ovdje je SDA spojen na GPIO19, dok je SCL spojen na GPIO23.
Korak 17: Knjižnice i varijable
Prvo ćemo uključiti Wire.h, koji je odgovoran za i2c komunikaciju, kao i postavljanje i2c adrese MCP23016. Prikazujem nekoliko naredbi, čak i neke koje ne koristimo u ovom projektu.
#include // navedite upotrebu knjižnice Wire.h. // endereço I2C do MCP23016 #define MCPAddress 0x20 // ODNOS ZAPOVJEDNOG BAJTA ZA REGISTRACIJU: Tablica: 1-3 mikročipa MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #define GP0 0x00 // REGISTAR PORT PODATAKA 0 #define GP1 0 PORT REGISTR 1 #define OLAT0 0x02 // REGISTAR IZLAZNOG ZATVORA 0 #define OLAT1 0x03 // REGISTAR IZLAZNOG ZATVORA 1 #define IPOL0 0x04 // REGISTAR ULAZNOG POLARITETA 0 #define IPOL1 0x05 // INPUT POLARITY PORT IGRE 1 /I/O REGISTAR UPRAVLJANJA 0 #define IODIR1 0x07 // REGISTAR I/O SMJERNICE 1 #define INTCAP0 0x08 // REGRETAR HVATANJA PREKIDA 0 #define INTCAP1 0x09 // REGISTRIRAJ REGISTAR HVATANJA 1 #define IOCON0 OxPA I REGISTAR 0 #define IOCON1 0x0B // UPRAVLJAČ I/O PROŠIRIVAČA REGISTAR 1
Korak 18: Postavljanje
Ovdje imamo funkcije za inicijalizaciju četiri različite vrste mikrokontrolera. Također provjeravamo frekvenciju, postavljamo GPIO -ove i postavljamo pinove. U petlji provjeravamo status gumba.
void setup () {Serial.begin (9600); kašnjenje (1000); Wire.begin (19, 23); // ESP32 // Žica.počnite (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frekvencija // konfiguracija o GPIO0 kao OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // konfiguracija o GPIO1 kao ULAZ o GP1.0 ili zajednički OUTPUT os out 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); } // završna petlja
Korak 19: Konfigurirajte port
U ovom koraku konfiguriramo način rada GPIO pinova i identificiramo način portova.
// konfiguracija 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) // 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 == OUTPUT) {writeBlockData (port, 0x00); } else {writeBlockData (port, prilagođeno); }}
Korak 20: WriteBlockData & CheckButton
Ovdje šaljemo podatke na MCP23016 putem sabirnice i2c, provjeravamo status gumba i označavamo sljedeći korak, uzimajući u obzir stanje pritiska ili ne.
// 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 (podaci); Wire.endTransmission (); kašnjenje (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, seta para HIGH kao portas GP0 if (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW else {writeBlockData (GP0, B00000000); }}
Korak 21: ReadPin & ValueFromPin
Ovdje se bavimo očitanjem određenog pina i vraćanjem vrijednosti bita u željeni položaj.
// 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 hrabrosti do bita 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; }
Korak 22: Program ESP8266
Odavde ćemo vidjeti kako je nastao program koji smo koristili u ESP-01 i u čvoru MCU ESP-12E, što nam omogućuje da shvatimo kako su razlike među njima minimalne.
Promijenit ćemo samo liniju komunikacijskog konstruktora i2c, što je metoda početka objekta Wire.
Samo komentirajte redak prema ploči koju ćemo sastaviti.
// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01
Postaviti
Uočite da se graditelj još uvijek komentira. Stoga, uklonite komentar u skladu sa svojom pločom (ESP-01 ili nodeMCU ESP12-E).
void setup () {Serial.begin (9600); kašnjenje (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frekvencija // konfiguracija o GPIO0 kao OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // konfiguracija o GPIO1 kao 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); }
Petlja
U petlji mijenjamo pinove svake 1 sekunde. Dakle, kada je pin0 GP0 uključen, pinovi GP1 su isključeni. Kad je pin0 GP1 uključen, GP0 pinovi su isključeni.
void loop () {// seta o pino 7 do GP0 kao HIGH e os demais como LOW writeBlockData (GP0, B10000000); // seta todos os pinos do GPIO1 como LOW writeBlockData (GP1, B00000000); kašnjenje (1000); // seta todos os pinos do GPIO0 como LOW writeBlockData (GP0, B00000000); // seta o pino 0 do GP1 kao HIGH e os demais como LOW writeBlockData (GP1, B00000001); kašnjenje (1000); } // završna petlja
Korak 23: VAŽNO
Varijable i knjižnica koje se koriste iste su kao u programu koji smo radili za ESP32, kao i metode configurePort i writeBlockData.
Korak 24: Datoteke
Preuzmite datoteke:
INO (ESP8266)
INO (ESP32)
Preporučeni:
LoRa bežična komunikacija od 3 do 8 km s niskim troškovima E32 (sx1278/sx1276) uređaj za Arduino, Esp8266 ili Esp32: 15 koraka
LoRa bežična komunikacija od 3 km do 8 km s niskim troškovima E32 (sx1278/sx1276) Uređaj za Arduino, Esp8266 ili Esp32: Stvaram knjižnicu za upravljanje EBYTE E32 na temelju Semtech serije LoRa uređaja, vrlo snažan, jednostavan i jeftin uređaj. Možete pronaći Ovdje je verzija od 3 km, verzija od 8 kilometara Ovdje mogu raditi na udaljenostima od 3000 do 8000 metara, a imaju mnogo mogućnosti i
ESP32 Bluetooth vodič - Kako koristiti ugrađeni Bluetooth od ESP32: 5 koraka
ESP32 Bluetooth vodič | Kako koristiti ugrađeni Bluetooth od ESP32: Bok dečki Budući da ploča ESP32 dolazi s WiFi & Bluetooth oboje, ali za većinu naših projekata obično koristimo samo Wifi, ne koristimo Bluetooth. Pa ću u ovim uputama pokazati koliko je jednostavno koristiti Bluetooth ESP32 & Za vaše osnovne projekte
Početak rada s ESP32 CAM - Streaming videa putem ESP CAM -a putem Wi -Fi -ja. Projekt sigurnosne kamere ESP32: 8 koraka
Početak rada s ESP32 CAM | Streaming videa putem ESP CAM -a putem Wi -Fi -ja. Projekt sigurnosne kamere ESP32: Danas ćemo naučiti kako koristiti ovu novu ESP32 CAM ploču i kako je možemo kodirati i koristiti kao sigurnosnu kameru te dobiti streaming video putem WiFi -ja
Početak rada s ESP32 - Instaliranje ESP32 ploča u Arduino IDE - ESP32 Blink Code: 3 koraka
Početak rada s ESP32 | Instaliranje ESP32 ploča u Arduino IDE | ESP32 Blink Code: U ovom uputstvu vidjet ćemo kako započeti rad s esp32 i kako instalirati esp32 ploče u Arduino IDE i programirat ćemo esp 32 da pokrene blink kod pomoću arduino ide
PCF8591 (i2c analogni I/O ekspander) Brzo i jednostavno korištenje: 9 koraka
PCF8591 (i2c Analog I/O Expander) Brzo i jednostavno korištenje: Knjižnica za korištenje i2c pcf8591 IC sa arduinom i esp8266. Ovaj IC može upravljati (do 4) analognim ulazom i/ili 1 analognim izlazom poput mjernog napona, očitavati vrijednost termistora ili blijediti LED. Može čitati analognu vrijednost i pisati analognu vrijednost sa samo 2 žice (perfek