Hoofdstuk 10 van 14

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

SymptoomEerste gebied om te controleren
Geen enkele led brandtVoeding, USB-kabel en kortsluiting
Voedingsled brandt, geen USB-poortDatakabel, USB-chip en stuurprogramma
Uploaden blijft op Connecting...Poort, kabel, BOOT-knop en externe bedrading
Code compileert nietEerste foutmelding, bibliotheken en leestekens
Upload lukt, externe led reageert nietGPIO-nummer, bedrading, led en weerstand
BME280 wordt niet gevonden3,3 V, GND, SDA, SCL en I²C-adres
BME280 toont nanSensorinitialisatie, voeding en I²C-verbinding
Temperatuur is te hoogPlaatsing en warmte van de ESP32
ESP32 start steeds opnieuwVoeding, kabel en stroomverbruik
Sensor werkt, WiFi nietSSID, wachtwoord, 2,4 GHz en bereik
WiFi werkt, MQTT nietBrokeradres, poort, account en brokerstatus
MQTT werkt, Home Assistant nietTopic, payload en entiteitsconfiguratie
Opdrachten komen niet aanAbonnement, callback en mqttClient.loop()
Werkt alleen somsLosse verbinding, voeding, bereik en timing
Werkt buiten maar niet in behuizingAntenne, 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.