În acest tutorial, vom explora cum să folosim array-urile în programarea ESP32 cu Arduino. Array-urile vă permit să stocați mai multe valori într-o singură variabilă, facilitând gestionarea datelor, mai ales atunci când aveți de-a face cu colecții de elemente similare. Acest tutorial vă va ghida prin definirea, accesarea și modificarea array-urilor, precum și prin utilizarea buclelor pentru a interacționa eficient cu acestea. Înțelegerea acestor concepte vă va îmbunătăți considerabil abilitatea de a programa cu ESP32.
Vom acoperi în mod specific utilizarea diferitelor tipuri de bucle, cum ar fi for, while și do while, pentru a itera prin elementele array-ului. Acest lucru vă va ajuta să automatizați sarcinile și să faceți programele mai eficiente. Pentru a vedea aceste concepte în acțiune, asigurați-vă că urmăriți videoclipul la 2:30 pentru o demonstrație practică.
Hardware Explicat
Componenta hardware principală pe care o vom folosi în acest tutorial este microcontrolerul ESP32. ESP32 este un microcontroler puternic și de cost redus, care dispune atât de capacități Wi-Fi, cât și Bluetooth, fiind potrivit pentru o gamă largă de aplicații IoT. Placa poate îndeplini sarcini similare cu un Arduino Uno, oferind în același timp funcționalități suplimentare, cum ar fi conectivitatea în cloud.
În acest tutorial specific, vom utiliza un array pentru a controla ieșirile prin pinii digitali. Fiecare pin poate fi setat la nivel înalt sau scăzut, permițându-ne să creăm diverse modele sau comportamente bazate pe datele stocate în array. Pinii GPIO ai ESP32 vor fi configurați pentru ieșire, permițându-ne să manipulăm dispozitivele sau componentele conectate.
Instrucțiuni de Cablare
ESP32-07_74HC595_walking_light_wiring
Pentru a vă cabla ESP32 pentru acest tutorial, începeți prin conectarea pinilor digitali. Conectați pinul STcp (27) la pinul ST_CP al registrului de deplasare. Pinul SHcp (26) ar trebui conectat la pinul SH_CP al registrului de deplasare. În final, conectați pinul DS (25) la pinul DS al registrului de deplasare. Asigurați-vă că masa ESP32 este conectată la masa registrului de deplasare pentru a oferi o referință comună.
Asigurați-vă că alimentați ESP32 cu o sursă stabilă de 3,3 V. Dacă utilizați componente suplimentare, verificați că acestea sunt compatibile cu nivelurile de tensiune ale ESP32. Este important să verificați de două ori conexiunile înainte de a alimenta sistemul pentru a evita eventualele daune (în videoclip la 4:10).
Exemple de Cod și Explicații
În fragmentul de cod furnizat, definim un array numit datArray care conține valori binare. Fiecare valoare din array corespunde unui model diferit care poate fi emis prin pinii GPIO. Array-ul este definit astfel:
Acest array conține reprezentări binare, unde fiecare bit corespunde unei stări a pinului (pornit sau oprit). În funcția loop(), iterăm prin array pentru a emite aceste modele folosind o buclă for:
for(int num = 0; num < 10; num++) {
digitalWrite(STcp, LOW);
shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
digitalWrite(STcp, HIGH);
delay(1000);
}
În această buclă, trimitem continuu date din datArray către registrul de deplasare, creând un efect de lumină care se deplasează. delay(1000) introduce o pauză între fiecare model, permițând ca schimbările să fie vizibile. Pentru codul complet, vă rugăm să consultați mai jos, deoarece acesta se va încărca dinamic.
Demonstrație / Ce să Vă Așteptați
După finalizarea cablării și încărcarea codului, ar trebui să vedeți un efect de lumină care se deplasează pe dispozitivele conectate. Fiecare bit din array se va aprinde secvențial, creând un model vizual captivant. Fiți atenți la conexiunile inversate, deoarece acestea pot duce la comportamente neașteptate (în videoclip la 8:15).
807-ESP32 Tutorial 7/55 - Walking Light using 74HC595 and learn array
Limba: C++
const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP
const int DS = 25; //DS
int datArray[] = {B00000000, B00000001, B00000011, B00000111, B00001111, B00011111, B00111111, B01111111, B11111111};
void setup ()
{
//set pins to output
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
void loop()
{
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
delay(1000);
}
}