Sisukord:
- Samm 1: Sissejuhatus
- 2. etapp: omadused
- Samm: ESP01 -l võib olla 128 GPIO -d
- 4. samm: MCP23016
- 5. samm: KELL
- 6. samm: aadress
- Samm 7: käsud
- 8. samm: kategooriad:
- 9. samm: kommunikatsiooni struktuur
- 10. samm: programm
- Samm: ESP01
- 12. samm: ESP01 paigaldamine
- Samm 13: NodeMCU ESP-12E
- 14. samm: sõlmeMCU ESP-12E paigaldamine
- Samm 15: WiFi-sõlmMCU-32S ESP-WROOM-32
- 16. samm: WiFi-ühendussõlmMCU-32S ESP-WROOM-32
- 17. samm: raamatukogud ja muutujad
- 18. samm: seadistamine
- Samm 19: ConfigurePort
- Samm 20: WriteBlockData & CheckButton
- 21. samm: ReadPin ja ValueFromPin
- 22. samm: programm ESP8266
- 23. samm: TÄHTIS
- 24. samm: failid
Video: IO Expander ESP32, ESP8266 ja Arduino jaoks: 24 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
Kas soovite laiendada oma ESP32, ESP8266 või Arduino IO -sid? Ja kas olete mõelnud 16 uue GPIO võimalusele, mida saab I2C bussi abil juhtida? Täna tutvustan teile GPIO laiendit MCP23016. Samuti näitan teile, kuidas mikrokontrollerit MCP23016 -ga suhelda. Räägin ka programmi loomisest, kus kasutame laiendajaga suhtlemiseks ainult kahte selle mikrokontrolleri kontakti. Kasutame neid LED -ide ja nupu juhtimiseks.
Samm 1: Sissejuhatus
Seade MCP23016 pakub 16 bitti GPIO laiendamiseks, kasutades I2C siini. Iga bitti saab konfigureerida individuaalselt (sisend või väljund).
MCP23016 sisaldab mitut 8-bitist seadet sisendi, väljundi ja polaarsuse valimiseks.
Laiendajad pakuvad lihtsat lahendust, kui IO -sid on vaja näiteks lülitite, andurite, nuppude ja LED -ide jaoks.
2. etapp: omadused
16 sisend- / väljundnõela (16 sisendstandardit)
Kiire I2C siini taktsagedus (0–400 kbit/s)
Kolm riistvara aadressi tihvti võimaldavad kasutada kuni kaheksat seadet
Katkesta pordi jäädvustaja
Polaarsuse pöördregister sisendpordi andmete polaarsuse seadistamiseks
Ühildub enamiku mikrokontrolleritega
Samm: ESP01 -l võib olla 128 GPIO -d
Selle laiendi suurust näitab näiteks selle kasutamine koos ESP01 -ga, mida saab ühendada kuni kaheksa laiendiga ainult kahe IOS -iga, ulatudes 128 GPIO -ni.
4. samm: MCP23016
Siin on meil laiendaja skeem, millel on kaks kaheksa bitist rühma. See teeb kokku 16 sadamat. Lisaks katkestusnõelale on sellel CLK -tihvt, mis ühendab kondensaatori ja takisti, mis on sisemiselt ühendatud loogikapordiga. Selle eesmärk on moodustada kell, kasutades kristallostsillaatori ideed, mis vajab 1MHz kella. TP tihvti kasutatakse kella mõõtmiseks. Tihvtid A0, A1 ja A2 on binaaraadressid.
5. samm: KELL
Seetõttu kasutab MCP23016 sisemise kella kiiruse määramiseks välist RC -ahelat. Seadme nõuetekohaseks toimimiseks on vaja (tavaliselt) 1 MHz sisemist kella. Sisemist kella saab mõõta TP -tihvti pealt. REXT ja CEXT soovitatud väärtused on toodud allpool.
6. samm: aadress
MCP23016 aadressi määratlemiseks kasutame seejärel tihvte A0, A1 ja A2. Jätke need aadressi muutmiseks lihtsalt HIGH või LOW.
Aadress moodustatakse järgmiselt:
MCP_aadress = 20 + (A0 A1 A2)
Kui A0 A1 A2 võib võtta HIGH / LOW väärtusi, moodustab see kahendarvu vahemikus 0 kuni 7.
Näiteks:
A0> GND, A1> GND, A2> GND (tähendab 000, siis 20 + 0 = 20)
Või muidu, A0> HIGH, A1> GND, A2> HIGH (tähendab 101, siis 20 + 5 = 25)
Samm 7: käsud
Allpool on tabel suhtluskäskudega. Kasutame GP0 ja GP1, samuti IODIR0 ja IODIR1.
8. samm: kategooriad:
GP0 / GP1 - andmepordiregistrid
On kaks registrit, mis võimaldavad juurdepääsu kahele GPIO -pordile.
Registri näit annab selle pordi tihvtide oleku.
Bitt = 1> HIGH Bit = 0> LOW
OLAT0 / OLAT1 - väljundi LACTCH REGISTERS
On kaks registrit, mis võimaldavad juurdepääsu kahe pordi väljundportidele.
IPOL0 / IPOL1 - sisendpolaarsusregistrid
Need registrid võimaldavad kasutajal konfigureerida sisendpordi andmete (GP0 ja GP1) polaarsust.
IODIR0 / IODIR1
Pin -režiimi kontrollivad kaks registrit. (Sisend või väljund)
Bitt = 1> SISENDBIT = 0> VÄLJUND
INTCAP0 / INTCAP1 - jäädvustusregistrite katkestamine
Need on registrid, mis sisaldavad katkestuse tekitanud pordi väärtust.
IOCON0 / IOCON1 - I / O Expander Control Register
See juhib MCP23016 funktsionaalsust.
Seadistusbitt 0 (IARES> Katkestustegevuse eraldusvõime) juhib GP -pordi tihvtide diskreetimissagedust.
Bit0 = 0> (vaikimisi) Maksimaalne porditegevuse tuvastamise aeg on 32 ms (väike energiatarve)
Bit0 = 1> maksimaalne aktiivsuse tuvastamise aeg pordis on 200usec (suurem energiatarve)
9. samm: kommunikatsiooni struktuur
Näitan siin Wire klassi, mis on meie tuumiku Arduino I2C side, mis võimaldab ka laiendajal töötada koos Arduino Uno ja Mega. Viimasel on aga juba mitu IO -d. Siin käsitleme kiibi aadresse, juurdepääsu kontrolli, mis on registrite koodid, samuti andmeid.
10. samm: programm
Meie programm koosneb ESP32 suhtlemisest MCP23016 -ga, et kasutada rohkem GPIO -sid. Seejärel on meil nupp ja mõned LED -id ühendatud MCP23016 -ga. Me kontrollime neid kõiki ainult I2C siiniga. Seega kasutatakse ainult kahte ESP32 tihvti. Allpool olevat pildiahelat näete videost.
Samm: ESP01
Siin näitan ESP01 Pinouti.
12. samm: ESP01 paigaldamine
Selles näites on meil GPIO0 ühendatud SDA -ga ja GPIO2 SCL -iga. Meil on ka releeplaat, summer ja LED. Teises pordis, GP1.0, on meil veel üks takisti LED.
Samm 13: NodeMCU ESP-12E
Siin on meil NodeMCU ESP-12E pinout.
14. samm: sõlmeMCU ESP-12E paigaldamine
Sel juhul on ainus erinevus esimesest näitest see, et olete ühendanud D1 ja D2 vastavalt SDA -s ja SCL -is.
Samm 15: WiFi-sõlmMCU-32S ESP-WROOM-32
Siin on WiFi sõlme pinoutMCU-32S ESP-WROOM-32.
16. samm: WiFi-ühendussõlmMCU-32S ESP-WROOM-32
Seekord on peamine erinevus kahest muust näitest nupp ja kolm vilkuvat LED -i. Siin on SDA ühendatud GPIO19 -ga, SCL aga GPIO23 -ga.
17. samm: raamatukogud ja muutujad
Esiteks kaasame Wire.h, kes vastutab i2c -side eest, ja määrame ka MCP23016 i2c -aadressi. Näitan mitmeid käske, isegi mõnda, mida me selles projektis ei kasuta.
#include // määrake Wire.h kogu kasutamine. // endereço I2C do MCP23016 #define MCPAddress 0x20 // COMMAND BYTE to REGISTER SUHTED: Tabel: 1-3 of Microchip MCP23016 - DS20090A // ENDEREÇOS DE REGISTRADORES #define GP0 0x00 // DATA PORT REGISTER 0 #0 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 #definine /I/O SUUNASREGISTREERIMINE 0 #define IODIR1 0x07 // I/O SUUNA REGISTREERIMINE 1 #define INTCAP0 0x08 // KATKEMISE VÕTMISE REGISTREERIMINE 0 #define INTCAP1 0x09 // KATKEMISVÕTLUSREGISTREERIMINE 1 #defineeritud IOC REGISTER 0 #define IOCON1 0x0B // I/O EXPANDER CONTROL REGISTER 1
18. samm: seadistamine
Siin on meil funktsioonid nelja erineva tüüpi mikrokontrolleri lähtestamiseks. Samuti kontrollime sagedust, seadistame GPIO -d ja seadistame tihvtid. Loopis kontrollime nupu olekut.
void setup () {Serial.begin (9600); viivitus (1000); Traat.algus (19, 23); // ESP32 // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (); // arduino // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // sagedus // konfiguratsioon või GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // konfiguratsioon GPIO1 como INPUT või GP1.0 ja 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); } // lõpptsükkel
Samm 19: ConfigurePort
Selles etapis konfigureerime GPIO tihvtide režiimi ja tuvastame portide režiimi.
// GPIO konfiguratsioon (GP0 või GP1) // muud parameetrid passamos: // port: GP0 või GP1 // kohandatud: 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) // nt: 0x01 ou B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entrada, või restando como saida void configurePort (uint8_t port, uint8_t custom) {if (custom == INPUT) {writeBlockData (port, 0xFF); } else if (custom == VÄLJUND) {writeBlockData (port, 0x00); } else {writeBlockData (port, kohandatud); }}
Samm 20: WriteBlockData & CheckButton
Siin saadame andmed iCP -siini kaudu MCP23016 -le, kontrollime nupu olekut ja näitame järgmist sammu, võttes samal ajal arvesse vajutamise või mitte.
// envia dados para o MCP23016 através do barramento i2c // cmd: COMANDO (registraator) // andmed: dados (0-255) void writeBlockData (uint8_t cmd, uint8_t data) {Wire.beginTransmission (MCPAddress); Wire.write (cmd); Wire.write (andmed); Wire.endTransmission (); viivitus (10); }
// verifica se o botão foi pressionado // parameeter GP: GP0 või GP1 void checkButton (uint8_t GP) {// faz a leitura do pino 0 no GP fornecido uint8_t btn = readPin (0, GP); // see botão pressionado, set para HIGH as portas GP0 if (btn) {writeBlockData (GP0, B11111111); } // caso contrario deixa todas em estado LOW else {writeBlockData (GP0, B00000000); }}
21. samm: ReadPin ja ValueFromPin
Siin käsitleme konkreetse tihvti lugemist ja biti väärtuse tagastamist soovitud asendisse.
// 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 kiip 1 bait olekGP = Wire.read (); return valueFromPin (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; }
22. samm: programm ESP8266
Siit näeme, kuidas loodi programm, mida kasutasime ESP-01-s ja sõlmes MCU ESP-12E, mis võimaldab meil mõista, kuidas erinevused nende vahel on minimaalsed.
Muudame ainult i2c kommunikatsioonikonstruktori rida, mis on Wire -objekti algusmeetod.
Lihtsalt tühistage rida vastavalt plaadile, mille me koostame.
// Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01
Seadistamine
Pange tähele, et ehitajat kommenteeritakse endiselt. Seetõttu tühistage kommentaar vastavalt oma plaadile (ESP-01 või nodeMCU ESP12-E).
void setup () {Serial.begin (9600); viivitus (1000); // Wire.begin (D2, D1); // nodemcu ESP8266 // Wire.begin (0, 2); // ESP-01 Wire.setClock (200000); // sagedus // konfiguratsioon või GPIO0 como OUTPUT (todos os pinos) configurePort (IODIR0, OUTPUT); // konfiguratsioon või 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
Tsüklis vahetame tihvte iga 1 sekundi järel. Seega, kui GP0 pin0 on sisse lülitatud, on GP1 tihvtid välja lülitatud. Kui GP1 pin0 on sisse lülitatud, on GP0 tihvtid välja lülitatud.
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); viivitus (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); viivitus (1000); } // lõpptsükkel
23. samm: TÄHTIS
Kasutatavad muutujad ja teek on samad, mis programmis, mida tegime ESP32 puhul, samuti meetodid configurePort ja writeBlockData.
24. samm: failid
Laadige failid alla:
INO (ESP8266)
INO (ESP32)
Soovitan:
LoRa 3–8 km traadita side ja odav E32 (sx1278/sx1276) seade Arduino, Esp8266 või Esp32 jaoks: 15 sammu
LoRa 3Km kuni 8Km traadita side madala hinnaga E32 (sx1278/sx1276) seadmega Arduino, Esp8266 või Esp32 jaoks: loon raamatukogu EBYTE E32 haldamiseks, tuginedes LoRa seadme Semtech seeriale, väga võimas, lihtne ja odav seade. 3 km versioon siin, 8 km versioon siin Nad saavad töötada 3000–8000 m kaugusel ja neil on palju funktsioone
Pythoniga alustamine ESP8266 ja ESP32 jaoks: 6 sammu
Pythoniga alustamine ESP8266 ja ESP32 jaoks: Bacground ESP8266 ja selle noorem suur vend ESP32 on odavad WiFi-mikrokiibid, millel on täielik TCP/IP-virn ja mikrokontrolleri võimalus. ESP8266 kiip jõudis esmakordselt tegijate kogukonna tähelepanu alla 2014. aastal. Sellest ajast alates on madal hind (
Kapi kinnitus ESP32 ja ESP8266 jaoks: 7 sammu
Kappide kinnitus ESP32 ja ESP8266 jaoks: Mõnikord võib olla kasulik paigaldada oma ESP32 või ESP8266 põhine projekt kappi ja anda sellele professionaalne välimus. See väike ümbriskomplekt aitab teil tuua oma ESP -põhise projekti DIN -rööpale. Komplekt sisaldab prototüüpimist sisaldavat trükkplaati koos
Kasutage 1 analoogsisendit 6 nupu jaoks Arduino jaoks: 6 sammu
Kasutage Arduino jaoks kuue nupu jaoks ühte analoogsisendit: olen sageli mõelnud, kuidas saaksin oma Arduino jaoks rohkem digitaalseid sisendeid. Hiljuti tuli mulle pähe, et peaksin saama kasutada ühte analoogsisendit mitme digitaalse sisendi toomiseks. Otsisin kiiresti ja leidsin, kus inimesed asuvad
Oranž PI kuidas: Koostage Sunxi tööriist Windowsi jaoks Windowsi jaoks: 14 sammu (piltidega)
Orange PI HowTo: Koostage Sunxi tööriist Windowsi jaoks Windowsi jaoks: EELTINGIMUSED: Teil on vaja Windowsi (lauaarvuti). Interneti -ühendus. Oranž PI -plaat. Viimane on valikuline, kuid olen kindel, et teil on see juba olemas. Vastasel juhul ei loe te seda juhendit. Kui ostate oranži PI patu