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.
AS3935 detecteert activiteit
De sensor luistert naar elektrische activiteit die kan passen bij onweer.
Interrupt naar ESP32
Via de IRQ-pin meldt de sensor dat er iets verwerkt moet worden.
ESP32 verwerkt melding
De code bepaalt of het ruis, storing of bliksemactiviteit is.
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.
AS3935 bliksemsensor
Uitleg over de sensor, aansluitingen, interrupt, storing en afstandsschatting.
ST7735 TFT-display
Uitleg over SPI, aansluitingen, displayvarianten en veelvoorkomende problemen.
Zelfbouw weerstation
Bekijk hoe deze onweerdetector onderdeel kan worden van een compleet weerstation.
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 GitHubAanbevolen 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.