De zwembadcontroller (2/4)

In het vorige artikel gaven we een overzicht van het project van de slimme gecontroleerde pool. In dit tweede deel bespreken we het hart van de controller. Dit is gebaseerd op een ESP32, maar kan worden uitgevoerd met een paar wijzigingen met een ESP8266.

Taak van de poolcontroller

De controller neemt de centrale besturing over. Het meet cyclisch de temperaturen van het zwembadwater en de warmteopslag van het zonnestelsel. Het zal ook de pompen (filters en verwarming) schakelen. De ESP is dus zowel sensor als actuator. De gegevens worden via WLAN uitgewisseld via MQTT.

Poolcontroller

 

Temperatuur meten

Het meten van temperatuur is meestal het begin van het programmeren van IoT-sensoren. Er zijn verschillende projectvoorbeelden. De temperatuursensoren komen vaak DHT11 of de nauwkeurigere DHT22 voor gebruik. Aangezien de temperatuursensoren in het project echter extern moeten worden geplaatst, gebruiken we de waterdichte sensor DS18B20. Een van de twee sensoren voor het meten van de temperatuur van het zwembadwater, de andere voor het meten van de temperatuur in de buffertank.

 

Temperatuurmeting MQTT

De gemeten temperaturen worden elke 60 seconden uitgelezen door middel van een timer en gepubliceerd als bericht via MQTT. Het interval is een afweging tussen de traagheid van de opwarming van het water en het debuggen van het programma. Vermoedelijk zouden de waarden om de 5 minuten volstaan, maar de integratie in OpenHAB maakt ook de klok van de minuut later veel gemakkelijker. Daarover later meer.

Draadloze stopcontacten bedienen

Omdat we niet direct in het project 230 volt wisselspanning willen verwerken, schakelen we de pompen via radioaansluitingen. In het geval van radioaansluitingen zijn er enkele die via SP's met een 433 MHz radiozender kan controleren. Een lijst van compatibele radioaansluitingen is te vinden in de Wiki van de gebruikte bibliotheek.

Structuur van het circuit

Het circuit op de plug-in board ziet er als volgt uit:

In het geval van temperatuursensoren zijn er ook optrekweerstanden met 4,7k" tussen de datalijn en de voeding +3V VCC.

De gegevensspelden op de ESP32 worden als volgt gedocumenteerd:

#define PIN_DS_SOLAR 16 Temp Sensor Solar
#define PIN_DS_POOL 17  Tijdelijke sensorpool
#define PIN_RSSWITCH 18 voor 433 MHz zender

Broncode van het project

Voor het project maken we gebruik van de ontwikkelomgeving Platform.io IDE. Zo maken we een project voor het bestuur 'esp32dev'. Onlangs Platform.io ook een super Gepubliceerd artikel.

De volledige broncode van het project is te vinden in de GitHub-repository van de auteur: https://github.com/stritti/smart-swimming-pool.

Gebruikte bibliotheken

In dit project is het voor ons belangrijk om bewezen softwarecomponenten te gebruiken en zoveel mogelijk op te lossen via bestaande bibliotheken. Om deze reden worden de volgende Libs gebruikt:

  • rc-switch: controle van de radioaansluitingen
  • OneWire: Ondersteuning voor I2C-sensoren
  • DallasTemperature: Het lezen van de temperatuur van de sensoren
  • PubSubClient: MQTT-berichten ontvangen en verzenden
  • RemoteDebug: Debugging via Telnet
  • ESPBASE: sjabloon voor IoT-projecten

Deze bibliotheken worden opgeslagen in de configuratie van Platform.io (platformio.ini) en worden automatisch geladen en geïntegreerd vanaf het internet wanneer ze worden gecompileerd.

Het programma voor de poolcontroller is gebaseerd op ESPBASE, dat een aantal installatiefuncties biedt zoals geschreven in het vorige artikel. Aan het begin van de code worden enkele variabelen gemaakt en worden de definieers voor de pintoewijzing gedefinieerd.

Naast de twee functies setup() en loop() worden enkele andere functies geïmplementeerd. In wezen gaat het om het ontvangen en verzenden van MQTT-berichten en het implementeren ervan. Daarnaast wordt een timer geïmplementeerd die de temperatuursensoren cyclisch uitleest en publiceert via MQTT-berichten.

De details

  1. In het Lusfunctie wordt de Wi-Fi-verbinding steeds opnieuw gecontroleerd en indien nodig hersteld. Dit was een verraderlijk probleem: het ESP verloor herhaaldelijk de Wi-Fi-verbinding en zonder de Reconnect kon het geen gegevens meer verzenden.
  2. De functie Publiceren wordt gebruikt om de MQTT-berichten te verzenden. Zo worden de gegevens van een herstart en de temperatuurmeting gepubliceerd als JSON-berichten.
  3. De timer voor het verzenden van de temperaturen is gesplitst. De reden hiervoor is dat de werkelijke timer methoden moeten zo kort mogelijk zijn. In de implementatie roept de timer de onTimer-functie aan, die alleen interruptCounter Stappen. In de lusfunctie wordt dit gecontroleerd en de werkelijke onTemperatuurfunctie geactiveerd. Bij deze methode wordt ook de interne temperatuur van het ESP uitgelezen en gepubliceerd.
  4. De functie onMQTTCallback wordt aangeroepen wanneer een bericht wordt verzonden naar een onderwerp dat begint met '/pool/switch/'. Het bericht bevat de informatie van de radioaansluiting of het moet worden in- of uitgeschakeld. Het onderwerp wordt verder verdeeld in de groep en het apparaat codering. Dit betekent dat de codering van de DIP-schakelaars van de socket omgezet in 0 en 1. Hierdoor kan deze oplossing flexibel elders worden gebruikt.

De broncode van de poolcontroller is direct terug te vinden in het volgende bestand: https://github.com/stritti/smart-swimming-pool/blob/master/Pool-Controller/src/pool-control.ino

 

Testing

 

Testing

Zodra het circuit is ingesteld en het project is geladen op de ESP, kunnen we al testen. De ESP opent een Wi-Fi-netwerk als toegangspunt omdat er standaard geen Wi-Fi is ingesteld. Als u met uw smartphone verbinding maakt met de poolcontroller, u de juiste wi-fi instellen. Daarna start de microcontroller automatisch opnieuw en probeert hij verbinding te maken met de opgegeven Wi-Fi.

Als alles correct is ingesteld, moet een statusbericht worden gepubliceerd via MQTT aan het begin van het ESP. U alle berichten volgen met de volgende opdracht op de Raspberry:

 mosquitto_sub -h localhost -v -t /#

Het IP-adres van de MQTT-server moet mogelijk worden aangepast in de broncode.

Daarna moeten de temperaturen in de minutencyclus op de Framboos worden uitgevoerd.

In de andere richting kunnen we de radioaansluitingen verwisselen door een geschikt bericht te sturen. Het onderwerp is "/pool/switch/<group>/<device>". Groep en Apparaat zijn de dip schakelaars van de socket als 0 en 1. "AAN" of "UIT" wordt verzonden als een bericht.

Sockets

 

Wat gebeurt er nu?

Dit legt de basis: we kunnen de temperaturen uitlezen en we kunnen van contact wissel.

In het volgende artikel verbinden we de poolcontroller met de smart home oplossing openHAB en maken we het zwembad echt slim volgens regels.

 

Ga naar: Zwembad en OpenHAB (3/4)

 

Esp-32Projekte für fortgeschritteneRaspberry piSensorenSmart home

1 Kommentar

Leon

Leon

Wo kann man den Sensor für die Wassertemperatur am besten unterbringen wenn das Pool haus weit vom Pool entfernt ist und der Sensor nicht sichtbar sein soll?

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Aanbevolen blog berichten

  1. Installeer ESP32 nu van de raad van bestuur
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmeren via Wi-Fi