den här artikeln visar hur man läser analoga ingångar med ESP32 med Arduino IDE. Analog avläsning är användbar för att läsa värden från Variabla motstånd som potentiometrar eller analoga sensorer.
att läsa analoga ingångar med ESP32 är lika enkelt som att använda analogRead(GPIO) – funktionen, som accepterar som argument, den GPIO du vill läsa.
vi har också andra handledning om hur man använder analoga stift med ESP-kort:
- ESP8266 ADC-Läs analoga värden med Arduino IDE, MicroPython och Lua
- ESP32 analoga avläsningar med MicroPython
titta på videon
du kan titta på video tutorial eller fortsätta läsa denna sida för skriftliga instruktioner.
analoga ingångar (ADC)
att läsa ett Analogt värde med ESP32 betyder att du kan mäta varierande spänningsnivåer mellan 0 V och 3,3 V.
den uppmätta spänningen tilldelas sedan ett värde mellan 0 och 4095, där 0 V motsvarar 0 och 3,3 V motsvarar 4095. Varje spänning mellan 0 V och 3,3 V kommer att ges motsvarande värde däremellan.
ADC är icke-linjär
helst kan du förvänta dig ett linjärt beteende när du använder ESP32 ADC-stiften. Men det händer inte. Vad du får är ett beteende som visas i följande diagram:
detta beteende innebär att din ESP32 inte kan skilja 3.3 V från 3,2 V. du får samma värde för båda spänningarna: 4095.
samma händer för mycket låga spänningsvärden: för 0 V och 0.1 V får du samma värde: 0. Du måste ha detta i åtanke när du använder ESP32 ADC-stiften.
det finns en diskussion om GitHub om detta ämne.
analogRead () – funktion
att läsa en analog ingång med ESP32 med Arduino IDE är lika enkelt som att använda analogRead () – funktionen. Det accepterar som argument, GPIO du vill läsa:
analogRead(GPIO);
ESP32 stöder mätningar i 18 olika kanaler. Endast 15 finns i DEVKIT V1 DOIT-kortet (version med 30 GPIO).
ta tag i din ESP32-bräda och leta reda på ADC-stiften. Dessa är markerade med en röd kant i figuren nedan.
Läs mer om ESP32 GPIOs: ESP32 Pinout referens.
dessa analoga ingångsstift har 12-bitars upplösning. Det betyder att när du läser en analog ingång kan dess intervall variera från 0 till 4095.
Obs: ADC2-stift kan inte användas när Wi-Fi används. Så om du använder Wi-Fi och du har problem med att få värdet från en ADC2 GPIO, kan du överväga att använda en ADC1 GPIO istället, som borde lösa ditt problem.
andra användbara funktioner
det finns andra mer avancerade funktioner att använda med ADC-stiften som kan vara användbara i andra projekt.
- analogReadResolution(upplösning): Ställ in provbitarna och upplösningen. Det kan vara ett värde mellan 9 (0 – 511) och 12 bitar (0-4095). Standard är 12-bitars upplösning.
- analogSetWidth (width): Ställ in provbitarna och upplösningen. Det kan vara ett värde mellan 9 (0 – 511) och 12 bitar (0-4095). Standard är 12-bitars upplösning.
- analogSetCycles (cycles): Ställ in antalet cykler per prov. Standard är 8. Räckvidd: 1 till 255.
- analogSetSamples( samples): Ställ in antalet prover i intervallet. Standard är 1 prov. Det har en effekt av ökad känslighet.
- analogSetClockDiv(dämpning): Ställ in avdelaren för ADC-klockan. Standard är 1. Räckvidd: 1 till 255.
- analogsetatenuation(dämpning): ställer in ingångsdämpningen för alla ADC-stift. Standard är ADC_11db. Godkända värden:
- ADC_0db: ställer ingen dämpning. ADC kan mäta upp till cirka 800 mV (1V-ingång = ADC-avläsning av 1088).
- ADC_2_5db: ADC: s ingångsspänning kommer att dämpas, vilket förlänger mätområdet till upp till ca. 1100 mV. (1V ingång = ADC läsning av 3722).
- ADC_6db: ADC: s ingångsspänning kommer att dämpas, vilket förlänger mätområdet till upp till ca. 1350 mV. (1V ingång = ADC läsning av 3033).
- ADC_11db: ADC: s ingångsspänning kommer att dämpas, vilket förlänger mätområdet till upp till ca. 2600 mV. (1V ingång = ADC läsning av 1575).
- analogSetPinAttenuation (stift, dämpning): ställer in ingångsdämpningen för den angivna stiftet. Standardvärdet är ADC_11db. Dämpningsvärdena är desamma från tidigare funktion.
- adcAttachPin (pin): fäst en pin-kod till ADC (rensar också alla andra analoga lägen som kan vara på). Returnerar sant eller falskt resultat.
- adcStart(pin), adcBusy(pin) och resultadcEnd (pin): startar en ADC-konvertering på bifogad pin-buss. Kontrollera om konvertering på pin: ns ADC-buss körs för närvarande (returnerar sant eller falskt). Få resultatet av konverteringen: returnerar 16-bitars heltal.
det finns en mycket bra video som förklarar dessa funktioner som du kan titta på här.
Läs analoga värden från en Potentiometer med ESP32
för att se hur allt hänger ihop, gör vi ett enkelt exempel för att läsa ett Analogt värde från en potentiometer.
för det här exemplet behöver du följande delar:
- ESP32 doit DEVKIT v1 styrelse (Läs bästa ESP32 utveckling styrelser)
- Potentiometer
- Breadboard
- Bygeltrådar
du kan använda de föregående länkarna eller gå direkt till MakerAdvisor.com/tools för att hitta alla delar till dina projekt till bästa pris!
schematisk
Anslut en potentiometer till din ESP32. Potentiometerns mittstift ska anslutas till GPIO 34. Du kan använda följande schematiska diagram som referens.
kod
vi programmerar ESP32 med Arduino IDE, så se till att du har ESP32-tillägget installerat innan du fortsätter:
- Windows-instruktioner-ESP32-kort i Arduino IDE
- Mac-och Linux-instruktioner-ESP32-kort i Arduino IDE
öppna din Arduino IDE och kopiera följande kod.
// 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);}
Visa raw-kod
denna kod läser helt enkelt värdena från potentiometern och skriver ut dessa värden i seriell bildskärm.
i koden börjar du med att definiera GPIO som potentiometern är ansluten till. I detta exempel, GPIO 34.
const int potPin = 34;
initiera en seriell kommunikation med en överföringshastighet på 115200 i inställningen ().
Serial.begin(115200);
använd funktionen analogRead () i loop()för att läsa den analoga ingången från potPin.
potValue = analogRead(potPin);
slutligen, Skriv ut värdena som läses från potentiometern i seriemonitorn.
Serial.println(potValue);
Ladda upp koden som tillhandahålls till din ESP32. Se till att du har rätt styrelse och COM-port vald i Verktyg-menyn.
testa exemplet
när du har laddat upp koden och tryckt på ESP32 reset-knappen öppnar du Seriemonitorn med en överföringshastighet på 115200. Vrid potentiometern och se värdena förändras.
det maximala värdet du får är 4095 och det lägsta värdet är 0.
förpackning
i den här artikeln har du lärt dig hur du läser analoga ingångar med ESP32 med Arduino IDE. I sammanfattning:
- ESP32 DEVKIT V1 DOIT-kortet (version med 30 stift) har 15 ADC-stift som du kan använda för att läsa analoga ingångar.
- dessa stift har en upplösning på 12 bitar, vilket innebär att du kan få värden från 0 till 4095.
- för att läsa ett värde i Arduino IDE använder du helt enkelt analogRead () – funktionen.
- ESP32 ADC-stiften har inget linjärt beteende. Du kommer förmodligen inte att kunna skilja mellan 0 och 0.1 V, eller mellan 3.2 och 3.3 V. Du måste ha det i åtanke när du använder ADC-stiften.
vi hoppas att du har hittat den här korta guiden användbar. Om du vill lära dig mer om ESP32, anmäl dig till vår kurs: lär dig ESP32 med Arduino IDE.
andra ESP32-guider som du kanske också gillar:
- ESP32 OLED-skärm med Arduino IDE
- ESP32 med DHT-temperatur-och fuktighetssensor med Arduino IDE
- ESP32 webbserver med DHT-avläsningar
- 20+ ESP32-projekt och handledning
Tack för att du läste.