Cov txheej txheem:

IO Expander rau ESP32, ESP8266, thiab Arduino: 24 Kauj Ruam
IO Expander rau ESP32, ESP8266, thiab Arduino: 24 Kauj Ruam

Video: IO Expander rau ESP32, ESP8266, thiab Arduino: 24 Kauj Ruam

Video: IO Expander rau ESP32, ESP8266, thiab Arduino: 24 Kauj Ruam
Video: ESP8266 Takeapart - Collin’s Lab Notes #adafruit #collinslabnotes #adafruit 2024, Kaum ib hlis
Anonim
Image
Image
Taw qhia
Taw qhia

Koj puas xav nthuav IOs ntawm koj ESP32, ESP8266, lossis Arduino? Thiab koj puas tau xav txog qhov ua tau ntawm 16 GPIOs tshiab uas tuaj yeem tswj tau siv I2C npav? Zoo hnub no, Kuv yuav los qhia koj rau GPIO nthuav dav MCP23016. Tsis tas li, kuv yuav qhia koj yuav ua li cas sib txuas tus tswj hwm microcontroller nrog MCP23016. Kuv tseem yuav tham txog kev tsim txoj haujlwm uas peb yuav siv tsuas yog 2 tus pin ntawm lub microcontroller no los tham nrog tus nthuav dav. Peb yuav siv cov no los tswj cov LEDs thiab khawm.

Kauj ruam 1: Taw qhia

Cov cuab yeej MCP23016 muab 16 khoom rau GPIO nthuav dav siv I2C npav. Txhua qhov me me tuaj yeem teeb tsa ib tus zuj zus (tawm tswv yim lossis tso tawm).

MCP23016 suav nrog ntau qhov 8-ntsis teeb tsa rau kev tawm tswv yim, tso tawm, thiab kev xaiv polarity.

Cov neeg nthuav dav muab cov kev daws teeb meem yooj yim thaum IOs xav tau rau cov hloov pauv, ntsuas, khawm, thiab LEDs, ntawm lwm qhov piv txwv.

Kauj Ruam 2: Yam ntxwv

16 Input / Output pins (16 tus qauv tawm tswv yim)

Ceev I2C npav npav zaus (0-400 kbits/s)

Peb qhov chaw nyob khoos phis tawj tso cai siv txog li yim lub cuab yeej

Cuam tshuam Chaw Nres Nkoj Nkag Mus Rau Lub Cev

Polarity thim rov qab rau npe rau teeb tsa polarity ntawm cov ntaub ntawv chaw nres nkoj nkag

Tau tshaj nrog feem ntau microcontrollers

Kauj Ruam 3: ESP01 Muaj 128 GPIOs

ESP01 tuaj yeem muaj 128 GPIOs!
ESP01 tuaj yeem muaj 128 GPIOs!

Ib qho piv txwv uas qhia qhov loj ntawm qhov nthuav dav no yog nws siv nrog ESP01, uas tuaj yeem txuas nrog txog li yim tus nthuav nrog tsuas yog ob qho IOS, mus txog 128 GPIOs.

Kauj Ruam 4: MCP23016

NPE 2306
NPE 2306

Ntawm no, peb muaj cov phiaj xwm ntawm tus nthuav dav, uas muaj ob pab pawg ntawm yim khoom. Qhov no ua rau tag nrho ntawm 16 chaw nres nkoj. Ntxiv nrog rau tus pin cuam tshuam, nws muaj tus lej CLK, uas txuas tus capacitor thiab tus tiv thaiv, uas txuas nrog sab hauv hauv qhov chaw nres nkoj logic. Qhov no yog los tsim lub moos, siv lub tswv yim ntawm cov siv lead ua oscillator, uas xav tau 1MHz moos. TP tus pin yog siv los ntsuas lub moos. Pins A0, A1, thiab A2 yog qhov chaw nyob binary.

Kauj ruam 5: QHIA

NYEM
NYEM
NYEM
NYEM

MCP23016 yog li ntawd siv sab nrauv RC Circuit los txiav txim siab nrawm ntawm Sab Hauv. Yuav tsum muaj lub moos sab hauv ntawm 1 MHz (feem ntau) rau lub cuab yeej ua haujlwm kom raug. Lub moos sab hauv tuaj yeem ntsuas ntawm tus pin TP. Cov lus pom zoo rau REXT thiab CEXT tau qhia hauv qab no.

Kauj Ruam 6: Chaw Nyob

Txhawm rau txheeb xyuas qhov chaw nyob ntawm MCP23016, peb mam li siv tus pin A0, A1, thiab A2. Tsuas yog tso lawv ntawm HIGH lossis LOW rau qhov chaw nyob hloov pauv.

Qhov chaw nyob yuav tsim raws li hauv qab no:

MCP_Address = 20 + (A0 A1 A2)

Qhov twg A0 A1 A2 tuaj yeem nqa qhov siab / qis, qhov no tsim cov lej binary los ntawm 0 txog 7.

Piv txwv li:

A0> GND, A1> GND, A2> GND (txhais tau tias 000, ces 20 + 0 = 20)

Los yog lwm tus, A0> HIGH, A1> GND, A2> HIGH (lub ntsiab lus 101, tom qab ntawd 20 + 5 = 25)

Kauj Ruam 7: Cov lus txib

Hais kom ua
Hais kom ua

Hauv qab no yog lub rooj nrog cov lus txib rau kev sib txuas lus. Cia peb siv GP0 thiab GP1, ntxiv rau IODIR0 thiab IODIR1.

Kauj Ruam 8: Pawg:

GP0 / GP1 - Cov Chaw Teev Npe Cov Ntaub Ntawv

Muaj ob daim ntawv sau npe uas nkag mus rau ob lub GPIO chaw nres nkoj.

Kev sau npe sau qhia qhov xwm txheej ntawm tus pin ntawm qhov chaw nres nkoj ntawd.

Bit = 1> HIGH Bit = 0> LOW

OLAT0 / OLAT1 - Tso Tawm LACTCH REGISTERS

Muaj ob daim ntawv sau npe uas muab kev nkag mus rau cov chaw tso tawm ntawm ob lub chaw nres nkoj.

IPOL0 / IPOL1 - Kev Sau Npe Polarity Sau Npe

Cov ntawv sau npe no tso cai rau tus neeg siv teeb tsa qhov sib txawv ntawm cov ntaub ntawv chaw nres nkoj nkag (GP0 thiab GP1).

IODIR0 / IODIR1

Muaj ob daim ntawv sau npe uas tswj tus lej tus pin. (Tawm tswv yim lossis tso tawm)

Bit = 1> INPUT Bit = 0> OUTPUT

INTCAP0 / INTCAP1 - cuam tshuam kev sau npe

Cov no yog cov npe uas muaj tus nqi ntawm qhov chaw nres nkoj uas ua rau muaj kev cuam tshuam.

IOCON0 / IOCON1 - I / O Expander Control Register

Qhov no tswj hwm kev ua haujlwm ntawm MCP23016.

Teeb me ntsis 0 (IARES> cuam tshuam kev ua haujlwm daws teeb meem) tswj hwm qhov piv txwv ntawm GP chaw nres nkoj pins.

Bit0 = 0> (default) Lub sijhawm ua haujlwm siab tshaj plaws ntawm chaw nres nkoj pom yog 32ms (kev siv hluav taws xob tsawg)

Bit0 = 1> lub sijhawm ua haujlwm siab tshaj plaws ntawm lub chaw nres nkoj yog 200usec (siv zog ntau dua)

Kauj Ruam 9: Tus Qauv rau Kev Sib Txuas Lus

Qauv rau Kev Sib Txuas Lus
Qauv rau Kev Sib Txuas Lus

Kuv qhia ntawm no Cov Chav Kawm Hlau, uas yog I2C kev sib txuas lus hauv peb cov tub ntxhais kawm Arduino, uas tseem tso cai rau kev nthuav dav ua haujlwm nrog Arduino Uno thiab Mega. Txawm li cas los xij, tom kawg twb muaj ntau IOs. Peb cuam tshuam nrog cov chaw nyob ntawm tus nti, tswj kev nkag mus, uas yog cov lej ntawm cov npe, nrog rau cov ntaub ntawv.

Kauj ruam 10: Txoj haujlwm

Program
Program

Peb txoj haujlwm suav nrog kev sib txuas lus ESP32 nrog MCP23016 kom muaj GPIOs ntau dua los siv. Tom qab ntawd peb yuav muaj lub pob thiab qee qhov LED txuas nrog MCP23016. Peb yuav tswj lawv txhua tus siv tsuas yog lub npav I2C. Yog li, tsuas yog siv ob tus ESP32 tus pin. Koj tuaj yeem pom daim duab duab hauv qab no hauv video.

Kauj ruam 11: ESP01

ESP01
ESP01

Ntawm no, kuv qhia Pinout ntawm ESP01.

Kauj ruam 12: Mounting ESP01

Mounting ESP01
Mounting ESP01

Hauv qhov piv txwv no, peb muaj GPIO0 txuas hauv SDA, thiab GPIO2 txuas nrog hauv SCL. Peb kuj muaj lub rooj tsav xwm sib txuas, lub tswb nrov, thiab LED. Ntawm lwm qhov chaw nres nkoj, hauv GP1.0, peb muaj ib qho ntxiv LED nrog tus tiv thaiv.

Kauj Ruam 13: NodeMCU ESP-12E

NodeMCU ESP-12E
NodeMCU ESP-12E

Ntawm no, peb muaj Pinout ntawm NodeMCU ESP-12E.

Kauj Ruam 14: NodeMCU ESP-12E

Mounting NodeMCU ESP-12E
Mounting NodeMCU ESP-12E

Hauv qhov no, qhov sib txawv ntawm thawj qhov piv txwv yog tias koj tau txuas D1 thiab D2 hauv SDA thiab SCL, feem.

Kauj Ruam 15: WiFi NodeMCU-32S ESP-WROOM-32

WiFi NodeMCU-32S ESP-WROOM-32
WiFi NodeMCU-32S ESP-WROOM-32

Nov yog Pinout ntawm WiFi NodeMCU-32S ESP-WROOM-32.

Kauj Ruam 16: WiFi Mounting NodeMCU-32S ESP-WROOM-32

WiFi Mounting NodeMCU-32S ESP-WROOM-32
WiFi Mounting NodeMCU-32S ESP-WROOM-32

Lub sijhawm no, qhov sib txawv tseem ceeb los ntawm lwm qhov piv txwv yog lub khawm, thiab peb qhov ntsais LEDs. Ntawm no, SDA txuas nrog GPIO19, thaum SCL txuas nrog GPIO23.

Kauj Ruam 17: Cov Tsev Qiv Ntawv thiab Cov Txiaj Ntsig

Ua ntej, peb yuav suav nrog Wire.h, uas yog lub luag haujlwm rau i2c kev sib txuas lus, nrog rau teeb tsa i2c chaw nyob ntawm MCP23016. Kuv qhia ntau cov lus txib, txawm tias qee qhov uas peb tsis siv hauv txoj haujlwm no.

#suav nrog // qhia meej siv Wire.h lub tsev qiv ntawv. // endereço I2C to 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 #de 0x1 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 POLAR0 #1 /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 IOCON0 0xTRC REGISTER 0 #define IOCON1 0x0B // I/O EXPANDER CONTROL REGISTER 1

Kauj Ruam 18: Teeb tsa

Ntawm no peb muaj cov haujlwm los pib plaub hom sib txawv ntawm microcontrollers. Peb kuj txheeb xyuas qhov zaus, teeb tsa GPIOs, thiab teeb tsa tus pin. Hauv Loop, peb txheeb xyuas qhov xwm txheej ntawm lub pob.

teeb tsa tsis muaj dab tsi () {Serial.begin (9600); ncua (1000); Wire.begin (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frequencia // configura o GPIO0 com 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); } // kawg lub voj

Kauj ruam 19: ConfigurePort

Hauv cov kauj ruam no, peb teeb tsa hom GPIO pins thiab txheeb xyuas hom chaw nres nkoj.

// configura 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 chaw nres nkoj, uint8_t kev cai) {yog (kev cai == INPUT) {writeBlockData (chaw nres nkoj, 0xFF); } lwm tus yog (kev cai == OUTPUT) {writeBlockData (chaw nres nkoj, 0x00); } lwm {writeBlockData (chaw nres nkoj, kev cai); }}

Kauj ruam 20: SauBlockData & CheckButton

Ntawm no, peb xa cov ntaub ntawv mus rau MCP23016 los ntawm lub tsheb npav i2c, txheeb xyuas qhov xwm txheej ntawm lub pob, thiab taw qhia cov kauj ruam tom ntej thaum txiav txim siab qhov xwm txheej raug nias lossis tsis.

// envia dados para o MCP23016 através do barramento i2c // cmd: COMANDO (tus sau npe nkag) // cov ntaub ntawv: dados (0-255) tsis muaj dab tsi writeBlockData (uint8_t cmd, uint8_t cov ntaub ntawv) {Wire.beginTransmission (MCPAddress); Hlau.write (cmd); Wire.write (cov ntaub ntawv); Wire.endTransmission (); ncua (10); }

// verifica se o botão foi pressionado // parametro GP: GP0 lossis 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 HIGH as portas GP0 if (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW lwm tus {writeBlockData (GP0, B00000000); }}

Kauj ruam 21: ReadPin & ValueFromPin

Peb cuam tshuam ntawm no nrog kev nyeem ntawm tus pin tshwj xeeb, thiab rov qab los ntawm tus nqi me ntsis rau txoj haujlwm xav tau.

// 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); Hlau.write (gp); Wire.endTransmission (); Wire.requestFrom (MCPAddress, 1); // ler do chip 1 byte statusGP = Wire.read (); return valueFromPin (tus pin, xwm txheej GP); } // 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; }

Kauj Ruam 22: ESP8266 Txoj Haujlwm

Los ntawm no, peb yuav pom yuav ua li cas txoj haujlwm peb siv hauv ESP-01 thiab hauv nodeMCU ESP-12E tau tsim, uas tso cai rau peb nkag siab tias kev sib txawv ntawm lawv tsawg npaum li cas.

Peb tsuas yog hloov kho kab ntawm i2c tus neeg sib txuas lus tsim, uas yog txoj hauv kev pib ntawm Cov Khoom Hlau.

Tsuas yog tsis suav nrog kab raws li phaj uas peb tab tom yuav suav sau.

// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); ESP-01 NPE

Teeb

Daim ntawv ceeb toom tias tus tsim tawm tseem tau tawm lus. Yog li, tsis pom zoo raws li koj lub rooj tsavxwm (ESP-01 lossis nodeMCU ESP12-E).

teeb tsa tsis muaj dab tsi () {Serial.begin (9600); ncua (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // frequencia // configura o GPIO0 com 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); }

Loop

Hauv lub voj, peb hloov cov pins txhua 1 thib ob. Yog li, thaum tus pin0 ntawm GP0 nyob, tus pin ntawm GP1 tau tawm. Thaum tus pin0 ntawm GP1 nyob, GP0 tus pin tau tawm.

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); ncua (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); ncua (1000); } // kawg lub voj

Kauj ruam 23: TSEEM CEEB

Cov kev hloov pauv thiab tsev qiv ntawv siv yog tib yam li cov haujlwm uas peb tau ua rau ESP32, ntxiv rau kev teeb tsa chaw nres nkoj thiab kev sau ntawvBlockData.

Kauj ruam 24: Cov ntaub ntawv

Rub tawm cov ntawv:

PDF

NPE (ESP8266)

NPE (ESP32)

Pom zoo: