Orodha ya maudhui:
- Hatua ya 1: Utangulizi
- Hatua ya 2: Sifa
- Hatua ya 3: ESP01 Inaweza kuwa na GPIOs 128
- Hatua ya 4: MCP23016
- Hatua ya 5: SAA
- Hatua ya 6: Anwani
- Hatua ya 7: Amri
- Hatua ya 8: Jamii:
- Hatua ya 9: Muundo wa Mawasiliano
- Hatua ya 10: Programu
- Hatua ya 11: ESP01
- Hatua ya 12: Kuweka ESP01
- Hatua ya 13: NodeMCU ESP-12E
- Hatua ya 14: Kuweka NodeMCU ESP-12E
- Hatua ya 15: WiFi NodeMCU-32S ESP-WROOM-32
- Hatua ya 16: Kupakia WiFi NodeMCU-32S ESP-WROOM-32
- Hatua ya 17: Maktaba na Vigeuzi
- Hatua ya 18: Sanidi
- Hatua ya 19: SanidiPort
- Hatua ya 20: AndikaBlockData & CheckButton
- Hatua ya 21: ReadPin & ValueFromPin
- Hatua ya 22: Programu ya ESP8266
- Hatua ya 23: MUHIMU
- Hatua ya 24: Faili
Video: Kupanua IO kwa ESP32, ESP8266, na Arduino: Hatua 24
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:54
Je! Ungependa kupanua IO za ESP32 yako, ESP8266, au Arduino? Na umefikiria juu ya uwezekano wa GPIO 16 mpya ambazo zinaweza kudhibitiwa kwa kutumia basi ya I2C? Kweli leo, nitakujulisha kwa GPIO expander MCP23016. Pia, nitakuonyesha jinsi ya kuwasiliana na mdhibiti mdogo na MCP23016. Pia nitazungumza juu ya kuunda mpango ambapo tutatumia pini 2 tu za mdhibiti huyu mdogo kuwasiliana na mfukuzaji. Tutatumia hizi kudhibiti LED na kitufe.
Hatua ya 1: Utangulizi
Kifaa cha MCP23016 hutoa bits 16 kwa upanuzi wa GPIO ukitumia basi ya I2C. Kila kidogo inaweza kusanidiwa kivyake (pembejeo au pato).
MCP23016 ina mipangilio anuwai ya 8-bit ya uteuzi wa pembejeo, pato, na polarity.
Vipanuaji hutoa suluhisho rahisi wakati IO zinahitajika kwa swichi, sensorer, vifungo, na LED, kati ya mifano mingine.
Hatua ya 2: Sifa
Pini 16 za Uingizaji / Pato (kiwango 16 cha kuingiza)
Mzunguko wa saa ya basi ya I2C haraka (0-400 kbits / s)
Pini tatu za anwani ya vifaa huruhusu utumiaji wa vifaa hadi nane
Kukatisha Kirekodi cha Kukamata Bandari
Polarity kugeuza rejista ya kuweka polarity ya data ya bandari ya pembejeo
Sambamba na wadhibiti wengi wadogo
Hatua ya 3: ESP01 Inaweza kuwa na GPIOs 128
Mfano ambao unaonyesha ukubwa wa upanuzi huu ni matumizi yake na ESP01, ambayo inaweza kushikamana na hadi kupanua nane na IOS mbili tu, kufikia 128 GPIOs.
Hatua ya 4: MCP23016
Hapa, tuna skimu ya upanuzi, ambayo ina vikundi viwili vya bits nane. Hii inafanya jumla ya bandari 16. Mbali na pini ya kukatiza, ina pini ya CLK, ambayo inaunganisha capacitor na kontena, ambayo imeunganishwa kwa ndani kwenye bandari ya mantiki. Hii ni kuunda saa, kwa kutumia wazo la oscillator ya kioo, ambayo inahitaji saa 1MHz. Pini ya TP hutumiwa kupima saa. Pini A0, A1, na A2 ni anwani za binary.
Hatua ya 5: SAA
MCP23016 kwa hivyo hutumia mzunguko wa nje wa RC kuamua kasi ya Saa ya ndani. Saa ya ndani ya 1 MHz inahitajika (kawaida) kwa kifaa kufanya kazi vizuri. Saa ya ndani inaweza kupimwa kwenye pini ya TP. Thamani zilizopendekezwa za REXT na CEXT zinaonyeshwa hapa chini.
Hatua ya 6: Anwani
Ili kufafanua anwani ya MCP23016, tunatumia pini A0, A1, na A2. Waache tu kwa JUU au LOW kwa mabadiliko ya anwani.
Anwani itaundwa kama ifuatavyo:
Anwani ya MCP_Adress = 20 + (A0 A1 A2)
Ambapo A0 A1 A2 inaweza kuchukua viwango vya juu / chini, hii inaunda nambari ya binary kutoka 0 hadi 7.
Kwa mfano:
A0> GND, A1> GND, A2> GND (inamaanisha 000, halafu 20 + 0 = 20)
Au sivyo, A0> JUU, A1> GND, A2> JUU (maana yake 101, halafu 20 + 5 = 25)
Hatua ya 7: Amri
Chini ni meza na amri za mawasiliano. Wacha tutumie GP0 na GP1, na IODIR0 na IODIR1.
Hatua ya 8: Jamii:
GP0 / GP1 - Sajili za Bandari ya Takwimu
Kuna rejista mbili ambazo hutoa ufikiaji wa bandari mbili za GPIO.
Usomaji wa rejista hutoa hadhi ya pini kwenye bandari hiyo.
Kidogo = 1> JUU kidogo = 0> CHINI
OLAT0 / OLAT1 - Pato USAJILI WA TAARIFA
Kuna rejista mbili ambazo hutoa ufikiaji wa bandari za pato la bandari hizo mbili.
IPOL0 / IPOL1 - Sajili za Polarity za Ingizo
Sajili hizi huruhusu mtumiaji kusanidi polarity ya data ya bandari ya kuingiza (GP0 na GP1).
IODIR0 / IODIR1
Kuna rejista mbili zinazodhibiti hali ya siri. (Ingiza au Pato)
Bit = 1> Pembejeo Bit = 0> Pato
INTCAP0 / INTCAP1 - Kukatiza Sajili za Kukamata
Hizi ni rejista ambazo zina dhamana ya bandari ambayo ilisababisha usumbufu.
IOCON0 / IOCON1 - Sajili ya Udhibiti wa Upanuzi wa I / O
Hii inadhibiti utendaji wa MCP23016.
Kuweka kidogo 0 (IARES> Usuluhishi wa Shughuli za Kukatiza) hudhibiti mzunguko wa sampuli ya pini za bandari ya GP.
Bit0 = 0> (chaguo-msingi) Wakati wa kugundua shughuli za bandari ni 32ms (matumizi ya nguvu ndogo)
Bit0 = 1> wakati wa kugundua shughuli kwenye bandari ni 200usec (matumizi ya nguvu zaidi)
Hatua ya 9: Muundo wa Mawasiliano
Ninaonyesha hapa darasa la Waya, ambayo ni mawasiliano ya I2C katika msingi wetu Arduino, ambayo pia inaruhusu mfurishaji kufanya kazi na Arduino Uno na Mega. Walakini, huyo wa mwisho tayari ana IO kadhaa. Tunashughulika hapa na anwani za chip, udhibiti wa ufikiaji, ambazo ni nambari za sajili, na pia data.
Hatua ya 10: Programu
Programu yetu inajumuisha kuwasiliana na ESP32 na MCP23016 ili kuwa na GPIO nyingi za kutumia. Kisha tutakuwa na kitufe na taa zingine za LED zilizounganishwa na MCP23016. Tutazidhibiti zote kwa kutumia basi ya I2C tu. Kwa hivyo, pini mbili tu za ESP32 zitatumika. Unaweza kuona mzunguko wa picha hapa chini kwenye video.
Hatua ya 11: ESP01
Hapa, ninaonyesha Pinout ya ESP01.
Hatua ya 12: Kuweka ESP01
Katika mfano huu, tuna GPIO0 iliyounganishwa katika SDA, na GPIO2 imeunganishwa katika SCL. Pia tuna bodi ya kupokezana, buzzer, na LED. Kwenye bandari nyingine, katika GP1.0, tuna LED moja zaidi na kontena.
Hatua ya 13: NodeMCU ESP-12E
Hapa, tuna Pinout ya NodeMCU ESP-12E.
Hatua ya 14: Kuweka NodeMCU ESP-12E
Katika kesi hii, tofauti pekee kutoka kwa mfano wa kwanza ni kwamba umeunganisha D1 na D2 katika SDA na SCL, mtawaliwa.
Hatua ya 15: WiFi NodeMCU-32S ESP-WROOM-32
Hapa kuna Pinout ya WiFi NodeMCU-32S ESP-WROOM-32.
Hatua ya 16: Kupakia WiFi NodeMCU-32S ESP-WROOM-32
Wakati huu, tofauti kuu kutoka kwa mifano mingine miwili ni kitufe, na taa tatu za kupepesa. Hapa, SDA imeunganishwa na GPIO19, wakati SCL imeunganishwa na GPIO23.
Hatua ya 17: Maktaba na Vigeuzi
Kwanza, tutajumuisha Wire.h, ambayo inahusika na mawasiliano ya i2c, na pia kuweka anwani ya i2c ya MCP23016. Ninaonyesha amri kadhaa, hata zingine ambazo hatutumii katika mradi huu.
# pamoja na // taja matumizi ya maktaba ya Wire.h. // endereço I2C do MCP23016 #fasili MCPAdress 0x20 // COMMAND BYTE KUSAJILI UHUSIANO: Jedwali: 1-3 ya Microchip MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #fasili GP0 0x00 // DATA PORT REGISTER 0 #fx0 GP 0 0 USAJILI WA BANDARI 1 #fafanua OLAT0 0x02 // OTPUT LATCH REGISTER 0 #fifisha OLAT1 0x03 // OTPUT LATCH REGISTER 1 #fasili IPOL0 0x04 // INPUT POLARITY PORT REGISTER 0 #fafsisha IPOL1 0x05 // INPUT P0X / I / O USAJILI WA MWELEKEZO 0 #fasili IODIR1 0x07 // I / O USAJILI WA MWELEKEZO 1 #fafanua INTCAP0 0x08 // KUSAJILI USAJILI WA KUNASA 0 #fafanua INTCAP1 0x09 // KUSAJILI KUSAJILI KWA TABIA 1 #fafanua IOCON0 0x0 JISAJILI 0 #fafanua IOCON1 0x0B // I / O KIWANGO CHA UDHIBITI WA KIWANGO 1
Hatua ya 18: Sanidi
Hapa tuna kazi za kuanzisha aina nne tofauti za wadhibiti-ndogo. Tunaangalia pia masafa, kuanzisha GPIOs, na kuweka pini. Katika Kitanzi, tunaangalia hali ya kitufe.
kuanzisha batili () {Serial.begin (9600); kuchelewesha (1000); Waya. Kuanza (19, 23); // ESP32 // Wire.anza (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Waya.anza (0, 2); // ESP-01 Wire.setClock (200000); // frequencyencia // usanidi wa GPIO0 como OUTPUT (tosos pinos) sanidiPort (IODIR0, OUTPUT); // usanidi o GPIO1 como INPUT o GP1.0 na como OUTPUT os outros GP1 configurePort (IODIR1, 0x01); // seta todos os pinos do GPIO0 como LOW LOW writeBlockData (GP0, B00000000); // seta todos os pinos do GPIO1 como LOW LOW writeBlockData (GP1, B00000000); } kitanzi batili () {// verifica na o botão GP foi pressionado checkButton (GP1); } // kitanzi cha mwisho
Hatua ya 19: SanidiPort
Katika hatua hii, tunasanidi hali ya pini za GPIO na kutambua hali ya bandari.
// usanidi wa GPIO (GP0 ou GP1) // como parametro passamos: // bandari: GP0 ou GP1 // desturi: INPUT para todos kama bandari hufanya GP trabalharem como entada // OUTPUT para todos kama bandari hufanya GP trabalharem como saida / / desturi ya ustahimilivu wa 0-255 dalili ya milango ya milango (1 = Pembejeo, 0 = KIPENGELE) // ex: 0x01 ou B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entada, o restando como saida void configurePort (bandari ya uint8_t, uint8_t desturi) {if (custom == INPUT) {writeBlockData (port, 0xFF); } vingine ikiwa (desturi == OUTPUT) {writeBlockData (bandari, 0x00); } mwingine {writeBlockData (bandari, desturi); }}
Hatua ya 20: AndikaBlockData & CheckButton
Hapa, tunatuma data kwa MCP23016 kupitia basi ya i2c, angalia hali ya kitufe, na uonyeshe hatua inayofuata ukizingatia hali ya kushinikizwa au la.
// envia dados para o MCP23016 através do barramento i2c // cmd: COMANDO (registrador) // data: dados (0-255) batili writeBlockData (uint8_t cmd, uint8_t data) {Wire.beginTransmission (MCPAdress); Andika waya (cmd); Andika waya (data); Uwasilishaji wa waya (); kuchelewesha (10); }
// verifica se o botão foi pressionado // parametro GP: GP0 ou GP1 batili 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 kama portas GP0 ikiwa (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW else {writeBlockData (GP0, B00000000); }}
Hatua ya 21: ReadPin & ValueFromPin
Tunashughulika hapa na usomaji wa pini maalum, na kurudi kwa thamani kidogo kwenye nafasi inayotakiwa.
// faz a leitura de um pino específico // pini: 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; Uwasilishaji wa waya (MCPAdress); Andika waya (gp); Uwasilishaji wa waya (); Ombi la Wire. Toka (MCPAdress, 1); // ler do chip 1 byte statusGP = Wire.read (); kurudi thamaniFromPin (pini, hadhiGP); } // 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) {kurudi (statusGP & (0x0001 << pini)) == 0? 0: 1; }
Hatua ya 22: Programu ya ESP8266
Kutoka hapa, tutaona jinsi mpango tuliotumia katika ESP-01 na katika nodeMCU ESP-12E iliundwa, ambayo inatuwezesha kuelewa jinsi tofauti kati yao ni ndogo.
Tutarekebisha tu mstari wa mjenzi wa mawasiliano wa i2c, ambayo ndiyo njia ya mwanzo ya kitu cha waya.
Ondoa tu laini kulingana na sahani ambayo tutakusanya.
// Waya.anza (D2, D1); // nodemcu ESP8266 // Wire.anza (0, 2); // ESP-01
Sanidi
Ona kwamba mjenzi bado ametolewa maoni. Kwa hivyo, uncomment kulingana na bodi yako (ESP-01 au nodeMCU ESP12-E).
kuanzisha batili () {Serial.begin (9600); kuchelewesha (1000); // Waya.anza (D2, D1); // nodemcu ESP8266 // Wire.anza (0, 2); // ESP-01 Waya.setClock (200000); // frequencyencia // usanidi wa GPIO0 como OUTPUT (tosos pinos) sanidiPort (IODIR0, OUTPUT); // usanidi o GPIO1 como OUTPUT (todos os pinos) configurePort (IODIR1, OUTPUT); // seta todos os pinos do GPIO0 como LOW LOW writeBlockData (GP0, B00000000); // seta todos os pinos do GPIO1 como LOW LOW writeBlockData (GP1, B00000001); }
Kitanzi
Katika kitanzi, tunabadilisha pini kila sekunde 1. Kwa hivyo, wakati pin0 ya GP0 imewashwa, pini za GP1 zimezimwa. Wakati pin0 ya GP1 imewashwa, pini za GP0 zimezimwa.
kitanzi batili () {// seta o pino 7 do GP0 como HIGH na os demais como LOW writeBlockData (GP0, B10000000); // seta todos os pinos do GPIO1 como LOW LOW writeBlockData (GP1, B00000000); kuchelewesha (1000); // seta todos os pinos do GPIO0 como LOW LOW writeBlockData (GP0, B00000000); // seta o pino 0 fanya GP1 como HIGH na os demais como LOW writeBlockData (GP1, B00000001); kuchelewesha (1000); } // kitanzi cha mwisho
Hatua ya 23: MUHIMU
Vigezo na maktaba yaliyotumiwa ni sawa na yale ya programu tuliyoifanya kwa ESP32, na pia njia za kusanidiPort na kuandikaBlockData.
Hatua ya 24: Faili
Pakua faili:
INO (ESP8266)
INO (ESP32)
Ilipendekeza:
Jinsi ya Kupanua Bitmaps katika Tai: Hatua 8 (na Picha)
Jinsi ya Kupanua Bitmaps katika Tai: Pamoja na gharama ya utengenezaji wa bodi za mzunguko wa kitaalam kupata nafuu na nafuu, inaonekana kama sasa ni wakati mzuri wa kuingia kwenye muundo wa PCB. Jamii za mkondoni husaidia kudhibiti laini za mwinuko za programu na kutoa hesabu nyingi,
Antena ya Kupanua Masafa ya kopo ya Lango: Hatua 6 (na Picha)
Antena ya Kupanua Masafa ya kopo ya Lango: Wakati theluji inapozama sana kwenye Mlima Hood, ni skiing ya kufurahisha, sledding, kujenga ngome za theluji, na kuwatupa watoto kwenye staha kuwa unga wa kina. Lakini vitu vyepesi sio vya kufurahisha tunapojaribu kurudi kwenye barabara kuu na kufungua lango kupata
Kupanua Kilima: Hatua 4
Kupanua Mlima: Mlima wa kupanua unaonekana tu kama kilima cha kawaida. Hata hivyo unapokaribia kitu kinachotokea. Inapanuka na kuwasha
Raspberry Pi - PCA9536 Pembejeo / Pato La kupanua Mafunzo ya Java: Hatua 4
Raspberry Pi - PCA9536 Pembejeo / Pato la Kupanua Mafunzo ya Java: PCA9536 ni kifaa cha pini 8 cha CMOS ambacho hutoa biti 4 za upanuzi wa Pembejeo ya Pato / Pato (GPIO) kwa matumizi ya I2C-basi / SMBus. Inayo rejista ya Usanidi wa 4-bit ili kutumikia kusudi la uteuzi wa pembejeo au pato, 4-bit
Jinsi ya Kupanua Ishara ya NVR (IP Cam Repeater, switch Network na WiFi Router / Repeater): Hatua 5
Jinsi ya Kupanua Ishara ya NVR (IP Cam Repeater, switch Network na WiFi Router / Repeater): Katika hii tutafundishwa tutakuonyesha jinsi ya kupanua ishara yako ya NVR, kwa kutumia: 1. Kazi ya Kurudia iliyojengwa katika Kamera ya IP, au2. Kubadili Mtandao, au3. Router ya WiFi