acest articol arată cum să citiți intrările analogice cu ESP32 folosind Arduino IDE. Citirea analogică este utilă pentru a citi valorile de la rezistențe variabile precum potențiometre sau senzori analogici.
citirea intrărilor analogice cu ESP32 este la fel de ușoară ca utilizarea funcției analogRead(GPIO), care acceptă ca argument GPIO pe care doriți să îl citiți.
avem și alte tutoriale despre cum să folosiți ace analogice cu placa ESP:
- ESP8266 ADC-citiți valorile analogice cu Arduino IDE, MicroPython și lua
- ESP32 lecturi analogice cu MicroPython
Urmăriți videoclipul
puteți viziona tutorialul video sau continuați să citiți această pagină pentru instrucțiunile scrise.
intrări analogice (ADC)
citirea unei valori analogice cu ESP32 înseamnă că puteți măsura diferite niveluri de tensiune între 0 V și 3,3 V.
tensiunea măsurată este apoi atribuită unei valori cuprinse între 0 și 4095, în care 0 V corespunde la 0, iar 3,3 V corespunde la 4095. Orice tensiune între 0 V și 3,3 V va primi valoarea corespunzătoare între ele.
ADC este neliniar
în mod ideal, v-ați aștepta la un comportament liniar atunci când utilizați pinii ADC ESP32. Totuși, asta nu se întâmplă. Ceea ce veți obține este un comportament așa cum se arată în următoarea diagramă:
acest comportament înseamnă că ESP32 dvs. nu este capabil să distingă 3.3 V de la 3,2 V. veți obține aceeași valoare pentru ambele tensiuni: 4095.
același lucru se întâmplă și pentru valorile de tensiune foarte scăzută: pentru 0 V și 0,1 V veți obține aceeași valoare: 0. Trebuie să țineți cont de acest lucru atunci când utilizați pinii ESP32 ADC.
există o discuție despre GitHub despre acest subiect.
analogRead() funcție
citirea unei intrări analogice cu ESP32 folosind IDE Arduino este la fel de simplă ca utilizarea analogRead() funcție. Se acceptă ca argument, GPIO pe care doriți să citiți:
analogRead(GPIO);
ESP32 acceptă măsurători în 18 canale diferite. Doar 15 sunt disponibile în placa DEVKIT V1 DOIT (versiune cu 30 GPIOs).
prindeți pinout-ul plăcii ESP32 și localizați pinii ADC. Acestea sunt evidențiate cu o margine roșie în figura de mai jos.
Aflați mai multe despre referința ESP32 GPIOs: ESP32 Pinout.
acești pini de intrare analogici au rezoluție de 12 biți. Aceasta înseamnă că atunci când citiți o intrare analogică, intervalul său poate varia de la 0 la 4095.
notă: pinii ADC2 nu pot fi utilizați atunci când se utilizează Wi-Fi. Deci, dacă utilizați Wi-Fi și aveți probleme cu obținerea valorii de la un ADC2 GPIO, puteți lua în considerare utilizarea unui ADC1 GPIO, care ar trebui să vă rezolve problema.
alte funcții utile
există și alte funcții mai avansate de utilizat cu pinii ADC care pot fi utile în alte proiecte.
- analogReadResolution(rezoluție): Setați biții eșantionului și rezoluția. Poate fi o valoare cuprinsă între 9 (0 – 511) și 12 biți (0-4095). Implicit este rezoluția pe 12 biți.
- analogSetWidth(lățime): setați biții eșantionului și rezoluția. Poate fi o valoare cuprinsă între 9 (0 – 511) și 12 biți (0-4095). Implicit este rezoluția pe 12 biți.
- analogSetCycles(cicluri): setați numărul de cicluri pe eșantion. Implicit este 8. Gama: 1 la 255.
- analogSetSamples(eșantioane): setați numărul de eșantioane din interval. Implicit este 1 eșantion. Are un efect de creștere a sensibilității.
- analogSetClockDiv(atenuare): setați divizorul pentru ceasul ADC. Implicit este 1. Gama: 1 la 255.
- analogSetAttenuation(atenuare): setează atenuarea de intrare pentru toți pinii ADC. Implicit este ADC_11db. Valori acceptate:
- ADC_0db: setează nici o atenuare. ADC poate măsura până la aproximativ 800 mV (intrare 1V = citire ADC de 1088).
- ADC_2_5db: tensiunea de intrare a ADC va fi atenuată, extinzând intervalul de măsurare până la aprox. 1100 mV. (Intrare 1V = citirea ADC a 3722).
- ADC_6db: tensiunea de intrare a ADC va fi atenuată, extinzând intervalul de măsurare până la aprox. 1350 mV. (Intrare 1V = citirea ADC a 3033).
- ADC_11db: tensiunea de intrare a ADC va fi atenuată, extinzând intervalul de măsurare până la aprox. 2600 mV. (Intrare 1V = citirea ADC a 1575).
- analogSetPinAttenuation( pin, atenuare): setează atenuarea de intrare pentru pinul specificat. Valoarea implicită este ADC_11db. Valorile de atenuare sunt aceleași din funcția anterioară.
- adcAttachPin(pin): atașați un pin la ADC (șterge, de asemenea, orice alt mod analog care ar putea fi activat). Returnează rezultatul adevărat sau fals.
- adcStart(pin), adcBusy(pin) și resultadcEnd(pin): pornește o conversie ADC pe magistrala pinului atașat. Verificați dacă conversia pe magistrala ADC a pinului rulează în prezent (returnează TRUE sau FALSE). Obțineți rezultatul conversiei: returnează un număr întreg pe 16 biți.
există un videoclip foarte bun care explică aceste funcții pe care le puteți viziona aici.
citiți valorile analogice dintr-un potențiometru cu ESP32
pentru a vedea cum se leagă totul, vom face un exemplu simplu pentru a citi o valoare analogică dintr-un potențiometru.
pentru acest exemplu, aveți nevoie de următoarele părți:
- ESP32 doit DEVKIT V1 Board (citiți cele mai bune plăci de dezvoltare ESP32)
- potențiometru
- Breadboard
- Jumper fire
puteți utiliza link-urile precedente sau du – te direct la MakerAdvisor.com/tools pentru a găsi toate piesele pentru proiectele dvs. la cel mai bun preț!
schematică
conectați un potențiometru la ESP32. Știftul din mijloc al potențiometrului trebuie conectat la GPIO 34. Puteți utiliza următoarea diagramă schematică ca referință.
Cod
vom programa ESP32 folosind Arduino IDE, deci asigurați-vă că aveți ESP32 add-on instalat înainte de a continua:
- instrucțiuni Windows-placa ESP32 în Arduino IDE
- instrucțiuni Mac și Linux – placa ESP32 în Arduino IDE
deschideți Arduino IDE și copiați următorul cod.
// Potentiometer is connected to GPIO 34 (Analog ADC1_CH6) const int potPin = 34;// variable for storing the potentiometer valueint potValue = 0;void setup() { Serial.begin(115200); delay(1000);}void loop() { // Reading potentiometer value potValue = analogRead(potPin); Serial.println(potValue); delay(500);}
Vizualizați codul brut
acest cod citește pur și simplu valorile din potențiometru și imprimă aceste valori în Monitorul Serial.
în cod, începeți prin definirea GPIO la care este conectat potențiometrul. În acest exemplu, GPIO 34.
const int potPin = 34;
în setup(), inițializați o comunicație serială la o rată de transmisie de 115200.
Serial.begin(115200);
în loop(), utilizați funcția analogRead()pentru a citi intrarea analogică de la potPin.
potValue = analogRead(potPin);
în cele din urmă, imprimați valorile citite de la potențiometru în Monitorul serial.
Serial.println(potValue);
încărcați codul furnizat pe ESP32. Asigurați-vă că aveți placa potrivită și portul COM selectate în meniul Instrumente.
testarea exemplului
după încărcarea codului și apăsarea butonului de resetare ESP32, deschideți Monitorul Serial la o rată de transmisie de 115200. Rotiți potențiometrul și vedeți schimbarea valorilor.
valoarea maximă pe care o veți obține este 4095, iar valoarea minimă este 0.
înfășurarea
în acest articol ați învățat cum să citiți intrările analogice folosind ESP32 cu Arduino IDE. În rezumat:
- placa ESP32 DEVKIT V1 DOIT (versiunea cu 30 de pini) are 15 pini ADC pe care îi puteți utiliza pentru a citi intrările analogice.
- acești pini au o rezoluție de 12 biți, ceea ce înseamnă că puteți obține valori de la 0 la 4095.
- pentru a citi o valoare în IDE Arduino, utilizați pur și simplu analogRead() funcția.
- pinii ADC ESP32 nu au un comportament liniar. Probabil că nu veți putea distinge între 0 și 0,1 V sau între 3,2 și 3,3 V. trebuie să țineți cont de acest lucru atunci când utilizați pinii ADC.
sperăm că veți găsi acest scurt ghid util. Dacă doriți să aflați mai multe despre ESP32, înscrieți-vă la cursul nostru: aflați ESP32 cu Arduino IDE.
alte ghiduri ESP32 care vă pot plăcea:
- ESP32 ecran OLED cu Arduino IDE
- ESP32 cu senzor de temperatură și umiditate DHT folosind Arduino IDE
- server web ESP32 cu lecturi DHT
- 20+ proiecte ESP32 și tutoriale
Vă mulțumim pentru lectură.