Zelfbouw project · ESP32 · AS3935 · Home Assistant optioneel

Zelf een onweerdetector bouwen met ESP32, AS3935 en TFT-display

In dit project bouw ik een compacte onweerdetector met een ESP32, een AS3935 bliksemsensor en een klein kleurendisplay. Het systeem kan volledig zelfstandig werken, maar kan ook via MQTT gekoppeld worden aan Home Assistant.

Standalone én geschikt voor Home Assistant

Deze onweerdetector is bewust modulair opgezet. Je kunt hem gebruiken als los apparaat met een display, maar ook als sensor voor Home Assistant. In de code kun je eenvoudig kiezen welke onderdelen actief zijn.

Wat bouwen we?

Met dit project maak je een kleine onweerdetector die bliksemactiviteit kan herkennen en een geschatte afstand kan tonen. De basis bestaat uit een ESP32, een AS3935 bliksemsensor en een ST7735 TFT-display.

Het project is onderdeel van mijn zelfbouw weerstation-serie, maar is ook prima los te gebruiken. Daardoor is het niet alleen interessant voor Home Assistant-gebruikers, maar ook voor weerliefhebbers, zendamateurs en mensen die een zelfstandig waarschuwingssysteem willen bouwen.

Microcontroller

ESP32-WROOM of vergelijkbaar ESP32 ontwikkelbord.

Sensor

AS3935 bliksemsensor voor detectie van elektrische activiteit.

Display

ST7735 TFT SPI-display voor lokale weergave.

Integratie

Optioneel MQTT naar Home Assistant.

Wat kan deze onweerdetector?

De gecombineerde code is zo opgezet dat je zelf kunt kiezen welke functies je gebruikt.

  • Bliksemactiviteit detecteren met de AS3935 sensor.
  • Geschatte afstand tot de bliksem weergeven.
  • Ruis en storingen herkennen.
  • Laatste meldingen tonen op een TFT-display.
  • Optioneel gegevens publiceren naar Home Assistant via MQTT.
  • Optioneel tijd synchroniseren via WiFi en NTP.
  • Optioneel OTA-updates gebruiken voor draadloos bijwerken.

Belangrijk om te weten

De AS3935 geeft een indicatie van bliksemactiviteit en een geschatte afstand. Het is geen professioneel meetinstrument en bepaalt niet exact waar de bliksem is ingeslagen. Zie het dus als een slimme indicatie, niet als officiële waarschuwing.

Benodigde onderdelen

Voor de basisversie van dit project gebruik ik de volgende onderdelen:

Onderdeel Functie Opmerking
ESP32-WROOM ontwikkelbord Besturing van sensor, display en MQTT Een standaard ESP32 dev board is voldoende.
AS3935 bliksemsensor Detecteert elektrische activiteit van onweer Wordt via I2C aangesloten.
ST7735 TFT SPI-display Toont status, afstand en logregels Controleer goed welke resolutie jouw display heeft.
Jumper wires Voor de bedrading Voor een definitieve versie liever solderen.
USB-voeding Voeding voor de ESP32 Gebruik een stabiele 5V USB-adapter.
Behuizing Bescherming en nette montage Wordt later uitgewerkt als los onderdeel.

Hoe werkt het systeem?

De ESP32 leest de AS3935 bliksemsensor uit. Wanneer de sensor een gebeurtenis detecteert, geeft hij een signaal via de IRQ-pin. De ESP32 verwerkt daarna de melding en bepaalt of het gaat om ruis, een verstoring of een mogelijke bliksemdetectie.

Als het display is ingeschakeld, wordt de melding direct op het scherm getoond. Als MQTT is ingeschakeld, wordt dezelfde informatie ook naar Home Assistant gestuurd.

1

AS3935 detecteert activiteit

De sensor luistert naar elektrische activiteit die kan passen bij onweer.

2

Interrupt naar ESP32

Via de IRQ-pin meldt de sensor dat er iets verwerkt moet worden.

3

ESP32 verwerkt melding

De code bepaalt of het ruis, storing of bliksemactiviteit is.

4

Weergave en MQTT

De melding verschijnt op het display en kan naar Home Assistant worden gestuurd.

Aansluiten op de ESP32

Onderstaande aansluitingen passen bij de voorbeeldcode. Gebruik je andere pinnen, pas deze dan ook aan in de configuratie van de Arduino-code.

AS3935 aansluiten

AS3935 ESP32 Functie
VCC 3.3V Voeding
GND GND Massa
SDA GPIO 21 I2C data
SCL GPIO 22 I2C klok
IRQ GPIO 27 Interruptsignaal

ST7735 display aansluiten

Display ESP32 Functie
VCC 3.3V of 5V Afhankelijk van jouw displaymodule
GND GND Massa
SCL / SCK GPIO 18 SPI klok
SDA / MOSI GPIO 23 SPI data
RES / RST GPIO 4 Reset
DC / A0 GPIO 2 Data/command
CS GPIO 5 Chip select
BL / LED 3.3V of via GPIO Achtergrondverlichting

Let op bij goedkope TFT-displays

Bij kleine TFT-displays klopt de omschrijving in webshops niet altijd. Controleer daarom de tekst op de printplaat. Op mijn display stond bijvoorbeeld 1.8 TFT SPI 128*160 V1.1. Dat is belangrijk voor de juiste display-instellingen.

Uitleg van de code

De volledige Arduino-code staat op GitHub. Op deze pagina leg ik vooral de structuur uit, zodat je begrijpt hoe het programma is opgebouwd.

Configuratie bovenin de code

De belangrijkste keuze zit in het configuratiebestand. Hiermee bepaal je of je display, MQTT, WiFi-tijd en OTA wilt gebruiken.

#define USE_DISPLAY    1
#define USE_MQTT       1
#define USE_WIFI_TIME  1
#define USE_OTA        1
Instelling Betekenis
USE_DISPLAY Schakelt het TFT-display in of uit.
USE_MQTT Stuurt meldingen naar Home Assistant via MQTT.
USE_WIFI_TIME Haalt de actuele tijd op via WiFi en NTP.
USE_OTA Maakt draadloos uploaden van nieuwe firmware mogelijk.

Voorbeeld: standalone met display

Wil je de onweerdetector gebruiken zonder Home Assistant, dan kun je MQTT uitschakelen.

#define USE_DISPLAY    1
#define USE_MQTT       0
#define USE_WIFI_TIME  0
#define USE_OTA        0

Voorbeeld: display en Home Assistant

Wil je de detector koppelen aan Home Assistant, dan schakel je MQTT en WiFi in.

#define USE_DISPLAY    1
#define USE_MQTT       1
#define USE_WIFI_TIME  1
#define USE_OTA        1

Waarom werkt de code met een interrupt?

De AS3935 gebruikt een IRQ-pin om de ESP32 te laten weten dat er een gebeurtenis is gedetecteerd. De interruptfunctie doet bewust zo weinig mogelijk. Hij zet alleen een vlag op true. De echte verwerking gebeurt daarna in de normale loop().

volatile bool lightningInterrupt = false;

void IRAM_ATTR handleLightningInterrupt() {
    lightningInterrupt = true;
}

Deze aanpak voorkomt dat er te veel werk binnen de interrupt zelf gebeurt. Dat maakt de code stabieler en overzichtelijker.

Home Assistant via MQTT

Wanneer MQTT is ingeschakeld, publiceert de ESP32 de detecties naar de MQTT-broker. Home Assistant kan deze gegevens vervolgens als sensoren weergeven of gebruiken in automatiseringen.

Voorbeelden van toepassingen in Home Assistant

  • Een melding sturen wanneer bliksemactiviteit wordt gedetecteerd.
  • Een kaartje tonen met de laatste onweermelding.
  • Een logboek bijhouden van detecties.
  • Automatiseringen tijdelijk blokkeren bij onweer.
  • De onweerdetector opnemen in een zelfbouw weerstation-dashboard.

MQTT-gegevens aanpassen

De WiFi- en MQTT-gegevens staan niet hard in de code, maar in een apart secrets-bestand. Plaats je project op GitHub, zet dan nooit je echte wachtwoorden of MQTT-gegevens online.

Losse componentpagina's

Voor dit project maak ik ook losse componentpagina's. Daar leg ik de onderdelen uitgebreider uit, zodat deze informatie later ook bij andere projecten hergebruikt kan worden.

Toekomstige behuizing en compleet systeem

In de eerste versie is dit vooral een zelfbouwproject op basis van losse onderdelen. In de toekomst wil ik hier ook een nette behuizing voor ontwerpen, zodat het systeem als compleet kastje gebruikt kan worden.

Daarbij denk ik aan een compacte 3D-geprinte behuizing met ruimte voor de ESP32, de AS3935 sensor, het TFT-display en een nette USB-voedingsaansluiting. Het doel is een systeem dat niet alleen op de werkbank werkt, maar ook netjes in een shack, meterkast, hobbyruimte of weerstation-opstelling geplaatst kan worden.

Mogelijke toekomstige uitbreidingen

  • 3D-geprinte behuizing.
  • Frontplaat met displayopening.
  • Interne montagepunten voor ESP32 en sensorprint.
  • USB-C of micro-USB voedingsopening.
  • Optionele wandmontage.
  • Versie als bouwpakket of compleet systeem.

Let op: een eventuele verkoopversie is bedoeld als hobby- en indicatiesysteem. Het is geen officieel veiligheids- of waarschuwingssysteem.

Code en downloads

De complete code van dit project plaats ik op GitHub. Daar vind je de Arduino-code, de losse headerbestanden en een voorbeeldbestand voor de secrets.

GitHub repository

Bekijk de actuele code, documentatie en toekomstige updates op GitHub.

Naar GitHub

Aanbevolen GitHub-structuur

ESP32-Weatherstation
└── AS3935-Lightning-Detector
    ├── AS3935-Lightning-Detector.ino
    ├── Config.h
    ├── Display_ST7735.h
    ├── Lightning_AS3935.h
    ├── Mqtt_HomeAssistant.h
    ├── WiFi_Time_OTA.h
    ├── Arduino_Secrets.example.h
    └── README.md

In het bestand Arduino_Secrets.example.h kun je laten zien welke gegevens nodig zijn, zonder je echte WiFi- of MQTT-wachtwoorden openbaar te maken.