Turinys:
- 1 žingsnis: Įvadas
- 2 žingsnis: charakteristikos
- 3 žingsnis: ESP01 gali turėti 128 GPIO
- 4 žingsnis: MCP23016
- 5 veiksmas: laikrodis
- 6 žingsnis: adresas
- 7 žingsnis: komandos
- 8 žingsnis: Kategorijos:
- 9 žingsnis: Bendravimo struktūra
- 10 žingsnis: programa
- 11 veiksmas: ESP01
- 12 žingsnis: ESP01 montavimas
- 13 veiksmas: „NodeMCU ESP-12E“
- 14 žingsnis: „NodeMCU ESP-12E“montavimas
- 15 veiksmas: „WiFi NodeMCU-32S ESP-WROOM-32“
- 16 veiksmas: „WiFi“montavimo mazgasMCU-32S ESP-WROOM-32
- 17 žingsnis: bibliotekos ir kintamieji
- 18 veiksmas: sąranka
- 19 veiksmas: „ConfigurePort“
- 20 veiksmas: „WriteBlockData“ir „CheckButton“
- 21 veiksmas: „ReadPin“ir „ValueFromPin“
- 22 žingsnis: ESP8266 programa
- 23 žingsnis: SVARBU
- 24 žingsnis: failai
Video: „IO Expander“, skirtas ESP32, ESP8266 ir „Arduino“: 24 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Ar norėtumėte išplėsti savo ESP32, ESP8266 ar „Arduino“IO? O ar pagalvojote apie galimybę sukurti 16 naujų GPIO, kuriuos galima valdyti naudojant I2C magistralę? Na, šiandien aš jums pristatysiu GPIO plėtiklį MCP23016. Taip pat parodysiu, kaip bendrauti su mikrovaldikliu su MCP23016. Taip pat kalbėsiu apie programos sukūrimą, kur bendraudami su plėtikliu naudosime tik 2 šio mikrovaldiklio kaiščius. Mes juos naudosime šviesos diodams ir mygtukui valdyti.
1 žingsnis: Įvadas
MCP23016 įrenginyje yra 16 bitų GPIO išplėtimui naudojant I2C magistralę. Kiekvieną bitą galima konfigūruoti atskirai (įvestis arba išvestis).
MCP23016 sudaro keli 8 bitų įvesties, išvesties ir poliškumo nustatymai.
Plėtikliai suteikia paprastą sprendimą, kai, be kitų pavyzdžių, reikalingi jungikliai, jutikliai, mygtukai ir šviesos diodai.
2 žingsnis: charakteristikos
16 įvesties / išvesties kaiščių (16 įvesties standartų)
Greitas I2C magistralės laikrodžio dažnis (0–400 kbits/s)
Trys aparatinės įrangos adresų kaiščiai leidžia naudoti iki aštuonių įrenginių
Nutraukti prievado fiksavimo įrašymo įrenginį
Poliškumo keitimo registras, skirtas įvesties prievado duomenų poliškumui nustatyti
Suderinamas su dauguma mikrovaldiklių
3 žingsnis: ESP01 gali turėti 128 GPIO
Pavyzdys, parodantis šio plėtiklio dydį, yra jo naudojimas su ESP01, kurį galima prijungti iki aštuonių plėtiklių tik dviem IOS, pasiekiant 128 GPIO.
4 žingsnis: MCP23016
Čia mes turime plėtiklio, kuriame yra dvi aštuonių bitų grupės, schemą. Tai iš viso sudaro 16 uostų. Be pertraukimo kaiščio, jis turi CLK kaištį, jungiantį kondensatorių ir rezistorių, kurie yra iš vidaus prijungti prie loginio prievado. Tai yra laikrodžio formavimas, naudojant kristalų osciliatoriaus idėją, kuriai reikia 1MHz laikrodžio. TP kaištis naudojamas laikrodžiui matuoti. Smeigtukai A0, A1 ir A2 yra dvejetainiai adresai.
5 veiksmas: laikrodis
Todėl MCP23016 naudoja išorinę RC grandinę vidinio laikrodžio greičiui nustatyti. Norint, kad įrenginys tinkamai veiktų, reikalingas 1 MHz vidinis laikrodis (paprastai). Vidinį laikrodį galima išmatuoti ant TP kaiščio. Rekomenduojamos REXT ir CEXT vertės pateiktos žemiau.
6 žingsnis: adresas
Norėdami apibrėžti MCP23016 adresą, mes naudojame kaiščius A0, A1 ir A2. Tiesiog palikite juos HIGH arba LOW, kad pakeistumėte adresą.
Adresas bus suformuotas taip:
MCP_Address = 20 + (A0 A1 A2)
Kai A0 A1 A2 gali turėti HIGH / LOW reikšmes, tai sudaro dvejetainį skaičių nuo 0 iki 7.
Pavyzdžiui:
A0> GND, A1> GND, A2> GND (reiškia 000, tada 20 + 0 = 20)
Arba, A0> HIGH, A1> GND, A2> HIGH (reiškia 101, tada 20 + 5 = 25)
7 žingsnis: komandos
Žemiau yra lentelė su bendravimo komandomis. Naudokime GP0 ir GP1, taip pat IODIR0 ir IODIR1.
8 žingsnis: Kategorijos:
GP0 / GP1 - duomenų prievadų registrai
Yra du registrai, suteikiantys prieigą prie dviejų GPIO prievadų.
Registro rodmenys pateikia to prievado kaiščių būseną.
Bit = 1> HIGH Bit = 0> LOW
OLAT0 / OLAT1 - išvesties LACTCH REGISTRAI
Yra du registrai, suteikiantys prieigą prie abiejų prievadų išvesties prievadų.
IPOL0 / IPOL1 - įvesties poliškumo registrai
Šie registrai leidžia vartotojui konfigūruoti įvesties prievado duomenų (GP0 ir GP1) poliškumą.
IODIR0 / IODIR1
Yra du registrai, valdantys kaiščio režimą. (Įvestis arba išvestis)
Bitas = 1> Įvesties bitas = 0> IŠVESTIS
INTCAP0 / INTCAP1 - pertraukimo fiksavimo registrai
Tai registrai, kuriuose yra prievado, kuris sukėlė pertrauką, vertė.
IOCON0 / IOCON1 - I / O plėtiklio valdymo registras
Tai valdo MCP23016 funkcionalumą.
Nustatymo bitas 0 (IARES> Interrupt Activity Resolution) kontroliuoja GP prievado kaiščių atrankos dažnį.
Bit0 = 0> (numatytasis) Maksimalus uosto veiklos aptikimo laikas yra 32 ms (mažos energijos sąnaudos)
Bit0 = 1> maksimalus aktyvumo aptikimo laikas uoste yra 200usec (didesnis energijos suvartojimas)
9 žingsnis: Bendravimo struktūra
Čia rodau „Wire“klasę, kuri yra „I2C“komunikacija mūsų pagrindiniame „Arduino“, kuri taip pat leidžia plėtikliui dirbti su „Arduino Uno“ir „Mega“. Tačiau pastarasis jau turi keletą IO. Čia mes sprendžiame lusto adresus, prieigos kontrolę, kurie yra registrų kodai, taip pat duomenis.
10 žingsnis: programa
Mūsų programą sudaro ryšys su ESP32 su MCP23016, kad būtų galima naudoti daugiau GPIO. Tada prie MCP23016 prijungsime mygtuką ir kai kuriuos šviesos diodus. Mes juos visus valdysime naudodami tik I2C magistralę. Taigi bus naudojami tik du ESP32 kaiščiai. Vaizdo įraše galite pamatyti žemiau esančią vaizdo grandinę.
11 veiksmas: ESP01
Čia rodau ESP01 „Pinout“.
12 žingsnis: ESP01 montavimas
Šiame pavyzdyje GPIO0 prijungtas prie SDA, o GPIO2 - į SCL. Mes taip pat turime relės plokštę, signalizatorių ir šviesos diodą. Kitame prievade, GP1.0, turime dar vieną šviesos diodą su rezistoriumi.
13 veiksmas: „NodeMCU ESP-12E“
Čia mes turime „NodeMCU ESP-12E“kištuką.
14 žingsnis: „NodeMCU ESP-12E“montavimas
Šiuo atveju vienintelis skirtumas nuo pirmojo pavyzdžio yra tas, kad prijungėte D1 ir D2 atitinkamai SDA ir SCL.
15 veiksmas: „WiFi NodeMCU-32S ESP-WROOM-32“
Štai „WiFi NodeMCU-32S ESP-WROOM-32“kontaktas.
16 veiksmas: „WiFi“montavimo mazgasMCU-32S ESP-WROOM-32
Šį kartą pagrindinis skirtumas nuo kitų dviejų pavyzdžių yra mygtukas ir trys mirksintys šviesos diodai. Čia SDA prijungta prie GPIO19, o SCL - prie GPIO23.
17 žingsnis: bibliotekos ir kintamieji
Pirma, mes įtraukiame „Wire.h“, kuris yra atsakingas už „i2c“ryšį, taip pat nustatome „MCP23016“i2c adresą. Rodau keletą komandų, net kai kurių nenaudojame šiame projekte.
#include // nurodyti Wire.h bibliotekos naudojimą. // 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 #0 UOSTO REGISTRAS 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 POL /I/O NUORODOS REGISTRAS 0 #define IODIR1 0x07 // Įvesties/išvesties krypties registras 1 #define INTCAP0 0x08 // PERJUNGIMO ĮGYVENDINIMO REGISTRAS 0 #define INTCAP1 0x09 // PERJUNGIMO GAMYBOS REGISTRAS 1 #define IOC0 REGISTRAS 0 #define IOCON1 0x0B // I/O EXPANDER CONTROL REGISTER 1
18 veiksmas: sąranka
Čia turime keturių skirtingų tipų mikrovaldiklių inicijavimo funkcijas. Mes taip pat tikriname dažnį, nustatome GPIO ir nustatome kaiščius. Cikle mes patikriname mygtuko būseną.
void setup () {Serial.begin (9600); vėlavimas (1000); Viela.pradėti (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // dažnis // konfigūracija arba GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // konfigūracija arba GPIO1 como INPUT arba GP1.0 ir 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 com LOW writeBlockData (GP1, B00000000); } void loop () {// verifica and o botão GP foi pressionado checkButton (GP1); } // pabaigos kilpa
19 veiksmas: „ConfigurePort“
Šiame žingsnyje mes sukonfigūruojame GPIO kaiščių režimą ir nustatome prievadų režimą.
// GPIO konfigūracija (GP0 arba GP1) // bendri parametrai passamos: // prievadas: GP0 arba GP1 // pasirinktinis: INPUT kaip tod 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) // pvz: 0x01 ou B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entrada, o restando como saida void configurePort (uint8_t prievadas, uint8_t pasirinktinis) {if (custom == INPUT) {writeBlockData (prievadas, 0xFF); } else if (custom == OUTPUT) {writeBlockData (prievadas, 0x00); } else {writeBlockData (prievadas, pasirinktinis); }}
20 veiksmas: „WriteBlockData“ir „CheckButton“
Čia mes siunčiame duomenis į MCP23016 per „i2c“magistralę, patikriname mygtuko būseną ir nurodome kitą žingsnį, atsižvelgdami į paspaudimo ar ne.
// envia dados para o MCP23016 através do barramento i2c // cmd: COMANDO (registratorius) // duomenys: dados (0-255) void writeBlockData (uint8_t cmd, uint8_t data) {Wire.beginTransmission (MCPAddress); Wire.write (cmd); Wire.write (duomenys); Wire.endTransmission (); vėlavimas (10); }
// verifica se o botão foi pressionado // parametras GP: GP0 arba 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, set HIGH as portas GP0 if (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW else {writeBlockData (GP0, B00000000); }}
21 veiksmas: „ReadPin“ir „ValueFromPin“
Čia mes sprendžiame konkretaus kaiščio nuskaitymą ir bitų vertės grąžinimą į norimą padėtį.
// 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 (kaištis, 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 << smeigtukas)) == 0? 0: 1; }
22 žingsnis: ESP8266 programa
Iš čia pamatysime, kaip buvo sukurta programa, kurią naudojome ESP-01 ir mazge MCU ESP-12E, o tai leidžia suprasti, kaip skirtumai tarp jų yra minimalūs.
Mes modifikuosime tik „i2c“ryšio konstruktoriaus liniją, kuri yra „Wire“objekto pradžios metodas.
Tiesiog nekomentuokite eilutės pagal plokštelę, kurią ketiname sudaryti.
// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01
Sąranka
Atkreipkite dėmesį, kad statybininkas vis dar komentuojamas. Todėl nekomentuokite pagal savo lentą (ESP-01 arba nodeMCU ESP12-E).
void setup () {Serial.begin (9600); vėlavimas (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // dažnis // konfigūracija arba GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // konfigūruoti arba 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 com LOW writeBlockData (GP1, B00000001); }
Kilpa
Kilpoje mes keičiame kaiščius kas 1 sekundę. Taigi, kai įjungtas GP0 pin0, GP1 kaiščiai yra išjungti. Kai GP1 pin0 įjungtas, GP0 kaiščiai yra išjungti.
void loop () {// seta o pino 7 do GP0 como HIGH e os demais como LOW writeBlockData (GP0, B10000000); // seta todos os pinos do GPIO1 com LOW writeBlockData (GP1, B00000000); vėlavimas (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); vėlavimas (1000); } // pabaigos kilpa
23 žingsnis: SVARBU
Naudoti kintamieji ir biblioteka yra tokie patys kaip programos, kurią atlikome ESP32, taip pat metodai configurePort ir writeBlockData.
24 žingsnis: failai
Atsisiųskite failus:
INO (ESP8266)
INO (ESP32)
Rekomenduojamas:
Spintelės tvirtinimas, skirtas ESP32 ir ESP8266: 7 žingsniai
Spintelės tvirtinimas, skirtas ESP32 ir ESP8266: Kartais gali būti naudinga įdiegti ESP32 arba ESP8266 pagrįstą projektą į spintelę ir suteikti jai profesionalią išvaizdą. Šis nedidelis gaubto komplektas padės jums pateikti ESP pagrįstą projektą ant DIN bėgelio. Komplekte yra prototipų PCB su inte
„Arduino“(JETI) PPM į USB vairasvirtės keitiklis, skirtas FSX: 5 žingsniai
„Arduino“(JETI) PPM į USB vairasvirtės keitiklis, skirtas FSX: nusprendžiau perjungti savo JETI DC-16 siųstuvą iš 2 režimo į 1 režimą, kuris iš esmės perjungia droselį ir liftą iš kairės į dešinę ir atvirkščiai. Kadangi nenorėjau sudaužyti vieno iš savo modelių dėl tam tikros sumaišties kairiajame/dešiniajame smegenyse, aš buvau
„Arduino“valdiklis, skirtas automatinei 360 ° produkto fotografijai: 5 žingsniai (su nuotraukomis)
„Arduino“valdiklis, skirtas automatinei 360 ° gaminio fotografijai: Sukurkime arduino valdiklį, valdantį žingsninį variklį ir fotoaparato užraktą. Kartu su žingsniniu varikliu valdomu patefonu tai galinga ir nebrangi sistema, skirta automatinei 360 ° produkto fotografavimui ar fotogrametrijai. Automatinis
„MicroPython“pigiai 3 USD ESP8266 „WeMos D1 Mini“, skirtas 2x temperatūros registravimui, „Wi -Fi“ir mobiliesiems statistikai: 4 žingsniai
„MicroPython“už pigius 3 USD ESP8266 „WeMos D1 Mini“, skirtas 2x temperatūros registravimui, „Wi -Fi“ir mobiliojo ryšio statistika: Naudodami mažą pigų ESP8266 lustą / įrenginį, galite nemokamai registruoti temperatūros duomenis lauke, patalpoje, šiltnamyje, laboratorijoje, vėsinimo patalpoje ar bet kurioje kitoje vietoje. Šis pavyzdys bus naudojamas aušinimo kambario temperatūrai registruoti viduje ir išorėje. Įrenginys bus pritaikytas
ESP32 nelaisvės portalas, skirtas konfigūruoti statinius ir DHCP IP nustatymus: 8 žingsniai
ESP32 nelaisvės portalas, skirtas konfigūruoti statinius ir DHCP IP nustatymus: ESP 32 yra įrenginys su integruotu „WiFi“ir BLE. Tai savotiška palaima daiktų interneto projektams. Tiesiog nurodykite savo SSID, slaptažodį ir IP konfigūracijas ir integruokite dalykus į debesį. Tačiau valdyti IP nustatymus ir vartotojo kredencialus gali būti