Spanning, stroom en pinnen zonder ingewikkelde theorie
We hebben inmiddels een led aangesloten en met code laten knipperen. Daarmee hebben we ongemerkt al gewerkt met spanning, stroom, weerstand en een…
We hebben inmiddels een led aangesloten en met code laten knipperen. Daarmee hebben we ongemerkt al gewerkt met spanning, stroom, weerstand en een programmeerbare uitgang.
Deze begrippen worden vaak uitgelegd met formules en technische definities. Die hebben zeker hun waarde, maar je hoeft niet eerst een volledig theorieboek te begrijpen voordat je veilig met een ESP32 kunt werken.
In dit hoofdstuk kijken we daarom vooral naar wat er in onze schakeling gebeurt en welke praktische regels je nodig hebt.
Aan het einde wil ik dat je kunt uitleggen:
- wat spanning en stroom van elkaar onderscheidt;
- waarom een led een weerstand nodig heeft;
- waarom GND een belangrijke gezamenlijke verbinding is;
- welke aansluitingen van de ESP32 voeding leveren;
- welke pinnen we als ingang of uitgang kunnen gebruiken;
- waarom niet iedere pin voor iedere taak geschikt is;
- waarom een signaal van 5 volt gevaarlijk kan zijn;
- hoe je met een multimeter controleert wat er werkelijk gebeurt.
Elektriciteit hoeft niet onzichtbaar te blijven
Elektrische spanning en stroom kunnen we niet rechtstreeks zien. We zien alleen de gevolgen.
Een led gaat branden. Een motor begint te draaien. Een sensor verstuurt een meetwaarde. De ESP32 start opnieuw op wanneer de voeding instabiel wordt.
Doordat elektriciteit onzichtbaar is, zijn we snel geneigd om aannames te maken:
Er staat vast spanning op deze draad.
Of:
Deze sensor gebruikt waarschijnlijk niet zoveel stroom.
Meten helpt ons om zulke aannames te controleren.
Daarom hoef je in dit hoofdstuk niet alle formules uit je hoofd te leren. Het belangrijkste is dat je leert welke vraag je wilt beantwoorden en welke meting daarbij past.
Spanning: het verschil dat iets in beweging kan brengen
Spanning is een elektrisch verschil tussen twee punten. We drukken spanning uit in volt, afgekort met de letter V.
Dat woord verschil is belangrijk. Spanning bestaat altijd tussen twee meetpunten.
Wanneer we zeggen dat de 3V3-pin van de ESP32 3,3 volt levert, bedoelen we eigenlijk:
Tussen de 3V3-pin en GND meten we ongeveer 3,3 volt.
Je kunt spanning vergelijken met druk in een watersysteem. Zonder drukverschil stroomt er geen water. Op dezelfde manier is een elektrisch spanningsverschil nodig om stroom door een gesloten schakeling te laten lopen.
Deze vergelijking is niet perfect, maar helpt ons bij de eerste stappen:
- spanning lijkt op het drukverschil;
- stroom lijkt op de hoeveelheid water die daadwerkelijk stroomt;
- weerstand maakt het moeilijker voor die stroom om te lopen.
In onze eerste schakeling zorgde de ESP32 voor een verschil van ongeveer 3,3 volt tussen GPIO 23 en GND wanneer de pin HIGH was.
Daardoor kon er stroom door de weerstand en de led lopen.
Stroom: wat er werkelijk door de schakeling loopt
Elektrische stroom is de verplaatsing van elektrische lading door een gesloten stroomkring. We drukken stroom uit in ampère, afgekort met de letter A.
Bij kleine elektronische schakelingen gebruiken we vaak milliampère:
1 ampère = 1000 milliampère
De afkorting voor milliampère is mA.
Spanning en stroom zijn dus niet hetzelfde:
- spanning is het elektrische verschil tussen twee punten;
- stroom is wat er door de gesloten schakeling loopt.
Er kan spanning aanwezig zijn zonder dat er stroom door een onderdeel loopt. Denk aan een batterij die nog nergens op is aangesloten. Er staat spanning tussen de polen, maar er is geen gesloten stroomkring.
Pas wanneer we een gesloten route maken, kan er stroom gaan lopen.
Een gesloten stroomkring
In onze ledschakeling loopt de stroom via deze route:
GPIO 23 → weerstand → led → GND
Wanneer GPIO 23 HIGH wordt gemaakt, ontstaat er een spanningsverschil. De stroom kan vervolgens door de weerstand en de led naar GND lopen.
Onderbreken we de route op één plaats, dan stopt de stroom.
Dat kan gebeuren door:
- een losse jumperdraad;
- een led die niet goed in het breadboard zit;
- twee onderdelen die niet dezelfde verbonden rij delen;
- een onderbroken voedingsrail;
- een draad die op de verkeerde pin is aangesloten;
- een GPIO die LOW is.
Dit verklaart waarom een schakeling volledig kan stoppen door één draad die één gaatje verkeerd zit.
GND is ons gezamenlijke referentiepunt
GND staat voor ground, oftewel massa.
Binnen onze schakeling gebruiken we GND als gezamenlijk referentiepunt. Wanneer we zeggen dat een signaal 3,3 volt is, bedoelen we 3,3 volt ten opzichte van GND.
Dat wordt vooral belangrijk wanneer verschillende apparaten met elkaar communiceren.
Stel dat de ESP32 een signaal naar een sensormodule stuurt. Beide apparaten moeten het eens zijn over wat 0 volt betekent. Daarom verbinden we meestal niet alleen de signaaldraad en de voeding, maar ook de GND-aansluitingen met elkaar.
Zonder gedeelde massa kan een signaal onbetrouwbaar zijn of helemaal niet worden herkend.
Een praktische regel is:
Apparaten die elektrische signalen met elkaar uitwisselen, hebben meestal een gezamenlijke GND nodig.
Dat betekent niet dat je zonder controle alle massa-aansluitingen van ieder willekeurig systeem met elkaar moet verbinden. Bij hogere spanningen, geïsoleerde voedingen of apparatuur op netspanning gelden aanvullende regels.
Binnen onze laagspanningsschakelingen met de ESP32 is een gezamenlijke GND echter een belangrijk uitgangspunt.
Weerstand: stroom begrenzen
Een weerstand maakt het moeilijker voor stroom om door een schakeling te lopen. De waarde van een weerstand drukken we uit in ohm. Het symbool daarvoor is Ω.
Een weerstand van 330 ohm kan bijvoorbeeld worden geschreven als:
330 Ω
Grotere waarden worden vaak in kilo-ohm weergegeven:
1000 Ω = 1 kΩ
In onze eerste schakeling gebruikten we een weerstand van 220 tot 330 ohm om de stroom door de led te begrenzen.
Zonder deze weerstand zou de stroom te groot kunnen worden. Daardoor kan de led beschadigd raken en kan ook de GPIO van de ESP32 te zwaar worden belast.
De weerstand verbruikt niet simpelweg “de spanning die overblijft”. Hij zorgt samen met de led en de voedingsspanning voor een begrenzing van de stroom.
Een klein beetje rekenen
We kunnen de benodigde weerstand berekenen met een eenvoudige vorm van de wet van Ohm:
weerstand = spanning / stroom
Voor een led moeten we eerst rekening houden met de spanning die over de led zelf staat.
Stel:
- GPIO 23 levert ongeveer 3,3 volt;
- over een rode led staat tijdens het branden ongeveer 2 volt;
- we willen ongeveer 5 milliampère laten lopen.
Dan blijft over de weerstand ongeveer het volgende spanningsverschil staan:
3,3 V − 2,0 V = 1,3 V
Vijf milliampère is in ampère:
5 mA = 0,005 A
De berekening wordt dan:
1,3 V / 0,005 A = 260 Ω
Een weerstand van 260 ohm is geen waarde die je in iedere verzameling aantreft. We kiezen daarom een gangbare waarde in de buurt, bijvoorbeeld 270 of 330 ohm.
Met 330 ohm loopt iets minder stroom. De led kan daardoor iets minder fel branden, maar wordt ook minder zwaar belast.
Je hoeft deze berekening niet voor iedere oefening opnieuw te maken. Het voorbeeld laat vooral zien waarom we niet zomaar een willekeurige weerstand plaatsen.
Waarom 220 en 330 ohm beide kunnen werken
In het vorige hoofdstuk gebruikten we een weerstand tussen 220 en 330 ohm.
Met 220 ohm loopt bij dezelfde led meestal wat meer stroom dan met 330 ohm. De led kan daardoor iets feller branden.
De precieze stroom hangt ook af van:
- de kleur en het type led;
- de werkelijke uitgangsspanning;
- de spanning die over de led staat;
- de nauwkeurigheid van de weerstand.
Voor een indicatieled hoeft de maximale helderheid meestal niet te worden bereikt. Een lagere stroom is vaak al ruim voldoende om te kunnen zien of de uitgang aan of uit staat.
Een led zo fel mogelijk laten branden is daarom zelden het doel. We willen vooral een duidelijk en veilig signaal.
Vermogen: waar energie in warmte verandert
Onderdelen die stroom geleiden, zetten een deel van de elektrische energie om in warmte. De hoeveelheid energie per seconde noemen we vermogen. Vermogen drukken we uit in watt, afgekort met W.
Bij onze kleine ledschakeling is het vermogen in de weerstand zeer beperkt. Een gebruikelijke kleine weerstand is daarvoor ruim voldoende.
Bij motoren, verwarmingen, lampen en relais kan het vermogen veel groter worden. Dan zijn niet alleen de spanning en stroom belangrijk, maar ook:
- de dikte van de bedrading;
- het maximale vermogen van onderdelen;
- warmteontwikkeling;
- de capaciteit van de voeding;
- de manier waarop de belasting wordt geschakeld.
De GPIO-pinnen van de ESP32 zijn niet bedoeld om zulke belastingen rechtstreeks van vermogen te voorzien.
Een GPIO is een signaal, geen voeding
GPIO staat voor General-Purpose Input/Output.
Een GPIO-pin kan door onze code als ingang of uitgang worden gebruikt. Als uitgang kan hij bijvoorbeeld een led of het ingangssignaal van een andere elektronische schakeling aansturen.
Een GPIO-pin is geen kleine stopcontactaansluiting.
Sluit daarom niet rechtstreeks onderdelen aan zoals:
- een motor;
- een pomp;
- een magneetklep;
- een lange ledstrip;
- een verwarmingselement;
- een relais-spoel zonder geschikte aansturing;
- andere onderdelen die merkbaar vermogen vragen.
Daarvoor gebruiken we een tussenstap, zoals een transistor, MOSFET, driver of geschikte relaismodule. De GPIO geeft dan alleen het stuursignaal. Een afzonderlijke voeding levert de benodigde stroom aan het onderdeel.
Je kunt het vergelijken met een lichtschakelaar. De schakelaar bepaalt wat er gebeurt, maar levert niet zelf alle energie waarmee de lamp brandt.
De logische niveaus van de ESP32
De GPIO-pinnen van de ESP32 werken met logische signalen rond 3,3 volt.
In code gebruiken we:
HIGH
en:
LOW
Als uitgang betekent dit in grote lijnen:
- HIGH: de pin wordt ongeveer 3,3 volt ten opzichte van GND;
- LOW: de pin wordt ongeveer 0 volt ten opzichte van GND.
Als ingang interpreteert de ESP32 een voldoende lage spanning als LOW en een voldoende hoge spanning als HIGH.
Het gebied daartussen willen we zoveel mogelijk vermijden. Een signaal dat niet duidelijk hoog of laag is, kan onbetrouwbare resultaten geven.
De ESP32 is niet 5-volt-tolerant
Veel klassieke Arduino-borden werken met logische signalen van 5 volt. De ESP32 gebruikt signalen van 3,3 volt.
Daarom geldt een belangrijke regel:
Sluit nooit rechtstreeks een signaal van 5 volt aan op een GPIO-pin van de ESP32.
Een te hoge spanning kan de pin of de microcontroller beschadigen. Soms lijkt een schakeling desondanks een tijdje te werken, maar dat maakt de aansluiting niet veilig.
Let vooral op sensormodules die met 5 volt worden gevoed. De voedingsspanning van een module en de spanning op zijn signaaluitgang hoeven niet hetzelfde te zijn, maar kunnen dat wel zijn.
Controleer daarom altijd:
- met welke spanning de module mag worden gevoed;
- welke spanning op de signaalpin verschijnt;
- of de module geschikt is voor 3,3-voltlogica;
- of een spanningsdeler of level shifter nodig is.
Het feit dat een stekker fysiek past, zegt niets over de elektrische geschiktheid.
De voedingspinnen van het ontwikkelbord
Op een ESP32-ontwikkelbord vind je naast de GPIO-pinnen meestal ook enkele aansluitingen voor voeding.
3V3
De 3V3-pin is verbonden met de gereguleerde 3,3-voltvoeding van het ontwikkelbord.
We kunnen deze pin gebruiken om kleine geschikte onderdelen en sensoren te voeden. De beschikbare stroom hangt af van het specifieke ontwikkelbord, de spanningsregelaar, de USB-voeding en wat de ESP32 zelf op dat moment gebruikt.
Ga daarom niet uit van een onbeperkte stroomvoorziening.
Voor grotere belastingen gebruiken we een afzonderlijke geschikte voeding.
GND
De GND-pinnen vormen het gemeenschappelijke referentiepunt van de schakeling. Een ontwikkelbord heeft vaak meerdere GND-pinnen. Deze zijn intern met elkaar verbonden.
5V, VIN of VUSB
Veel ESP32-ontwikkelborden hebben een pin met een aanduiding zoals 5V, VIN of VUSB.
De precieze functie kan per bord verschillen. De pin kan bijvoorbeeld verbonden zijn met de 5-voltvoeding van USB of worden gebruikt om het bord extern te voeden.
Vertrouw daarom niet alleen op de plaats van de pin of op een schema van een vergelijkbaar bord. Controleer de documentatie of het schema van jouw specifieke ontwikkelbord.
Een 5-voltvoedingspin maakt de GPIO-pinnen niet geschikt voor signalen van 5 volt.
EN of RST
EN staat voor enable. Op veel ESP32-ontwikkelborden is deze aansluiting gekoppeld aan de resetfunctie.
Wanneer EN laag wordt gemaakt, wordt de chip uitgeschakeld of opnieuw ingesteld. De knop met EN of RST gebruikt deze functie om de ESP32 opnieuw te starten.
Behandel EN dus niet als een gewone GPIO.
Pinnummers en plaats op het bord
In onze code gebruikten we:
const int ledPin = 23;
Het getal 23 verwijst naar GPIO 23. Het betekent niet “de drieëntwintigste fysieke pin vanaf de bovenkant”.
Op het ontwikkelbord staat naast de aansluiting meestal een aanduiding zoals:
23
of:
IO23
De fysieke plaats van GPIO 23 kan per ontwikkelbord verschillen. Gebruik daarom altijd de opgedrukte aanduidingen of een pinout die exact bij jouw bord hoort.
Een pinout van een bord dat er ongeveer hetzelfde uitziet, kan toch een andere volgorde tonen.
Niet iedere pin is hetzelfde
De ESP32 kan veel signalen intern naar verschillende GPIO-pinnen leiden. Daardoor zijn we redelijk vrij in onze keuze.
Toch is niet iedere pin voor iedere taak geschikt.
Sommige pinnen:
- kunnen alleen als ingang worden gebruikt;
- zijn verbonden met het flashgeheugen;
- beïnvloeden de manier waarop de ESP32 opstart;
- worden gebruikt voor USB-communicatie en seriële berichten;
- hebben een speciale analoge functie;
- kunnen tijdens het opstarten kort van toestand veranderen.
Een programma kan technisch correct zijn en toch problemen veroorzaken wanneer we een ongeschikte pin kiezen.
Praktische indeling voor onze ESP32-WROOM-32
Onderstaande indeling is een praktische leidraad voor een algemeen ESP32-ontwikkelbord met ESP32-WROOM-32-module. Niet iedere pin wordt op ieder ontwikkelbord naar buiten uitgevoerd.
| Pinnen | Praktisch gebruik |
|---|---|
| GPIO 13, 14, 16–19, 21–23, 25–27, 32 en 33 | Voor veel eenvoudige digitale in- en uitgangen bruikbaar |
| GPIO 34, 35, 36 en 39 | Alleen als ingang te gebruiken |
| GPIO 0, 2, 5, 12 en 15 | Opstartpinnen; met extra aandacht gebruiken |
| GPIO 1 en 3 | Vaak gebruikt voor seriële communicatie en uploaden |
| GPIO 6 tot en met 11 | Verbonden met het flashgeheugen; niet gebruiken |
| GPIO 32 tot en met 39 | Onderdeel van ADC1 en daarom vaak handig voor analoge metingen |
| Verschillende ADC2-pinnen | Analoge meting kan conflicteren met WiFi |
Deze tabel is geen vervanging voor de pinout van jouw specifieke ontwikkelbord. Hij helpt vooral om te begrijpen waarom we in deze gids niet willekeurig een vrije aansluiting kiezen.
Ingangen die geen uitgang kunnen zijn
GPIO 34, 35, 36 en 39 zijn bij de klassieke ESP32 alleen als ingang te gebruiken.
Je kunt deze pinnen bijvoorbeeld gebruiken om een signaal of analoge spanning te meten, maar niet om een led aan te sturen.
De volgende code is voor zo’n pin daarom geen goede keuze:
pinMode(34, OUTPUT);
Bovendien hebben GPIO 34 tot en met 39 geen interne pull-up- of pull-downweerstanden. Wanneer een schakeling zo’n weerstand nodig heeft, moeten we die extern toevoegen.
GPIO 36 en GPIO 39 kunnen op ontwikkelborden ook worden aangeduid als:
- VP voor GPIO 36;
- VN voor GPIO 39.
Pinnen die het opstarten beïnvloeden
GPIO 0, 2, 5, 12 en 15 zijn zogeheten strapping pins. De ESP32 controleert de toestand van deze pinnen tijdens het opstarten om bepaalde instellingen te bepalen.
Als een externe schakeling zo’n pin tijdens het opstarten naar de verkeerde toestand dwingt, kan de ESP32:
- niet normaal starten;
- in de uploadmodus terechtkomen;
- een foutmelding geven;
- pas starten nadat het onderdeel is losgekoppeld.
Deze pinnen zijn niet volledig onbruikbaar. Ze vragen alleen meer aandacht.
Voor een eerste project kiezen we liever een pin waarbij het aangesloten onderdeel de opstartprocedure niet kan beïnvloeden. Daarom gebruikten we GPIO 23 voor onze led.
Pinnen voor de seriële verbinding
GPIO 1 en GPIO 3 worden op veel ESP32-ontwikkelborden gebruikt voor de seriële communicatie met de computer.
Daarbij is meestal:
- GPIO 1 de verzendpin, TX;
- GPIO 3 de ontvangstpin, RX.
Deze verbinding wordt gebruikt tijdens het uploaden en voor de seriële monitor.
Wanneer je externe onderdelen op deze pinnen aansluit, kunnen er onverwachte signalen ontstaan of kan de communicatie met de computer worden verstoord.
Laat GPIO 1 en GPIO 3 daarom tijdens de eerste projecten vrij.
Je kunt ze later gebruiken wanneer je precies weet welke functie je nodig hebt en welke gevolgen dat heeft.
Pinnen van het flashgeheugen
De ESP32 heeft extern flashgeheugen nodig om onder andere ons programma te bewaren. Op de ESP32-WROOM-32-module zijn GPIO 6 tot en met 11 met dit geheugen verbonden.
Deze pinnen zijn niet beschikbaar voor onze gewone schakelingen.
Op veel ontwikkelborden worden ze daarom niet eens naar de aansluitrijen uitgevoerd. Zie je ze toch in een technisch schema, beschouw ze dan niet automatisch als vrije GPIO-pinnen.
Een verstoring van het flashgeheugen kan ervoor zorgen dat de ESP32 vastloopt of helemaal niet meer opstart.
Analoge en digitale signalen
Tot nu toe hebben we gewerkt met digitale signalen. Die behandelen we als twee toestanden:
- laag;
- hoog.
Een drukknop is een goed voorbeeld. Voor onze code is hij ingedrukt of niet ingedrukt.
Sommige sensoren geven een analoge spanning af. Die spanning kan binnen een bereik voortdurend veranderen.
Een lichtsensor kan bijvoorbeeld:
- een lage spanning geven wanneer het donker is;
- een hogere spanning geven wanneer er meer licht is;
- allerlei tussenliggende waarden produceren.
De ESP32 gebruikt een analoog-naar-digitaalomzetter, oftewel ADC, om zo’n spanning om te zetten naar een getal dat onze code kan verwerken.
ADC staat voor Analog-to-Digital Converter.
ADC1 en ADC2
De klassieke ESP32 heeft twee groepen analoge ingangen: ADC1 en ADC2.
Dat onderscheid wordt belangrijk zodra we WiFi gebruiken. ADC2 deelt interne hardware met de WiFi-functie. Daardoor kunnen analoge metingen op ADC2-pinnen tijdens WiFi-gebruik problemen geven.
Voor een analoge sensor die tegelijk met WiFi moet werken, kiezen we daarom bij voorkeur een pin van ADC1.
ADC1 is beschikbaar op GPIO 32 tot en met 39. Houd daarbij rekening met het feit dat GPIO 34, 35, 36 en 39 alleen ingangen zijn.
Voor een eenvoudige analoge sensor zijn GPIO 32, 33, 34 of 35 vaak praktische keuzes:
- GPIO 32 en 33 kunnen ook als uitgang worden gebruikt;
- GPIO 34 en 35 zijn alleen ingang;
- GPIO 34 en 35 hebben geen interne pull-up- of pull-downweerstand.
We kiezen later een concrete pin die bij onze sensor en ons eindproject past.
Een ingang mag niet zweven
Een digitale ingang moet een herkenbare hoge of lage toestand hebben.
Wanneer een ingang nergens duidelijk mee verbonden is, kan hij kleine elektrische storingen oppikken. De gemeten toestand kan dan schijnbaar willekeurig wisselen tussen HIGH en LOW.
Zo’n ingang noemen we zwevend.
Dit kan bijvoorbeeld gebeuren wanneer je een drukknop als volgt aansluit:
- één zijde van de knop naar 3,3 volt;
- de andere zijde naar een GPIO;
- verder niets.
Wanneer de knop wordt ingedrukt, krijgt de GPIO een duidelijke hoge toestand. Wanneer de knop wordt losgelaten, is de GPIO echter nergens duidelijk mee verbonden.
We lossen dat op met een pull-up- of pull-downweerstand.
Een pull-up houdt de ingang standaard hoog. Een pull-down houdt hem standaard laag. De knop kan de toestand vervolgens bewust veranderen.
Veel GPIO-pinnen van de ESP32 hebben interne pull-up- en pull-downweerstanden die we vanuit de code kunnen inschakelen.
Bijvoorbeeld:
pinMode(buttonPin, INPUT_PULLUP);
De pin wordt dan intern zwak met 3,3 volt verbonden. We kunnen een drukknop tussen de GPIO en GND plaatsen.
Dat geeft de volgende logica:
- knop los: HIGH;
- knop ingedrukt: LOW.
Dat voelt misschien omgekeerd, maar levert een eenvoudige en betrouwbare schakeling op.
De ingangspinnen GPIO 34 tot en met 39 vormen hierop een uitzondering. Die hebben geen interne pull-up- of pull-downweerstanden.
Uitgangen kunnen kort veranderen tijdens het opstarten
Wanneer de ESP32 wordt ingeschakeld, begint ons programma niet onmiddellijk. Eerst start de interne hardware en wordt de opgeslagen code voorbereid.
Tijdens die opstartfase kunnen sommige pinnen kort een andere toestand hebben dan ons programma later instelt.
Bij een indicatieled is een korte flits meestal niet belangrijk. Bij een motor, verwarming, slot of ander krachtig onderdeel kan een onverwacht signaal wel gevolgen hebben.
Bij dergelijke toepassingen moeten we daarom niet alleen kijken naar wat onze code tijdens loop() doet. We moeten ook nadenken over:
- de toestand van de pin tijdens het opstarten;
- wat er gebeurt tijdens een reset;
- wat er gebeurt als de ESP32 vastloopt;
- wat de aangesloten driver doet zonder geldig signaal;
- welke toestand veilig is.
Een betrouwbaar project is niet alleen veilig wanneer alles normaal werkt. Het moet ook voorspelbaar reageren tijdens het opstarten en bij een fout.
Een multimeter gebruiken om spanning te meten
Met een multimeter kunnen we controleren of de spanningen in onze schakeling overeenkomen met onze verwachting.
Voor een spanningsmeting gebruiken we meestal:
- de zwarte meetkabel in de aansluiting COM;
- de rode meetkabel in de aansluiting voor spanning en weerstand;
- de stand voor gelijkspanning, vaak aangegeven met V en een rechte lijn.
Plaats bij een spanningsmeting:
- de zwarte meetpen op GND;
- de rode meetpen op het punt dat je wilt onderzoeken.
De multimeter wordt bij een spanningsmeting dus tussen twee punten geplaatst. We noemen dit parallel meten.
Meet nooit spanning terwijl de rode meetkabel nog in de speciale stroomaansluiting van de multimeter zit. Controleer vóór iedere meting zowel de gekozen instelling als de aansluitingen van de meetkabels.
De 3,3-voltvoeding meten
Laat onze ledschakeling aangesloten en verbind de ESP32 via USB met de computer.
Zet de multimeter op het meten van gelijkspanning.
Plaats:
- de zwarte meetpen op een GND-pin of de GND-rail;
- de rode meetpen op de 3V3-pin of de bijbehorende rail.
Je verwacht ongeveer:
3,3 V
De gemeten waarde hoeft niet exact 3,300 volt te zijn. Kleine verschillen zijn normaal.
Meet je ongeveer 0 volt? Controleer dan:
- of de ESP32 voeding krijgt;
- of je werkelijk tussen 3V3 en GND meet;
- of de multimeter op gelijkspanning staat;
- of de meetkabels in de juiste aansluitingen zitten;
- of de voedingsrail niet is onderbroken.
Verschijnt een negatieve waarde, bijvoorbeeld -3,3 V? Dan zijn de rode en zwarte meetpen waarschijnlijk omgewisseld.
Een GPIO meten
We kunnen ook zichtbaar maken wat HIGH en LOW elektrisch betekenen.
Gebruik hiervoor ons knipperprogramma, maar maak de wachttijden langer:
const int ledPin = 23;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(5000);
digitalWrite(ledPin, LOW);
delay(5000);
}
Upload de code.
Plaats daarna:
- de zwarte meetpen op GND;
- de rode meetpen op GPIO 23.
Wanneer de led brandt, verwacht je ongeveer 3,3 volt.
Wanneer de led uit is, verwacht je ongeveer 0 volt.
De langere wachttijd geeft je voldoende tijd om de waarde rustig af te lezen.
We hebben nu hetzelfde gedrag op twee manieren waargenomen:
- de led maakt de toestand zichtbaar;
- de multimeter toont de bijbehorende spanning.
Wanneer beide waarnemingen overeenkomen, wordt onze conclusie sterker.
Weerstand meten
Een multimeter kan ook de waarde van een weerstand meten.
Daarvoor geldt een belangrijke regel:
Meet een weerstand alleen in een spanningsloze schakeling.
Koppel de USB-kabel los voordat je de weerstandsstand gebruikt.
Voor de betrouwbaarste meting haal je minstens één pootje van de weerstand los uit de schakeling. Andere verbindingen op het breadboard kunnen de meting anders beïnvloeden.
Zet de multimeter op de weerstandsstand en raak met iedere meetpen één uiteinde van de weerstand aan.
De volgorde van de meetpennen maakt bij een gewone weerstand niet uit.
Een weerstand met een nominale waarde van 330 ohm hoeft niet exact 330,0 Ω aan te geven. Weerstanden hebben een tolerantie, waardoor de werkelijke waarde iets mag afwijken.
Stroom meten vraagt een andere aansluiting
Voor een stroommeting moet de stroom daadwerkelijk door de multimeter lopen. De meter wordt daarom in serie met de schakeling opgenomen.
Dat is anders dan bij een spanningsmeting.
Bij een spanningsmeting plaatsen we de meter tussen twee punten. Bij een stroommeting moeten we de stroomkring onderbreken en de meter onderdeel van die stroomkring maken.
Een verkeerd aangesloten stroommeter kan vrijwel een kortsluiting vormen.
Sluit een multimeter in de stroomstand daarom nooit rechtstreeks aan tussen:
- 3V3 en GND;
- 5V en GND;
- de twee polen van een voeding.
Voor onze eerste projecten is het meestal niet nodig om de stroom direct te meten. We kunnen de stroom door een eenvoudige ledschakeling ook veilig benaderen met de gemeten spanning en de bekende weerstand.
Wanneer we later stroom gaan meten, doen we dat stap voor stap met een geschikte opstelling.
Voeden via USB of een externe voeding
Tijdens onze oefeningen voeden we de ESP32 via USB. Dat is eenvoudig en de USB-naar-serieelverbinding blijft beschikbaar voor het uploaden en de seriële monitor.
Later wil je een project misschien zelfstandig laten werken met een externe voeding.
Gebruik dan een voeding die:
- de juiste spanning levert;
- voldoende stroom kan leveren;
- stabiel blijft wanneer WiFi actief wordt;
- correct op het ontwikkelbord wordt aangesloten;
- een betrouwbare kabel en connector heeft.
Sluit niet zonder kennis van het specifieke bord gelijktijdig verschillende voedingen aan. Er kunnen ongewenste stromen tussen de USB-poort, de externe voeding en de spanningsregelaar ontstaan.
Controleer altijd hoe jouw ontwikkelbord extern mag worden gevoed.
Waarom de ESP32 soms opnieuw opstart
WiFi kan korte pieken in het stroomverbruik veroorzaken. Wanneer de voeding of USB-kabel onvoldoende stabiel is, kan de voedingsspanning tijdelijk dalen.
De ESP32 kan dan onverwacht opnieuw opstarten.
Dat probleem kan zich bijvoorbeeld uiten als:
- een programma dat steeds opnieuw begint;
- telkens dezelfde opstartmelding in de seriële monitor;
- een WiFi-verbinding die nooit volledig tot stand komt;
- gedrag dat verdwijnt wanneer je een andere USB-kabel gebruikt;
- een zogenoemde brownout-melding.
De code kan in zo’n geval volledig correct zijn. Het probleem zit dan in de voeding.
Dit laat zien waarom we bij foutzoeken niet alleen naar software kijken. Code, bedrading en voeding vormen samen één systeem.
Lees altijd drie soorten informatie
Voordat je een nieuw onderdeel op de ESP32 aansluit, zoek je minimaal drie dingen op:
- Voedingsspanning
Met welke spanning moet of mag het onderdeel worden gevoed?
- Signaalspanning
Welke spanning staat er op de pin die met de ESP32 communiceert?
- Stroomverbruik
Hoeveel stroom gebruikt het onderdeel, zowel normaal als tijdens pieken?
Deze waarden vertellen verschillende dingen.
Een sensor kan bijvoorbeeld met 5 volt worden gevoed, maar communiceren met een veilig 3,3-voltsignaal. Een andere module kan het volledige voedingsniveau op de uitgang plaatsen en daardoor onveilig zijn voor de ESP32.
Ga daarom nooit alleen af op de vermelding “werkt met 5 volt” of “geschikt voor Arduino”.
Een praktische pincontrole
Voordat we een pin in een nieuw project gebruiken, stellen we de volgende vragen:
- Staat deze GPIO werkelijk op mijn ontwikkelbord?
- Is de pin bedoeld voor voeding, besturing of een GPIO-functie?
- Kan deze pin als ingang, uitgang of beide worden gebruikt?
- Is de pin verbonden met het flashgeheugen?
- Heeft de pin invloed op het opstarten?
- Wordt de pin gebruikt voor uploaden of de seriële monitor?
- Wil ik een analoge waarde meten terwijl WiFi actief is?
- Kan de aangesloten schakeling de pin boven 3,3 volt brengen?
- Moet de pin een belasting aansturen die meer vermogen nodig heeft?
- Wat gebeurt er met het aangesloten onderdeel tijdens het opstarten?
Je hoeft niet ieder antwoord uit je hoofd te kennen. Het belangrijkste is dat je weet dat deze vragen bestaan en ze controleert voordat je iets aansluit.
Veelvoorkomende misverstanden
“Een 3,3-voltpin levert altijd precies 3,3 volt”
De werkelijke spanning kan iets afwijken. De voeding, belasting, spanningsregelaar en meetmethode hebben invloed.
“Een onderdeel gebruikt alleen de stroom die de ESP32 veilig kan leveren”
Een onderdeel past zijn behoefte niet automatisch aan de veilige grens van een GPIO aan. Zonder goede begrenzing kan het te veel stroom proberen te trekken.
“Als een 5-voltsensor werkt, is de aansluiting veilig”
Een schakeling kan tijdelijk lijken te werken en de ESP32 toch buiten zijn veilige grenzen belasten.
“Alle GND-pinnen hebben een andere functie”
Op een normaal ontwikkelbord zijn de verschillende GND-pinnen intern met elkaar verbonden. De meerdere aansluitingen zijn vooral praktisch.
“Iedere genummerde pin kan als gewone uitgang worden gebruikt”
Sommige pinnen zijn alleen ingang, verbonden met het geheugen of betrokken bij het opstarten.
“Een foutloze upload bewijst dat de schakeling veilig is”
De Arduino IDE kan niet zien of een sensor verkeerd is aangesloten of een GPIO een te hoge spanning ontvangt.
“Wanneer een led uit is, staat er nergens spanning”
De led kan uit zijn terwijl op andere delen van de schakeling wel degelijk spanning staat.
Wat je uit dit hoofdstuk kunt meenemen
Je hoeft nog geen elektronicus te zijn om bewust en veilig met de ESP32 te werken. Een aantal praktische inzichten brengt je al ver:
- spanning is een elektrisch verschil tussen twee punten;
- stroom loopt alleen door een gesloten stroomkring;
- weerstand begrenst de stroom;
- GND is het gezamenlijke referentiepunt van onze schakeling;
- de GPIO-pinnen van de ESP32 werken met logische signalen van 3,3 volt;
- een ESP32-GPIO mag niet rechtstreeks een 5-voltsignaal ontvangen;
- een GPIO is bedoeld als signaal en niet als voeding voor zware onderdelen;
- niet iedere pin is voor iedere functie geschikt;
- GPIO 34, 35, 36 en 39 zijn alleen ingangen;
- GPIO 6 tot en met 11 zijn verbonden met het flashgeheugen;
- enkele GPIO’s beïnvloeden het opstarten;
- voor analoge metingen tijdens WiFi kiezen we bij voorkeur ADC1;
- een multimeter helpt ons om aannames te vervangen door metingen;
- spanning meten en stroom meten vragen om een verschillende aansluiting van de meter.
De belangrijkste vraag is niet alleen:
Welke draad moet waar?
Vraag jezelf ook af:
Welke spanning verwacht ik hier, hoeveel stroom kan er lopen en is deze pin geschikt voor wat ik ermee wil doen?
In het volgende hoofdstuk gebruiken we deze kennis om een sensor veilig op de ESP32 aan te sluiten en de eerste meetwaarden uit te lezen.
Technische naslag
De actuele technische beperkingen van de klassieke ESP32 zijn terug te vinden in de officiële GPIO-documentatie van Espressif en het gegevensblad van de ESP32-WROOM-32.