Kazalo:
- 1. korak: Uvod
- 2. korak: Značilnosti
- Korak: ESP01 ima lahko 128 GPIO -jev
- 4. korak: MCP23016
- 5. korak: URA
- 6. korak: Naslov
- 7. korak: Ukazi
- 8. korak: Kategorije:
- 9. korak: Struktura komunikacije
- 10. korak: Program
- 11. korak: ESP01
- Korak: Namestitev ESP01
- Korak: NodeMCU ESP-12E
- Korak 14: Montaža vozliščaMCU ESP-12E
- Korak 15: WiFi NodeMCU-32S ESP-WROOM-32
- Korak: Node za namestitev WiFiMCU-32S ESP-WROOM-32
- 17. korak: Knjižnice in spremenljivke
- 18. korak: Nastavitev
- 19. korak: ConfigurePort
- 20. korak: WriteBlockData & CheckButton
- 21. korak: ReadPin & ValueFromPin
- Korak: Program ESP8266
- 23. korak: POMEMBNO
- Korak: Datoteke
Video: IO Expander za ESP32, ESP8266 in Arduino: 24 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:07
Ali želite razširiti število IO -jev vašega ESP32, ESP8266 ali Arduino? Ali ste razmišljali o možnosti 16 novih GPIO -jev, ki jih je mogoče nadzorovati z vodilom I2C? No, danes vam bom predstavil razširjevalnik GPIO MCP23016. Pokazal vam bom tudi, kako komunicirati z mikrokrmilnikom z MCP23016. Govoril bom tudi o ustvarjanju programa, v katerem bomo za komunikacijo z razširjevalnikom uporabili le 2 zatiča tega mikrokrmilnika. Te bomo uporabili za nadzor LED in gumba.
1. korak: Uvod
Naprava MCP23016 ponuja 16 bitov za razširitev GPIO z vodilom I2C. Vsak bit je mogoče konfigurirati posamično (vhodni ali izhodni).
MCP23016 je sestavljen iz več 8-bitnih nastavitev za izbiro vhoda, izhoda in polarnosti.
Razširjevalniki med drugimi primeri ponujajo preprosto rešitev, kadar so IO potrebni za stikala, senzorje, gumbe in LED.
2. korak: Značilnosti
16 vhodnih / izhodnih zatičev (16 vhodnih standardov)
Hitra taktna frekvenca vodila I2C (0-400 kbit/s)
Trije strojni zatiči za naslov omogočajo uporabo do osmih naprav
Snemalnik prestrezanja vrat
Register za obračanje polaritete za nastavitev polarnosti podatkov vhodnih vrat
Združljiv z večino mikrokrmilnikov
Korak: ESP01 ima lahko 128 GPIO -jev
Primer, ki kaže obseg tega razširjevalnika, je njegova uporaba z ESP01, ki ga je mogoče povezati z do osmimi razširitvami s samo dvema IOS -oma in doseči 128 GPIO.
4. korak: MCP23016
Tukaj imamo shemo razširitelja, ki ima dve skupini po osem bitov. To pomeni skupaj 16 vrat. Poleg prekinitvenega zatiča ima pin CLK, ki povezuje kondenzator in upor, ki sta notranje povezana v logična vrata. To naj bi ustvarilo uro z idejo kristalnega oscilatorja, ki potrebuje uro 1MHz. Pin TP se uporablja za merjenje ure. Zatiči A0, A1 in A2 so binarni naslovi.
5. korak: URA
MCP23016 zato uporablja zunanje RC vezje za določanje hitrosti notranje ure. Za pravilno delovanje naprave je potrebna (običajno) notranja ura 1 MHz. Notranjo uro lahko merite na zatiču TP. Priporočene vrednosti za REXT in CEXT so prikazane spodaj.
6. korak: Naslov
Za določitev naslova MCP23016 uporabimo zatiče A0, A1 in A2. Za spremembo naslova jih pustite na HIGH ali LOW.
Naslov bo oblikovan na naslednji način:
Naslov MCP_20 = 20 + (A0 A1 A2)
Kjer lahko A0 A1 A2 sprejme vrednosti VISOKO / NIZKO, to tvori binarno število od 0 do 7.
Na primer:
A0> GND, A1> GND, A2> GND (pomeni 000, nato 20 + 0 = 20)
Sicer, A0> HIGH, A1> GND, A2> HIGH (pomeni 101, nato 20 + 5 = 25)
7. korak: Ukazi
Spodaj je tabela z ukazi za komunikacijo. Uporabimo GP0 in GP1 ter IODIR0 in IODIR1.
8. korak: Kategorije:
GP0 / GP1 - Registri podatkovnih vrat
Obstajata dva registra, ki omogočata dostop do dveh vrat GPIO.
Odčitavanje registra prikazuje stanje zatičev na teh vratih.
Bit = 1> HIGH Bit = 0> LOW
OLAT0 / OLAT1 - IZHODNI REGISTRI LACTCH
Obstajata dva registra, ki omogočata dostop do izhodnih vrat obeh vrat.
IPOL0 / IPOL1 - Registri vhodnih polaritet
Ti registri omogočajo uporabniku, da konfigurira polarnost podatkov vhodnih vrat (GP0 in GP1).
IODIR0 / IODIR1
Obstajata dva registra, ki upravljata način pin. (Vhod ali izhod)
Bit = 1> INPUT Bit = 0> OUTPUT
INTCAP0 / INTCAP1 - Registri zajemanja prekinitev
To so registri, ki vsebujejo vrednost vrat, ki so ustvarila prekinitev.
IOCON0 / IOCON1 - Register za nadzor razširitve V / I
Ta nadzoruje funkcionalnost MCP23016.
Nastavitveni bit 0 (IARES> Interrupt Activity Resolution) nadzoruje frekvenco vzorčenja nožic vrat GP.
Bit0 = 0> (privzeto) Najdaljši čas zaznavanja aktivnosti vrat je 32 ms (nizka poraba energije)
Bit0 = 1> največji čas zaznavanja aktivnosti na vratih je 200usec (večja poraba energije)
9. korak: Struktura komunikacije
Tukaj prikazujem razred Wire, ki je komunikacija I2C v našem jedru Arduino, ki omogoča razširjevalniku tudi delo z Arduino Uno in Mega. Vendar ima slednji že več IO. Tu obravnavamo naslove čipa, nadzor dostopa, ki so kode registrov, pa tudi podatke.
10. korak: Program
Naš program vključuje komuniciranje ESP32 z MCP23016, da bi lahko uporabljali več GPIO -jev. Nato bomo imeli gumb in nekaj LED priklopljenih na MCP23016. Vse jih bomo nadzorovali samo z vodilom I2C. Tako bosta uporabljena le dva zatiča ESP32. Slikovni krog si lahko ogledate spodaj v videu.
11. korak: ESP01
Tukaj prikazujem Pinout ESP01.
Korak: Namestitev ESP01
V tem primeru imamo GPIO0 priključen v SDA, GPIO2 pa v SCL. Imamo tudi relejno ploščo, zvočni signal in LED. Na drugih vratih, v GP1.0, imamo še eno LED z uporom.
Korak: NodeMCU ESP-12E
Tukaj imamo pinout NodeMCU ESP-12E.
Korak 14: Montaža vozliščaMCU ESP-12E
V tem primeru je edina razlika od prvega primera v tem, da ste priključili D1 in D2 v SDA oziroma SCL.
Korak 15: WiFi NodeMCU-32S ESP-WROOM-32
Tukaj je pinout WiFi NodeMCU-32S ESP-WROOM-32.
Korak: Node za namestitev WiFiMCU-32S ESP-WROOM-32
Tokrat je glavna razlika od drugih dveh primerov gumb in tri utripajoče LED. Tu je SDA priključen na GPIO19, SCL pa na GPIO23.
17. korak: Knjižnice in spremenljivke
Najprej bomo vključili Wire.h, ki je odgovoren za komunikacijo i2c, kot tudi nastavitev naslova i2c za MCP23016. Prikažem več ukazov, tudi nekaterih, ki jih v tem projektu ne uporabljamo.
#include // določite uporabo knjižnice Wire.h. // endereço I2C do MCP23016 #define MCPAddress 0x20 // RAZMERJA UKAZNEGA BAJTA ZA REGISTRACIJO: Tabela: 1-3 mikročipa MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #define GP0 0x00 // REGISTER PORT PODATKOV 0 #define D1 PORT REGISTR 1 #define OLAT0 0x02 // REGISTRAT IZHODNEGA ZAPORKA 0 #define OLAT1 0x03 // REGISTRAT IZHODNEGA ZAPAKA 1 #define IPOL0 0x04 // REGISTRAT VLOGA POLARNOSTI 0 #define IPOL1 0x05 // INPUT POLARITY PORT IGRE 1 /I/O REGISTRACIJA NAVODIL 0 #define IODIR1 0x07 // V/I DIRECTION REGISTER 1 #define INTCAP0 0x08 // REGRETER REGISTRACIJE UMETKOV 0 #define INTCAP1 0x09 // REGRATIRAJ REGISTAR UMETA 1 #define IOCON0 OxPAND I/ REGISTRACIJA 0 #define IOCON1 0x0B // V/I REGISTRATOR NADZORA RAZŠIRITVE 1
18. korak: Nastavitev
Tu imamo funkcije za inicializacijo štirih različnih tipov mikrokrmilnikov. Preverimo tudi frekvenco, nastavimo GPIO in nastavimo zatiče. V zanki preverimo stanje gumba.
void setup () {Serial.begin (9600); zamuda (1000); Wire.begin (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frekvenca // konfiguracija o GPIO0 kot OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // konfiguracija o GPIO1 kot VHOD o GP1.0 ali skupni IZHOD preko GP1 configurePort (IODIR1, 0x01); // seta todos os pinos do GPIO0 ali LOW writeBlockData (GP0, B00000000); // določa, da so na voljo GPIO1 ali LOW writeBlockData (GP1, B00000000); } void loop () {// verifica e o botão GP foi pressionado checkButton (GP1); } // zaključna zanka
19. korak: ConfigurePort
V tem koraku konfiguriramo način zatičev GPIO in določimo način vrat.
// konfiguracija o GPIO (GP0 ali GP1) // parametro passamos: // vrata: GP0 ali GP1 // po meri: 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 vrata, uint8_t po meri) {if (custom == INPUT) {writeBlockData (vrata, 0xFF); } else if (custom == OUTPUT) {writeBlockData (vrata, 0x00); } else {writeBlockData (vrata, po meri); }}
20. korak: WriteBlockData & CheckButton
Tu pošiljamo podatke na MCP23016 prek vodila i2c, preverjamo stanje gumba in označujemo naslednji korak, pri tem pa upoštevamo pogoj, da smo pritisnjeni ali ne.
// enva 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 (podatki); Wire.endTransmission (); zamuda (10); }
// preveri se o botão foi pressionado // parametro GP: GP0 ali 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 kot portas GP0 if (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW else {writeBlockData (GP0, B00000000); }}
21. korak: ReadPin & ValueFromPin
Tu obravnavamo odčitavanje določenega zatiča in vrnitev bitne vrednosti v želeni 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 (naslov MCP); Wire.write (gp); Wire.endTransmission (); Wire.requestFrom (naslov MCP, 1); // ler do chip 1 byte statusGP = Wire.read (); vrnjena vrednostFromPin (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; }
Korak: Program ESP8266
Od tu bomo videli, kako je nastal program, ki smo ga uporabljali v ESP-01 in v vozlišču MCU ESP-12E, kar nam omogoča razumevanje, kako so razlike med njimi minimalne.
Spremenili bomo le vrstico komunikacijskega konstruktorja i2c, ki je začetna metoda predmeta Wire.
Samo komentirajte vrstico glede na ploščo, ki jo bomo sestavili.
// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01
Nastaviti
Upoštevajte, da je graditelj še vedno komentiran. Zato komentirajte glede na svojo ploščo (ESP-01 ali nodeMCU ESP12-E).
void setup () {Serial.begin (9600); zamuda (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frekvenca // konfiguracija o GPIO0 kot OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // konfiguracija o GPIO1 kot OUTPUT (todos os pinos) configurePort (IODIR1, OUTPUT); // določa, da je do GPIO0 prišlo nizko writeBlockData (GP0, B00000000); // določa, da do GPIO1 ni LOW writeBlockData (GP1, B00000001); }
Zanka
V zanki vsake 1 sekundo preklapljamo nožice. Ko je pin0 GP0 vklopljen, so zatiči GP1 izklopljeni. Ko je pin0 GP1 vklopljen, so zatiči GP0 izklopljeni.
void loop () {// seta o pino 7 do GP0 glede na HIGH e os demais como LOW writeBlockData (GP0, B10000000); // določa, da so na voljo GPIO1 ali LOW writeBlockData (GP1, B00000000); zamuda (1000); // določa, da je do GPIO0 prišlo nizko writeBlockData (GP0, B00000000); // seta o pino 0 do GP1 kot HIGH e os demais como LOW writeBlockData (GP1, B00000001); zamuda (1000); } // zaključna zanka
23. korak: POMEMBNO
Uporabljene spremenljivke in knjižnica so enake kot pri programu, ki smo ga naredili za ESP32, pa tudi pri metodah configurePort in writeBlockData.
Korak: Datoteke
Prenesite datoteke:
INO (ESP8266)
INO (ESP32)
Priporočena:
Brezžična komunikacija LoRa od 3 do 8 km z nizkocenovno napravo E32 (sx1278/sx1276) za Arduino, Esp8266 ali Esp32: 15 korakov
Brezžična komunikacija LoRa od 3 do 8 km z nizkimi stroški E32 (sx1278/sx1276) Naprava za Arduino, Esp8266 ali Esp32: Ustvarjam knjižnico za upravljanje EBYTE E32 na podlagi serije Semtech naprav LoRa, zelo zmogljiva, preprosta in poceni naprava. Različica 3 km tukaj, različica 8 km tukaj Lahko delajo na razdalji od 3000 do 8000 m in imajo veliko funkcij in
ESP32 Vadnica za Bluetooth - Kako uporabljati vgrajen Bluetooth ESP32: 5 korakov
ESP32 Vadnica za Bluetooth | Kako uporabljati vgrajen Bluetooth ESP32: Pozdravljeni, ker je plošča ESP32 opremljena z WiFi & Bluetooth tako za naše večinoma projekte običajno uporabljamo samo Wi -Fi, ne uporabljamo Bluetooth, zato bom v teh navodilih pokazal, kako enostavno je uporabljati Bluetooth ESP32 & Za vaše osnovne projekte
Kako začeti z ESP32 CAM - Pretakanje videa z uporabo ESP CAM prek Wi -Fi - Projekt varnostne kamere ESP32: 8 korakov
Kako začeti z ESP32 CAM | Pretakanje videa z uporabo ESP CAM prek Wi -Fi | Projekt varnostne kamere ESP32: Danes se bomo naučili, kako uporabljati to novo ploščo ESP32 CAM in kako jo lahko kodiramo ter uporabimo kot varnostno kamero in dobimo pretočni video prek WiFi
Kako začeti z ESP32 - Namestitev plošč ESP32 v Arduino IDE - Koda utripanja ESP32: 3 koraki
Kako začeti z ESP32 | Namestitev plošč ESP32 v Arduino IDE | ESP32 Blink Code: V tem navodilu bomo videli, kako začeti delati z esp32 in kako namestiti esp32 plošče v Arduino IDE, in programirali bomo esp 32 za zagon kode utripanja z arduino ide
PCF8591 (i2c Analog I/O Expander) Hitra enostavna uporaba: 9 korakov
PCF8591 (i2c Analog I/O Expander) Hitra enostavna uporaba: Knjižnica za uporabo i2c pcf8591 IC z arduinom in esp8266. Ta IC lahko nadzoruje (do 4) analogni vhod in/ali 1 analogni izhod, kot je merilna napetost, bere vrednost termistorja ali zbledi LED