De meest voorkomende fouten
Ons project bestaat inmiddels uit verschillende onderdelen die samen één geheel vormen: Voeding → ESP32 → code → sensor → WiFi → MQTT → ontvanger
Ons project bestaat inmiddels uit verschillende onderdelen die samen één geheel vormen:
Voeding → ESP32 → code → sensor → WiFi → MQTT → ontvanger
Wanneer alles werkt, lijkt die keten bijna vanzelfsprekend. Zodra één onderdeel uitvalt, kan het echter voelen alsof het volledige project defect is.
Toch is “het werkt niet” nog geen bruikbare diagnose.
Misschien ontvangt de ESP32 geen voeding. Misschien werkt de sensor prima, maar komt de meetwaarde niet bij de MQTT-broker aan. Misschien publiceert de ESP32 correct, terwijl Home Assistant naar een ander topic luistert.
In dit hoofdstuk bekijken we fouten die vaak voorkomen bij projecten zoals het onze. Het doel is niet om iedere denkbare storing op te lossen. We leren vooral symptomen herkennen en bepalen waar we als eerste moeten kijken.
In het volgende hoofdstuk maken we daarvan een volledige, herbruikbare foutzoekmethode.
Een fout is vaak kleiner dan hij lijkt
Wanneer de temperatuur niet in Home Assistant verschijnt, bestaat al snel de neiging om de volledige code opnieuw te uploaden of verschillende instellingen tegelijk te veranderen.
Maar misschien werkt bijna alles al:
- de ESP32 is gestart;
- de BME280 wordt uitgelezen;
- WiFi is verbonden;
- MQTT is verbonden;
- de temperatuur wordt gepubliceerd;
- alleen de topicnaam in Home Assistant komt niet overeen.
Van de volledige keten is dan maar één klein onderdeel verkeerd ingesteld.
Probeer een probleem daarom eerst nauwkeurig te beschrijven.
Niet:
De sensor doet het niet.
Maar bijvoorbeeld:
De BME280 wordt gevonden en de temperatuur verschijnt in de seriële monitor, maar er komt geen bericht binnen op het MQTT-topic.
Die tweede omschrijving vertelt ons al welk deel wél werkt en waar we verder moeten zoeken.
Begin met wat je waarneemt
Voordat je iets verandert, noteer je wat je werkelijk ziet.
Denk aan:
- brandt de voedingsled;
- verschijnt de ESP32 als USB-poort;
- lukt het compileren;
- lukt het uploaden;
- verschijnt de opstarttekst;
- wordt de BME280 gevonden;
- zijn de meetwaarden aannemelijk;
- krijgt de ESP32 een IP-adres;
- lukt de MQTT-verbinding;
- verschijnen berichten in een algemene MQTT-client;
- reageert Home Assistant op de juiste topics?
Maak daarbij onderscheid tussen een waarneming en een conclusie.
Een waarneming is:
De voedingsled brandt niet.
Een conclusie is:
De ESP32 is defect.
Die conclusie kan juist zijn, maar er zijn ook andere mogelijke oorzaken, zoals een defecte kabel of een USB-poort zonder voeding.
De belangrijkste categorieën
De fouten in ons project kunnen we grofweg verdelen in:
- voeding en USB;
- breadboard en bedrading;
- ESP32-pinnen;
- Arduino IDE en uploaden;
- code en timing;
- sensor en I²C;
- meetwaarden;
- WiFi;
- MQTT;
- Home Assistant of een andere ontvanger;
- storingen die alleen soms optreden.
Deze categorieën lopen soms in elkaar over. Een instabiele voeding kan bijvoorbeeld lijken op een WiFi-probleem, omdat de ESP32 juist tijdens het verbinden opnieuw opstart.
Daarom kijken we niet alleen naar de meest voor de hand liggende verklaring.
Voeding en USB
De ESP32 doet helemaal niets
Wat je ziet
- de voedingsled op het ontwikkelbord brandt niet;
- er verschijnt geen USB-poort;
- de seriële monitor blijft leeg;
- de ESP32 reageert niet op de resetknop.
Mogelijke oorzaken
- de USB-kabel is niet goed aangesloten;
- de USB-poort of adapter werkt niet;
- de kabel is beschadigd;
- het ontwikkelbord krijgt geen voeding;
- er is kortsluiting in de externe schakeling;
- de USB-aansluiting op het bord is beschadigd;
- het ontwikkelbord is defect.
Eerste controle
Koppel de volledige externe schakeling los en sluit alleen de ESP32 via een bekende, werkende USB-kabel rechtstreeks op de computer aan.
Als het bord dan wel start, zit de oorzaak waarschijnlijk in de externe schakeling of voeding.
Blijft het bord uit, test dan:
- een andere USB-kabel;
- een andere USB-poort;
- een andere computer of geschikte voeding.
Verander steeds één onderdeel tegelijk.
De led brandt, maar de computer ziet geen ESP32
Wat je ziet
- de voedingsled op het ontwikkelbord brandt;
- in de Arduino IDE verschijnt geen nieuwe poort;
- uploaden is niet mogelijk.
Waarschijnlijke oorzaak
De kabel levert mogelijk wel voeding, maar ondersteunt geen gegevensoverdracht.
Dit is een veelvoorkomende fout bij kabels die alleen bedoeld zijn om apparaten op te laden.
Eerste controle
Gebruik een USB-kabel waarvan je zeker weet dat deze gegevens kan versturen.
Een brandende led bewijst alleen dat er spanning aankomt. Hij bewijst niet dat de dataverbinding werkt.
Controleer daarnaast of het besturingssysteem de USB-naar-serieelchip van het bord herkent. Een afwijkend ontwikkelbord kan een passend stuurprogramma nodig hebben.
De ESP32 start steeds opnieuw op
Wat je ziet
- dezelfde opstarttekst verschijnt steeds opnieuw;
- WiFi komt nooit volledig tot stand;
- de sensor werkt kort en valt daarna weg;
- de seriële monitor toont mogelijk een brownoutmelding;
- het probleem ontstaat vooral wanneer WiFi actief wordt.
Mogelijke oorzaken
- een slechte of te lange USB-kabel;
- een instabiele voeding;
- te veel stroomverbruik via het ontwikkelbord;
- een externe belasting die rechtstreeks uit de ESP32 wordt gevoed;
- kortstondige spanningsdalingen;
- een verkeerde aansluiting op EN of RST;
- software die bewust of door een fout een reset veroorzaakt.
Eerste controle
Koppel externe onderdelen los en laat alleen de ESP32 draaien.
Blijft hij dan stabiel, sluit de onderdelen één voor één opnieuw aan.
Test ook een korte, goede USB-kabel en een betrouwbare voeding. WiFi vraagt korte stroompieken. Een voeding die zonder WiFi voldoende lijkt, kan tijdens het verbinden toch instabiel worden.
De ESP32 wordt warm
Een ESP32 kan tijdens normaal gebruik enigszins warm aanvoelen. Duidelijke of snel oplopende hitte is geen normaal teken.
Mogelijke oorzaken
- een verkeerd aangesloten voedingspin;
- een te hoge voedingsspanning;
- kortsluiting;
- een GPIO die tegen een andere uitgang in werkt;
- een beschadigd ontwikkelbord.
Wat je doet
Koppel onmiddellijk de voeding los.
Controleer de volledige schakeling voordat je hem opnieuw aansluit. Sluit het bord niet herhaaldelijk aan om te kijken of het “deze keer wel goed gaat”.
Breadboard en bedrading
Een draad zit één gaatje verkeerd
Wat je ziet
- de schakeling ziet er bijna hetzelfde uit als het voorbeeld;
- het onderdeel reageert niet;
- na het aandrukken of verplaatsen van een draad verandert het gedrag.
Waarom dit vaak gebeurt
Op een breadboard liggen de gaatjes dicht bij elkaar. Een draad kan overtuigend op de juiste plaats lijken te zitten, terwijl hij elektrisch in een andere rij zit.
Eerste controle
Volg iedere verbinding vanaf de pin van de ESP32 tot de pin van het onderdeel.
Controleer niet alleen visueel of twee onderdelen “naast elkaar” staan. Stel vast of ze werkelijk in dezelfde intern verbonden rij zitten.
De voedingsrail is onderbroken
Wat je ziet
- een onderdeel aan de ene kant van het breadboard werkt;
- een onderdeel verderop ontvangt geen voeding;
- de bedrading lijkt correct;
- op het eerste deel van de rail meet je 3,3 volt en op het tweede deel niet.
Oorzaak
Bij sommige breadboards zijn de lange voedingsrails halverwege onderbroken.
De gekleurde lijn kan over de volledige lengte doorlopen, terwijl de metalen verbinding onder het kunststof stopt.
Eerste controle
Meet de spanning aan beide uiteinden van de rail.
Is de rail onderbroken, verbind dan beide delen met een jumperdraad.
Er is geen gezamenlijke GND
Wat je ziet
- een sensor ontvangt voeding maar communiceert niet;
- metingen zijn instabiel;
- een signaal werkt alleen wanneer de ESP32 en sensor op dezelfde voeding zijn aangesloten;
- twee apparaten lijken afzonderlijk te werken, maar niet samen.
Oorzaak
De apparaten hebben geen gezamenlijk referentiepunt voor hun signalen.
Eerste controle
Controleer of GND van de ESP32 en GND van de sensor of externe schakeling met elkaar zijn verbonden.
Bij onze BME280 hoort altijd een GND-verbinding naast 3,3 volt, SDA en SCL.
De voedingsdraden zijn verwisseld
Wat je ziet
- een onderdeel reageert niet;
- de voedingsspanning meet negatief wanneer je de verwachte polariteit gebruikt;
- een onderdeel wordt warm;
- de ESP32 valt uit zodra het onderdeel wordt aangesloten.
Wat je doet
Koppel de voeding direct los.
Controleer de opschriften op de module. Vertrouw niet alleen op draadkleuren of de plaats van de pinnen in een afbeelding.
Rood en zwart helpen ons bij het organiseren, maar een rode draad wordt niet automatisch positief doordat hij rood is.
Een jumperdraad maakt slecht contact
Wat je ziet
- het project werkt soms wel en soms niet;
- bewegen van een draad beïnvloedt het resultaat;
- het probleem verdwijnt tijdelijk na het aandrukken;
- de I²C-sensor wordt afwisselend wel en niet gevonden.
Eerste controle
Vervang de verdachte jumperdraad door een exemplaar waarvan je weet dat het werkt.
Controleer ook:
- of de metalen aansluiting niet terug in de kunststof behuizing schuift;
- of de pin stevig in het breadboard zit;
- of de aansluitpinnen van de module goed zijn gesoldeerd.
De led is verkeerd om geplaatst
Wat je ziet
- de GPIO wisselt volgens de multimeter tussen ongeveer 0 en 3,3 volt;
- de seriële monitor toont dat de code draait;
- de losse led blijft uit.
Eerste controle
Koppel de voeding los en controleer:
- lange poot: meestal anode;
- korte poot: meestal kathode;
- afgeplatte zijde: meestal kathode.
Plaats de led in de juiste richting en test opnieuw.
Beide pootjes zitten in dezelfde rij
Wat je ziet
- de led of een ander tweepolig onderdeel reageert niet;
- beide aansluitingen lijken netjes in het breadboard te zitten;
- er staat geen bruikbaar spanningsverschil over het onderdeel.
Oorzaak
Beide aansluitingen zijn via de interne strip van het breadboard met hetzelfde elektrische punt verbonden.
Eerste controle
Plaats de pootjes in afzonderlijke rijen, eventueel aan weerszijden van de middensleuf.
ESP32-pinnen
De code gebruikt een andere GPIO dan de schakeling
Wat je ziet
- de code compileert en uploadt;
- de seriële monitor werkt;
- het aangesloten onderdeel reageert niet;
- een meting op de bedoelde GPIO toont geen verandering.
Oorzaak
De code kan bijvoorbeeld GPIO 23 aansturen terwijl de draad fysiek op GPIO 22 zit.
Eerste controle
Vergelijk de regel:
const int ledPin = 23;
met het opschrift naast de fysieke aansluiting.
De compiler kan niet controleren waar je de draad werkelijk hebt geplaatst.
Het fysieke pinnummer wordt verward met het GPIO-nummer
Wat je ziet
- een voorbeeld noemt GPIO 23;
- de draad is op de drieëntwintigste aansluiting van het bord geplaatst;
- de schakeling werkt niet.
Oorzaak
GPIO 23 betekent de aansluiting met het opschrift 23 of IO23. Het betekent niet de drieëntwintigste fysieke pin in de aansluitrij.
Eerste controle
Gebruik de tekst op het ontwikkelbord of een pinout die exact bij jouw bord hoort.
Een ingangspin wordt als uitgang gebruikt
Wat je ziet
- digitalWrite() op de gekozen pin heeft niet het verwachte resultaat;
- een led reageert niet;
- de code lijkt verder correct.
Mogelijke oorzaak
GPIO 34, 35, 36 en 39 zijn bij de klassieke ESP32 alleen als ingang te gebruiken.
Eerste controle
Verplaats de uitgang tijdelijk naar een bekende, geschikte GPIO, bijvoorbeeld GPIO 23, en pas het pinnummer in de code aan.
Een opstartpin wordt ongunstig belast
Wat je ziet
- de ESP32 start zonder externe schakeling wel;
- met het onderdeel aangesloten start hij niet;
- het bord komt mogelijk in uploadmodus;
- na het loshalen van één draad werkt alles weer.
Mogelijke oorzaak
Een aangesloten onderdeel beïnvloedt tijdens het opstarten een strapping pin, zoals GPIO 0, 2, 5, 12 of 15.
Eerste controle
Koppel de externe verbinding op die pin los en start opnieuw.
Gebruik voor een eerste project liever een GPIO zonder bijzondere opstartfunctie.
GPIO 1 of GPIO 3 veroorzaakt vreemde seriële problemen
Wat je ziet
- uploaden of de seriële monitor werkt onbetrouwbaar;
- vreemde tekens of signalen verschijnen;
- het probleem begint nadat een extern onderdeel is aangesloten.
Oorzaak
GPIO 1 en GPIO 3 worden op veel ESP32-borden gebruikt voor seriële communicatie met de computer.
Eerste controle
Koppel externe onderdelen van deze pinnen los en gebruik voor het project andere GPIO’s.
Een 5-voltsignaal is rechtstreeks aangesloten
Wat je ziet
Het project kan:
- direct uitvallen;
- onbetrouwbaar werken;
- warm worden;
- na verloop van tijd defect raken;
- aanvankelijk normaal lijken te werken.
Belangrijk
Dat de ESP32 een signaal van 5 volt tijdelijk lijkt te accepteren, bewijst niet dat de aansluiting veilig is.
Eerste controle
Meet of zoek op welke spanning de signaaluitgang van het aangesloten onderdeel levert.
Gebruik indien nodig een spanningsdeler, level shifter of andere geschikte schakeling.
Arduino IDE en uploaden
De code compileert niet
Wat je ziet
- de controle stopt met rode foutmeldingen;
- uploaden begint niet;
- een regelnummer wordt genoemd.
Veelvoorkomende oorzaken
- een ontbrekende puntkomma;
- een ontbrekende of extra accolade;
- een verkeerd gespelde functienaam;
- verkeerd hoofdlettergebruik;
- een ontbrekende bibliotheek;
- tekst buiten aanhalingstekens;
- een variabele die niet is gedeclareerd.
Eerste controle
Lees de eerste duidelijke foutmelding en bekijk de genoemde regel én de regel erboven.
Een vergeten puntkomma kan pas op de volgende regel worden ontdekt.
Pas één fout aan en compileer opnieuw. Eén typefout kan verschillende vervolgmeldingen veroorzaken.
Een bibliotheek ontbreekt
Wat je ziet
Een melding zoals:
Adafruit_BME280.h: No such file or directory
of:
PubSubClient.h: No such file or directory
Oorzaak
De compiler kan het genoemde bibliotheekbestand niet vinden.
Eerste controle
Open de Library Manager en installeer de juiste bibliotheek.
Let op de naam en auteur. Verschillende bibliotheken kunnen een vergelijkbare naam hebben maar een andere code verwachten.
Het verkeerde bord is geselecteerd
Wat je ziet
- compileren lukt mogelijk wel;
- uploaden mislukt;
- functies gedragen zich anders dan verwacht;
- de beschikbare pinnen of geheugengrootte lijken niet te kloppen.
Eerste controle
Controleer onder de bordselectie of voor ons algemene bord:
ESP32 Dev Module
of de juiste specifieke borddefinitie is gekozen.
De verkeerde poort is geselecteerd
Wat je ziet
- uploaden probeert een ander apparaat te bereiken;
- de Arduino IDE meldt dat de poort niet bestaat;
- de poort is bezet;
- na het aansluiten gebeurt niets.
Eerste controle
Koppel de ESP32 los en kijk welke poort verdwijnt. Sluit hem opnieuw aan en selecteer de poort die terugkomt.
Uploaden blijft hangen bij Connecting...
Mogelijke oorzaken
- verkeerde poort;
- slechte USB-kabel;
- een extern onderdeel beïnvloedt het opstarten;
- het ontwikkelbord schakelt niet automatisch naar uploadmodus;
- een ander programma houdt de poort bezet.
Eerste controle
Probeer eerst opnieuw te uploaden zonder externe bedrading.
Blijft de IDE bij Connecting... staan, houd dan BOOT ingedrukt totdat het schrijven begint.
Controleer ook of een andere seriële toepassing de poort gebruikt.
Uploaden lukt, maar oude code lijkt te draaien
Wat je ziet
- de verwachte aanpassing verschijnt niet;
- de seriële monitor toont oude tekst;
- het gedrag lijkt onveranderd.
Mogelijke oorzaken
- de verkeerde ESP32 of poort is geselecteerd;
- de aangepaste code is niet opgeslagen of niet geüpload;
- je kijkt naar uitvoer van een ander aangesloten bord;
- de seriële monitor toont oude regels boven in het venster;
- de aanpassing beïnvloedt het huidige gedrag niet zoals gedacht.
Eerste controle
Voeg tijdelijk een herkenbare opstartmelding toe:
Serial.println("Versie 2 gestart");
Upload opnieuw en druk op reset. Verschijnt deze tekst niet, controleer dan bord en poort.
De seriële monitor toont niets
Mogelijke oorzaken
- Serial.begin() ontbreekt;
- de baudrate komt niet overeen;
- de verkeerde poort is geselecteerd;
- de code bereikt de printopdracht niet;
- de ESP32 is vóór het openen van de monitor al langs de melding gegaan.
Eerste controle
Zorg dat de code bevat:
Serial.begin(115200);
en stel de seriële monitor eveneens in op 115200 baud.
Druk daarna op EN of RST om de opstartmeldingen opnieuw te tonen.
De seriële monitor toont onleesbare tekens
Waarschijnlijke oorzaak
De baudrate van de seriële monitor komt niet overeen met:
Serial.begin(115200);
Eerste controle
Stel beide zijden in op dezelfde snelheid.
Enkele afwijkende tekens direct tijdens het opstarten kunnen afkomstig zijn van vroege systeemmeldingen met een andere snelheid. Blijft alle tekst onleesbaar, controleer dan de ingestelde baudrate.
Code en timing
Een puntkomma ontbreekt
Wat je ziet
De compiler meldt een fout bij of vlak na een regel zoals:
const int ledPin = 23
Oplossing
Voeg de ontbrekende puntkomma toe:
const int ledPin = 23;
Onthoud dat de foutmelding soms naar de volgende regel wijst.
Een accolade ontbreekt
Wat je ziet
- de compiler geeft verschillende fouten;
- functies lijken op een verkeerde plaats te staan;
- het einde van het bestand wordt als fout genoemd.
Eerste controle
Controleer of iedere geopende accolade:
{
een bijbehorende afsluitende accolade heeft:
}
Gebruik de automatische inspringing van de Arduino IDE. Een onverwachte inspringing kan zichtbaar maken waar de structuur niet klopt.
setup() en loop() zijn verwisseld
Wat je ziet
- een handeling gebeurt maar één keer terwijl herhaling werd verwacht;
- een initialisatie wordt voortdurend opnieuw uitgevoerd;
- verbindingen worden steeds opnieuw gestart.
Eerste controle
Vraag bij ieder codeblok:
- moet dit één keer bij het opstarten gebeuren;
- of moet dit steeds opnieuw worden gecontroleerd?
Een sensor of netwerkclient initialiseren hoort meestal in setup(). De verbinding onderhouden en periodiek meten hoort in loop().
Een lange delay() blokkeert andere taken
Wat je ziet
- MQTT-opdrachten komen laat of niet aan;
- WiFi-uitval wordt traag ontdekt;
- knoppen reageren langzaam;
- sensormetingen hebben onregelmatige tussenpozen.
Oorzaak
Tijdens:
delay(30000);
voert onze gewone programmacode dertig seconden geen andere taken uit.
Eerste controle
Zoek naar lange delay()-opdrachten en vervang tijdgestuurde taken waar nodig door controles met millis().
Voor een zeer korte en eenvoudige oefening kan delay() prima zijn. Bij WiFi en MQTT wordt niet-blokkerend werken steeds belangrijker.
mqttClient.loop() wordt niet vaak genoeg uitgevoerd
Wat je ziet
- publiceren lijkt soms te werken;
- ontvangen berichten komen niet aan;
- MQTT verbreekt na enige tijd de verbinding;
- opdrachten reageren onbetrouwbaar.
Oorzaak
PubSubClient heeft regelmatige aanroepen van:
mqttClient.loop();
nodig om binnenkomende berichten en de verbinding te onderhouden.
Eerste controle
Controleer of mqttClient.loop() wordt uitgevoerd wanneer MQTT verbonden is en of andere code de hoofdloop niet langdurig blokkeert.
Een interval wordt verkeerd berekend
Wat je ziet
- een taak wordt voortdurend uitgevoerd;
- een taak wordt juist nooit uitgevoerd;
- de timing verandert vreemd na langere tijd.
Eerste controle
Gebruik het patroon:
if (millis() - lastAction >= interval) {
lastAction = millis();
// Voer de taak uit
}
Bewaar tijden in unsigned long.
Vergelijk bij voorkeur het verstreken tijdsverschil en niet een toekomstig absoluut tijdstip.
Een functie wordt niet werkelijk aangeroepen
Wat je ziet
De code compileert soms wel, maar de verwachte functie wordt niet uitgevoerd.
Mogelijke fout
Er staat:
connectToMqtt;
in plaats van:
connectToMqtt();
De ronde haakjes horen bij de functieaanroep.
Eerste controle
Voeg aan het begin van de functie tijdelijk een seriële melding toe en controleer of die verschijnt.
Een variabele heeft het verkeerde type
Wat je ziet
- cijfers achter de komma verdwijnen;
- een timer gedraagt zich vreemd;
- een grote waarde wordt negatief of springt onverwacht;
- een berekening geeft nul.
Voorbeeld
Als je:
int resultaat = 1 / 2;
uitvoert, kan de uitkomst nul worden omdat met gehele getallen wordt gerekend.
Voor een decimale uitkomst gebruiken we bijvoorbeeld:
float resultaat = 1.0 / 2.0;
Eerste controle
Controleer welk soort waarde de variabele moet bewaren:
- bool voor waar of onwaar;
- int voor gewone gehele getallen;
- unsigned long voor millis() en intervallen;
- float voor meetwaarden met decimalen;
- String of een tekenreeks voor tekst.
Code compileert, maar doet niet wat je bedoelde
Dit is een van de belangrijkste soorten fouten.
De compiler controleert of de code geldig is, niet of jouw redenering klopt.
Deze code is technisch geldig:
const int sdaPin = 22;
const int sclPin = 21;
Maar als de bedrading uitgaat van SDA op 21 en SCL op 22, komt de communicatie waarschijnlijk niet tot stand.
Bij een logische fout moeten we code, bedrading en verwachting met elkaar vergelijken.
Sensor en I²C
De BME280 wordt niet gevonden
Wat je ziet
BME280 niet gevonden.
Mogelijke oorzaken
- de sensor ontvangt geen voeding;
- GND ontbreekt;
- SDA en SCL zijn verwisseld;
- de code gebruikt andere I²C-pinnen dan de schakeling;
- het I²C-adres is verkeerd;
- de module is defect;
- je hebt een BMP280 ontvangen;
- de module staat in een andere communicatiemodus;
- een soldeerverbinding of jumperdraad maakt geen contact.
Eerste controle
Werk in deze volgorde:
- Meet ongeveer 3,3 volt op de voedingspinnen van de module.
- Controleer SDA naar GPIO 21.
- Controleer SCL naar GPIO 22.
- Voer de I²C-scanner uit.
- Kijk of 0x76 of 0x77 verschijnt.
- Controleer het werkelijke sensortype.
De scanner maakt onderscheid tussen “geen I²C-apparaat zichtbaar” en “wel communicatie, maar de sensorbibliotheek accepteert het apparaat niet”.
Adres 0x76 en 0x77 zijn verwisseld
Wat je ziet
- de voeding en bedrading zijn correct;
- de I²C-scanner vindt een apparaat;
- de BME280-code meldt toch dat de sensor niet wordt gevonden.
Eerste controle
Vergelijk het gevonden adres met:
const uint8_t bmeAddress = 0x76;
Vindt de scanner 0x77, pas dan alleen het adres aan en upload opnieuw.
SDA en SCL zijn verwisseld
Wat je ziet
- de sensor krijgt voeding;
- de I²C-scanner vindt niets;
- er verschijnen geen geldige metingen.
Eerste controle
Volg de lijnen afzonderlijk:
BME280 SDA → ESP32 GPIO 21
BME280 SCL → ESP32 GPIO 22
Vertrouw niet op de volgorde van de pinnen. Verschillende modules plaatsen de aansluitingen in een andere volgorde.
De verkeerde sensorbibliotheek wordt gebruikt
Wat je ziet
- de code compileert mogelijk niet;
- functies ontbreken;
- de sensor wordt niet herkend;
- luchtvochtigheid is niet beschikbaar.
Mogelijke oorzaak
Er is een bibliotheek voor een ander sensortype geïnstalleerd of de module bevat een BMP280 in plaats van een BME280.
Eerste controle
Controleer:
- de exacte naam van de bibliotheek;
- de auteur;
- het type sensor;
- het voorbeeld dat bij de geïnstalleerde bibliotheek hoort.
De sensor werkt soms en valt dan weg
Mogelijke oorzaken
- slechte jumperdraad;
- onvoldoende voeding;
- losse soldeerverbinding;
- te lange I²C-draden;
- elektrische storing;
- ontbrekende of ongeschikte pull-upweerstanden;
- een tweede I²C-apparaat met hetzelfde adres.
Eerste controle
Maak de verbinding zo eenvoudig mogelijk:
- korte draden;
- één sensor;
- stabiele 3,3-voltvoeding;
- geen andere randapparatuur.
Test daarna iedere verbinding afzonderlijk.
Twee I²C-apparaten hebben hetzelfde adres
Wat je ziet
- ieder apparaat werkt afzonderlijk;
- samen reageren ze onbetrouwbaar of niet;
- de scanner toont maar één adres terwijl twee modules zijn aangesloten.
Oorzaak
Twee apparaten met hetzelfde vaste adres kunnen niet zonder aanvullende oplossing afzonderlijk op dezelfde I²C-bus worden aangesproken.
Mogelijke oplossing
Controleer of bij één module het adres kan worden veranderd. Zo niet, dan kan een I²C-multiplexer nodig zijn.
Meetwaarden
De temperatuur is te hoog
Wat je ziet
De BME280 geeft consequent een hogere temperatuur aan dan een thermometer in dezelfde ruimte.
Mogelijke oorzaken
- warmte van de ESP32;
- warmte van een spanningsregelaar;
- een gesloten behuizing;
- direct zonlicht;
- onvoldoende luchtstroming;
- de sensoren liggen niet werkelijk op dezelfde plaats;
- een normale afwijking binnen de nauwkeurigheid.
Eerste controle
Plaats de BME280 op enige afstand van de ESP32 en laat hem voldoende tijd aan de omgeving aanpassen.
Vergelijk pas daarna met een betrouwbare referentie.
Corrigeer niet meteen een afwijking in software voordat je weet of de plaatsing de oorzaak is.
De luchtvochtigheid verandert sterk
Mogelijke oorzaken
- je ademt dicht op de sensor;
- je raakt de module aan;
- de sensor is net van omgeving veranderd;
- condens of vocht beïnvloedt de meting;
- de luchtvochtigheid verandert lokaal werkelijk.
Eerste controle
Laat de sensor enige tijd onaangeraakt liggen in een stabiele omgeving.
Kijk niet alleen naar één waarde, maar naar het verloop over meerdere minuten.
De luchtdruk wijkt af van een weerapp
Mogelijke oorzaak
De BME280 meet de plaatselijke absolute luchtdruk. Een weerapp toont vaak een naar zeeniveau gecorrigeerde waarde.
Eerste controle
Controleer of je twee waarden met dezelfde referentie vergelijkt.
Een verschil betekent niet automatisch dat de sensor defect is.
De code toont nan
Wat je ziet
Temperatuur: nan
nan betekent not a number.
Mogelijke oorzaken
- de sensor leverde geen geldige waarde;
- de communicatie werd onderbroken;
- de sensor is niet correct gestart;
- de verkeerde sensor of bibliotheek wordt gebruikt;
- de voeding is instabiel.
Eerste controle
Controleer of bme.begin() slaagt en of de I²C-scanner het apparaat voortdurend ziet.
Publiceer nan niet als echte meetwaarde. Onze code controleert dit daarom met:
isnan(...)
De waarde blijft exact gelijk
Mogelijke oorzaken
- de omgeving is stabiel;
- de sensor wordt niet opnieuw uitgelezen;
- de code toont telkens een oude variabele;
- de meetfunctie staat buiten de herhaalde taak;
- afronding verbergt kleine veranderingen.
Eerste controle
Print tijdelijk meer cijfers achter de komma en plaats een teller bij iedere echte sensormeting.
Zo kun je onderscheiden tussen een stabiele waarde en code die niet opnieuw meet.
Meetwaarden springen onrealistisch
Mogelijke oorzaken
- losse bedrading;
- voedingsproblemen;
- ongeldige waarden worden niet gecontroleerd;
- storing op de communicatie;
- het verkeerde gegevenstype;
- een fout in de omzetting of eenheid.
Eerste controle
Print eerst de onbewerkte uitkomst van de bibliotheek. Voeg daarna berekeningen en correcties één voor één toe.
WiFi
De ESP32 vindt geen verbinding
Wat je ziet
- de sensor blijft meten;
- WiFi: niet verbonden blijft verschijnen;
- verbindingspogingen lopen steeds af;
- er verschijnt geen IP-adres.
Mogelijke oorzaken
- verkeerde SSID;
- verkeerd wachtwoord;
- geen 2,4GHz-netwerk;
- onvoldoende bereik;
- het netwerk is verborgen;
- de router laat het apparaat niet toe;
- er is een extra aanmeldpagina nodig;
- de ESP32 krijgt geen stabiele voeding.
Eerste controle
Controleer de netwerknaam en het wachtwoord teken voor teken.
Plaats de ESP32 tijdelijk dicht bij het accesspoint en controleer of 2,4 GHz actief is.
Het verkeerde WiFi-wachtwoord is geüpload
Wat je ziet
- andere apparaten verbinden wel;
- de ESP32 blijft periodiek proberen;
- het aanpassen van Arduino_Secrets.h lijkt niets te veranderen.
Mogelijke oorzaak
De gecorrigeerde code is nog niet opnieuw naar de ESP32 geüpload.
Eerste controle
Upload de code opnieuw nadat je Arduino_Secrets.h hebt aangepast.
De ESP32 kan een wijziging op je computer niet zien totdat het nieuwe programma is geüpload.
De ESP32 werkt vlak bij de router, maar niet op zijn bestemming
Waarschijnlijke oorzaak
Het WiFi-signaal is op de uiteindelijke plaats te zwak of instabiel.
Eerste controle
Bekijk:
WiFi.RSSI()
Vergelijk de waarde dicht bij de router met de waarde op de definitieve plaats.
Let ook op:
- betonnen muren;
- metalen kasten;
- apparatuur die storing veroorzaakt;
- de positie van de ESP32-antenne;
- een behuizing met metaal;
- kabels of printplaten direct bij de antenne.
De antenne wordt afgeschermd
Wat je ziet
- het bereik is veel slechter dan verwacht;
- draaien of verplaatsen van de ESP32 maakt veel verschil;
- het bord werkt buiten de behuizing beter.
Mogelijke oorzaak
De printantenne aan het uiteinde van de ESP32-WROOM-module bevindt zich te dicht bij metaal, bedrading of een andere printplaat.
Eerste controle
Houd het antennegedeelte vrij en test de ESP32 buiten de behuizing.
WiFi verbindt, maar er is geen internet
Wat je ziet
- de ESP32 heeft een lokaal IP-adres;
- lokale apparaten zijn mogelijk bereikbaar;
- een externe dienst werkt niet.
Belangrijk
WL_CONNECTED betekent dat de ESP32 met het lokale WiFi-netwerk verbonden is. Het bewijst niet dat internet of een specifieke externe server beschikbaar is.
Eerste controle
Bepaal of je toepassing een lokale broker of een externe internetdienst gebruikt.
Test de bereikbaarheid van de doelserver afzonderlijk.
WiFi komt niet terug na een storing
Mogelijke oorzaken
- de herstelcode wordt niet uitgevoerd;
- een lange delay() blokkeert loop();
- een verbindingspoging blijft actief gemarkeerd;
- het retry-interval wordt steeds opnieuw gereset;
- WiFi wordt volledig uitgeschakeld;
- de ESP32 start door voedingsproblemen opnieuw op.
Eerste controle
Voeg meldingen toe bij:
- start van een verbindingspoging;
- time-out;
- succesvolle verbinding;
- verlies van verbinding;
- geplande nieuwe poging.
Dan zie je welke toestand niet wordt verlaten.
MQTT
WiFi werkt, maar MQTT verbindt niet
Wat je ziet
- de ESP32 heeft een IP-adres;
- sensormetingen blijven verschijnen;
- MQTT-pogingen mislukken;
- mqttClient.state() toont een foutcode.
Mogelijke oorzaken
- verkeerd brokeradres;
- verkeerde poort;
- broker staat uit;
- firewall blokkeert de verbinding;
- verkeerde gebruikersnaam of wachtwoord;
- de MQTT-gebruiker heeft onvoldoende rechten;
- broker en ESP32 zitten in gescheiden netwerken;
- een hostnaam wordt niet vertaald.
Eerste controle
Gebruik vanaf hetzelfde netwerk een andere MQTT-client met exact dezelfde gegevens.
Kan die ook niet verbinden, dan ligt het probleem waarschijnlijk bij de broker, het netwerk of de aanmeldgegevens.
Het adres van de ESP32 wordt als brokeradres gebruikt
Wat je ziet
- WiFi werkt;
- MQTT geeft een netwerkfout;
- de ESP32 probeert verbinding te maken met zijn eigen IP-adres.
Oorzaak
De broker draait op een ander apparaat, bijvoorbeeld Home Assistant of een Raspberry Pi.
Eerste controle
Gebruik als SECRET_MQTT_SERVER het adres van het apparaat waarop de broker draait.
De broker gebruikt een andere poort
Wat je ziet
- het IP-adres klopt;
- de broker draait;
- verbinding op poort 1883 lukt niet.
Mogelijke oorzaak
De broker luistert op een andere poort of verwacht een beveiligde TLS-verbinding.
Eerste controle
Controleer de brokerconfiguratie.
Poort 1883 en een TLS-poort zoals 8883 zijn niet zonder meer uitwisselbaar. Een beveiligde broker vraagt ook om andere clientcode en certificaatcontrole.
Gebruikersnaam of wachtwoord is verkeerd
Wat je ziet
De MQTT-status geeft mogelijk code 4 of 5.
Eerste controle
Controleer:
- hoofdletters;
- bijzondere tekens;
- onbedoelde spaties;
- het juiste account;
- de rechten van dat account.
Gebruik niet automatisch de inloggegevens van de Home Assistant-interface. De MQTT-broker kan afzonderlijke accounts gebruiken.
De broker is bereikbaar, maar weigert topics
Wat je ziet
- verbinden lukt;
- sommige publicaties of abonnementen werken niet;
- een andere MQTT-gebruiker werkt wel.
Mogelijke oorzaak
De broker gebruikt toegangsregels, ook wel ACL’s genoemd.
Een account mag bijvoorbeeld alleen publiceren onder:
werkplaats/sensor/#
maar niet onder een ander pad.
Eerste controle
Bekijk de toegangsrechten van de MQTT-gebruiker en vergelijk die met de gebruikte topics.
Twee apparaten gebruiken dezelfde client-ID
Wat je ziet
- MQTT verbindt en verbreekt voortdurend;
- twee ESP32’s lijken elkaar af te wisselen;
- ieder apparaat werkt afzonderlijk wel;
- de brokerlog meldt steeds nieuwe verbindingen met dezelfde naam.
Oorzaak
De broker verwacht dat iedere gelijktijdige client-ID uniek is.
Eerste controle
Controleer de client-ID van beide apparaten.
Onze code voegt het MAC-adres toe:
mqttClientId =
"MQTT-" + WiFi.macAddress();
Daardoor hoort ieder bord een unieke naam te krijgen.
MQTT verbindt, maar er worden geen waarden gepubliceerd
Mogelijke oorzaken
- sensorValuesValid is niet waar;
- het publicatie-interval is nog niet verstreken;
- publishSensorValues() wordt niet aangeroepen;
- de verbinding is vlak vóór het publiceren verbroken;
- de payload is te groot;
- de gebruikte topicvariabele is verkeerd;
- publish() geeft false terug.
Eerste controle
Toon vlak vóór iedere publicatie:
- topic;
- payload;
- resultaat van publish();
- toestand van mqttClient.connected().
Zo zie je of de code werkelijk een publicatie probeert uit te voeren.
Waarden worden gepubliceerd, maar nergens ontvangen
Mogelijke oorzaken
- de ontvanger luistert naar een ander topic;
- hoofdletters verschillen;
- de ontvanger is niet verbonden;
- de brokerrechten verhinderen het abonnement;
- je bekijkt een andere broker;
- de ESP32 en ontvanger gebruiken verschillende omgevingen.
Eerste controle
Abonneer een algemene MQTT-client tijdelijk op:
werkplaats/sensor/#
Komen de berichten daar wel binnen, dan werkt de route tot en met de broker. Richt het onderzoek daarna op de specifieke ontvanger.
Opdrachten komen niet bij de ESP32 aan
Mogelijke oorzaken
- niet opnieuw geabonneerd na herstel;
- verkeerd opdrachttopic;
- mqttClient.loop() wordt niet regelmatig uitgevoerd;
- de callback is niet ingesteld;
- de gebruiker mag niet op het topic abonneren;
- payload en verwachte tekst verschillen.
Eerste controle
Controleer of na iedere MQTT-verbinding verschijnt:
Geabonneerd op:
werkplaats/sensor/opdracht
Publiceer daarna exact:
meting
op het juiste topic.
Een retained opdracht wordt telkens opnieuw uitgevoerd
Wat je ziet
- de ESP32 voert direct na iedere MQTT-verbinding dezelfde opdracht uit;
- de opdracht wordt opnieuw uitgevoerd na een herstart;
- niemand lijkt op dat moment een nieuw bericht te sturen.
Oorzaak
De opdracht is retained gepubliceerd. De broker geeft hem direct aan iedere nieuwe abonnee.
Voor toestandstopics kan retained nuttig zijn. Voor een eenmalige opdracht is het vaak ongewenst.
Eerste controle
Publiceer de opdracht zonder retain of verwijder het retained bericht bij de broker.
De online-status blijft onterecht zichtbaar
Mogelijke oorzaken
- het online-bericht is retained;
- het last-willbericht is niet correct ingesteld;
- de broker heeft de verbroken verbinding nog niet gedetecteerd;
- de ESP32 verbreekt de verbinding netjes zonder zelf offline te publiceren;
- de client gebruikt een onverwachte client-ID.
Eerste controle
Controleer:
- de last-willinstellingen in connect();
- het exacte statustopic;
- de retaininstelling;
- de brokerlog;
- hoeveel tijd nodig is om een onverwachte uitval te detecteren.
Het last will verschijnt alleen wanneer de broker vaststelt dat de client onverwacht verdwenen is.
Home Assistant of een andere ontvanger
MQTT Explorer ziet de waarde, Home Assistant niet
Wat dit ons vertelt
De keten tot en met de MQTT-broker werkt:
- sensor;
- ESP32;
- WiFi;
- MQTT-publicatie;
- broker.
Het probleem zit waarschijnlijk in de configuratie van Home Assistant.
Mogelijke oorzaken
- verkeerd state_topic;
- afwijkend hoofdlettergebruik;
- foutieve eenheid of template;
- de MQTT-integratie gebruikt een andere broker;
- de entiteit is niet opnieuw geladen;
- beschikbaarheidsinstellingen komen niet overeen.
Eerste controle
Kopieer het topic rechtstreeks uit MQTT Explorer en vergelijk dit teken voor teken met de Home Assistant-configuratie.
Home Assistant toont Onbekend
Mogelijke oorzaken
- er is nog geen bericht gepubliceerd;
- het topic is verkeerd;
- de payload kan niet als getal worden verwerkt;
- de ESP32 is niet verbonden;
- een template verwacht een ander gegevensformaat;
- er staat geen retained waarde op het topic.
Eerste controle
Bekijk de werkelijke payload in een MQTT-client.
Onze code publiceert bijvoorbeeld:
21.8
en geen JSON-object.
Een configuratie die zoekt naar:
{"temperature": 21.8}
zal deze eenvoudige payload niet begrijpen.
Home Assistant toont een oude waarde
Mogelijke oorzaak
Het laatst gepubliceerde bericht is retained opgeslagen.
Dat is niet automatisch verkeerd. Het is de laatste bekende meting.
Eerste controle
Bekijk ook het statustopic:
werkplaats/sensor/status
Een oude retained waarde in combinatie met offline vertelt ons dat de meetwaarde niet meer actueel wordt bijgewerkt.
De eenheid is verkeerd
Wat je ziet
- de temperatuur staat bijvoorbeeld als percentage vermeld;
- luchtdruk krijgt een onjuiste eenheid;
- grafieken of statistieken gedragen zich vreemd.
Oorzaak
De MQTT-payload bevat meestal alleen het getal. De ontvanger bepaalt welke eenheid en apparaatklasse daarbij horen.
Eerste controle
Controleer de configuratie van de entiteit:
- temperatuur: °C;
- luchtvochtigheid: %;
- luchtdruk: hPa;
- RSSI: dBm.
Fouten die slechts soms optreden
Het project werkt op tafel, maar niet in de behuizing
Mogelijke oorzaken
- een draad raakt los bij het sluiten;
- de antenne wordt door metaal afgeschermd;
- warmte blijft in de behuizing hangen;
- de sensor meet de elektronica in plaats van de ruimte;
- bedrading komt onder spanning te staan;
- er ontstaat kortsluiting tegen een schroef of metalen wand.
Eerste controle
Test het project:
- buiten de behuizing;
- in de geopende behuizing;
- in de gesloten behuizing.
Noteer bij welke stap het gedrag verandert.
Het project werkt via de computer, maar niet via een losse voeding
Mogelijke oorzaken
- de losse voeding levert onvoldoende stroom;
- de spanning is verkeerd;
- de voedingspin is verkeerd gekozen;
- de GND-verbinding ontbreekt;
- de USB-voeding van de computer is stabieler;
- twee voedingsbronnen beïnvloeden elkaar.
Eerste controle
Meet de voedingsspanning onder belasting en controleer hoe jouw specifieke ontwikkelbord extern gevoed mag worden.
Het project werkt na reset, maar later niet meer
Mogelijke oorzaken
- een timer of teller loopt verkeerd;
- MQTT wordt niet onderhouden;
- geheugen raakt versnipperd;
- een verbinding wordt niet hersteld;
- een sensorcommunicatie loopt vast;
- code blokkeert na een bepaalde toestand;
- een variabele loopt buiten zijn bereik.
Eerste controle
Voeg tijdstempels en statusmeldingen toe bij belangrijke overgangen:
- sensor gelezen;
- WiFi verbonden of verbroken;
- MQTT verbonden of verbroken;
- bericht gepubliceerd;
- bericht ontvangen;
- foutcode veranderd.
Zo zie je welke taak als eerste stopt.
Het probleem verdwijnt zodra je wilt meten
Wat je ziet
- na het aansluiten van de multimeter werkt de schakeling ineens;
- aanraken of verplaatsen verandert het gedrag;
- het probleem is moeilijk te herhalen.
Mogelijke oorzaak
De meetapparatuur of jouw aanraking beïnvloedt een zwevende ingang, losse verbinding of gevoelig signaal.
Eerste controle
Denk aan:
- ontbrekende pull-up- of pull-downweerstand;
- slechte GND;
- losse breadboardverbinding;
- te lange signaaldraden;
- een ingang die nergens duidelijk hoog of laag wordt gehouden.
Een fout die verdwijnt tijdens het meten is nog steeds informatie.
Het project werkt alleen na het opnieuw uploaden
Mogelijke oorzaken
- een opstartpin wordt beïnvloed;
- de voedingsspanning komt te langzaam of instabiel op;
- de resetvolgorde verschilt;
- een sensor is nog niet gereed wanneer de code hem start;
- uploaden veroorzaakt een reset die het probleem tijdelijk oplost.
Eerste controle
Druk alleen op EN of RST zonder opnieuw te uploaden.
Werkt het daarna ook, dan was het uploaden zelf waarschijnlijk niet de oplossing. De reset of timing maakte het verschil.
Handelingen die foutzoeken moeilijker maken
Alles tegelijk veranderen
Wanneer je tegelijk:
- een andere kabel gebruikt;
- twee draden verplaatst;
- de bibliotheek bijwerkt;
- het pinnummer wijzigt;
- het bord opnieuw selecteert;
en het project daarna werkt, weet je niet welke verandering de oorzaak heeft opgelost.
Verander daarom bij voorkeur één ding tegelijk.
Meteen onderdelen vervangen
Een ander ESP32-bord of een nieuwe sensor kan een defect onderdeel uitsluiten. Toch is vervangen niet altijd de beste eerste stap.
Als de werkelijke fout een verkeerd topic of I²C-adres is, werkt het nieuwe onderdeel evenmin.
Formuleer eerst welke hypothese je met de vervanging wilt testen.
Code opnieuw uploaden zonder iets te wijzigen
Opnieuw uploaden kan een reset veroorzaken en het probleem tijdelijk laten verdwijnen. Daardoor lijkt het alsof “de code opnieuw uploaden” de oplossing was.
Vraag jezelf af:
- is de code werkelijk veranderd;
- of heeft alleen de reset invloed gehad?
Test een reset afzonderlijk.
Een willekeurige oplossing van internet overnemen
Een oplossing kan bedoeld zijn voor:
- een ander ESP32-model;
- een Arduino Uno;
- een andere sensor;
- een oudere bibliotheek;
- andere pinnen;
- 5-voltlogica;
- een andere broker.
Controleer altijd welke aannames bij het voorbeeld horen.
Foutmeldingen negeren
Een foutmelding is geen hinderlijke tekst die eerst weg moet. Het is een waarneming uit het systeem.
Noteer daarom:
- de volledige eerste foutmelding;
- wanneer deze verschijnt;
- welke handeling eraan voorafging;
- of de melding altijd hetzelfde is.
Een melding als BME280 niet gevonden vraagt om een ander onderzoek dan MQTT-foutcode 4.
Alleen naar code kijken
Bij een microcontrollerproject zijn code en hardware één systeem.
Een programma kan correct zijn terwijl:
- SDA en SCL zijn verwisseld;
- de sensor geen voeding krijgt;
- de led verkeerd om zit;
- een GPIO een te hoog signaal ontvangt.
Andersom kan de schakeling correct zijn terwijl de code het verkeerde adres of topic gebruikt.
Alleen naar hardware kijken
Als de BME280 in de seriële monitor correcte waarden geeft, is het weinig zinvol om de sensordraden te blijven verplaatsen omdat Home Assistant niets toont.
Dan weten we dat de sensor en I²C-verbinding werken. We moeten verderop in de keten zoeken.
Een snelle controle per symptoom
| Symptoom | Eerste gebied om te controleren |
|---|---|
| Geen enkele led brandt | Voeding, USB-kabel en kortsluiting |
| Voedingsled brandt, geen USB-poort | Datakabel, USB-chip en stuurprogramma |
| Uploaden blijft op Connecting... | Poort, kabel, BOOT-knop en externe bedrading |
| Code compileert niet | Eerste foutmelding, bibliotheken en leestekens |
| Upload lukt, externe led reageert niet | GPIO-nummer, bedrading, led en weerstand |
| BME280 wordt niet gevonden | 3,3 V, GND, SDA, SCL en I²C-adres |
| BME280 toont nan | Sensorinitialisatie, voeding en I²C-verbinding |
| Temperatuur is te hoog | Plaatsing en warmte van de ESP32 |
| ESP32 start steeds opnieuw | Voeding, kabel en stroomverbruik |
| Sensor werkt, WiFi niet | SSID, wachtwoord, 2,4 GHz en bereik |
| WiFi werkt, MQTT niet | Brokeradres, poort, account en brokerstatus |
| MQTT werkt, Home Assistant niet | Topic, payload en entiteitsconfiguratie |
| Opdrachten komen niet aan | Abonnement, callback en mqttClient.loop() |
| Werkt alleen soms | Losse verbinding, voeding, bereik en timing |
| Werkt buiten maar niet in behuizing | Antenne, warmte, mechanische spanning en kortsluiting |
Deze tabel geeft een beginpunt, geen definitieve conclusie.
Welke informatie je moet bewaren
Wanneer een probleem niet direct wordt opgelost, maak dan een klein logboek.
Noteer:
- datum en tijd;
- gebruikte ESP32;
- voedingsmethode;
- aangesloten onderdelen;
- versie van de code;
- exacte foutmelding;
- wat je verwachtte;
- wat je waarnam;
- welke verandering je hebt getest;
- wat het resultaat was.
Maak ook een duidelijke foto van de bedrading voordat je iets verandert.
Zo voorkom je dat je dezelfde test later opnieuw uitvoert zonder dat te beseffen.
Een bruikbare foutbeschrijving
Als je iemand om hulp vraagt, geef dan voldoende concrete informatie.
Een bruikbare beschrijving is bijvoorbeeld:
Ik gebruik een ESP32 DevKit met een BME280 op 3,3 volt. SDA zit op GPIO 21 en SCL op GPIO 22. De I²C-scanner vindt adres 0x76 en de meetwaarden verschijnen in de seriële monitor. WiFi verbindt en krijgt IP-adres 192.168.1.74. De MQTT-verbinding mislukt met foutcode 4. Een andere MQTT-client kan met een ander account wel met dezelfde broker verbinden.
Met deze informatie weten we al dat:
- de ESP32 werkt;
- de sensor werkt;
- I²C werkt;
- WiFi werkt;
- het brokeradres waarschijnlijk bereikbaar is;
- de fout waarschijnlijk bij authenticatie of rechten zit.
Dat is veel nuttiger dan:
MQTT doet het niet.
Wat je uit dit hoofdstuk kunt meenemen
Veel fouten bij een ESP32-project zijn terug te voeren op een beperkt aantal oorzaken:
- onvoldoende of instabiele voeding;
- een kabel zonder dataverbinding;
- een draad in de verkeerde breadboardrij;
- ontbrekende GND;
- verwisselde SDA- en SCL-lijnen;
- een verkeerd pinnummer;
- een ongeschikte GPIO;
- een ontbrekende bibliotheek;
- een verkeerd bord of verkeerde poort;
- blokkerende code;
- een verkeerd I²C-adres;
- een sensor die anders is dan verwacht;
- verkeerde WiFi-gegevens;
- geen 2,4GHz-bereik;
- een verkeerd brokeradres of account;
- een afwijkende topicnaam;
- een ontbrekend abonnement na herstel;
- een configuratiefout bij de ontvanger.
De belangrijkste les is niet dat je al deze oplossingen uit je hoofd moet leren.
Het belangrijkste is dat je bij een probleem kunt aangeven:
- wat je verwachtte;
- wat je werkelijk waarneemt;
- welk deel aantoonbaar werkt;
- bij welk deel het gedrag voor het eerst afwijkt;
- welke controle de mogelijke oorzaken het beste van elkaar onderscheidt.
In het volgende hoofdstuk maken we van deze manier van denken een systematische foutzoekmethode. Daarmee gaan we niet langer een lijst mogelijke oplossingen proberen, maar stap voor stap aantonen waar een probleem ontstaat.