Let op: Tweakers stopt per 2023 met Tweakblogs. In dit artikel leggen we uit waarom we hiervoor hebben gekozen.

ESP8266 CV temperatuur-sensor

Door S0epkip op vrijdag 4 februari 2022 10:32 - Reacties (15)
Categorie: ESP8266, Views: 5.428

Allereerst credits aan Atomstar om mij te introduceren bij dit onderwerp door middel van zijn reeks blogs en custom PCB voor een door hem genaamde 'BigSensor'.


Dit heeft mij geinspireerd om eens aan de slag te gaan met een ESP8266, door middel van ESPHome via een add-on in Home Assistant. Zelf was ik ook nog een complete noob in zowel ESPHome als HomeAssistant, maar dankzij de voorbeelden en enorme resource op internet is het wel gelukt :).

Mijn blog gaat over het maken van een ESP8266 met twee DS18B20 ('Dallas') temperatuursensors om de aanvoer- en retourtemperatuur van mijn CV installatie in de gaten te houden. Waarom dat handig kan zijn lees je in dit topic op GoT.

Starting with the end in mind:

https://tweakers.net/fotoalbum/image/F7hFbOPqbNNWjugxD6klaOjE.png

Dit heb ik gemaakt door middel van:Enkele notes:
  • Let op dat je een 'korte stekker' aan de micro-USB kant hebt zitten, zodat het geheel in de behuizing past. Elke andere behuizing die je zelf nog hebt liggen of maakt kan je natuurlijk ook toepassen voor dit projectje.
  • De laatste revisie van de Wemos D1 mini (v4) is uitgevoerd met USB-C voor de liefhebber.
HARDWARE INTEGRATIE

De pin header soldeer je aan de 5V kant van je Wemos D1 mini (of andere ESP8266).
Voor mij kwam het zo het netste uit (klikbaar voor groot):



NB: ik ben bepaald geen soldeerkoning, maar deze pins hebben een prima spacing, dus dat lukt je wel!

Vervolgens combineer je de draden van de DS18B20's en verbind je ze onder de scroeven van de pin headers alsvolgt:
  • Rood (Vcc) --- 5V
  • Geel (data) --- D3
  • Wit (of Zwart) (Gnd) --- GND
Zelf heb ik de draadjes samen even 'vertind' zodat ze netjes bij elkaar blijven.
Noot: De DS18B20 werkt volgens een 1-wire protocol. We kunnen dus prima de beide data-draden aan 1 GPIO pin verbinden en vervolgens in de software de twee signalen (digitale signalen) uit elkaar houden door middel van de sensor-adressen welke automatisch worden meegstuurd. It's amazing :)

Dan prop je het geheel met beleid in het huisje. Je kunt de D1 mini met een schroefje aan de behuizing vastmaken zodat eea niet teveel beweegt (nog niet op de foto):



Vervolgens ga je verder met de software integratie en debugging (waar nodig) voordat je het geheel monteert bij je CV ketel:



NB: de sensor zal door het meten van de skin-temp van je pijp natuurlijk wat vertraging hebben. ook de 'waterdichte behuizing' van de DS18B20 die ik hier gebruik is iets 'trager'. In de praktijk echter snel genoeg en sinds het mij met name om de verschiltemperatuur gaat, en beide sensoren even snel/traag reageren, zie ik hier geen enkel probleem in.


SOFTWARE INTEGRATIE


Ik ga er voor het gemak even vanuit dat je zoiets als een ESPHome add-on hebt draaien op Home Assistant of otherwise. Dit lukt een Tweaker wel. Er zijn hier heel veel wegen die naar Rome leiden en Google is je vriend, RTFM, etc.

Je kunt een ESP8266 bordje heel makkelijk verbinden met Home Assistant. Voor de eerste keer programmeren dien je je bouwsel met behulp van USB aan de instance die ESPHome draait te verbinden (e.g. je Raspberry Pi met Home Assistant).

In je ESPHome dashboard maak je een nieuw project aan, geef deze een naam en kies de Wemos D1 mini als bordje. Er wordt dan ongeveer deze YAML aangemaakt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
esphome:
  name: soepkipsensor

esp8266:
  board: d1_mini

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "22cbbfcbd7ecdb5188f629dd4cd5a700"

wifi:
  ssid: "mijn_SSID"
  password: "password"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Soepkipsensor Fallback Hotspot"
    password: "FeIJmlrN4viG"

captive_portal:


In mijn ervaring verbind de Wemos makkelijker (of uberhaupt) met je WifI als je deze een static IP meegeeft. Ook voeg ik een tweede wifi netwerk toe aan de code, dit kun je natuurlijk achterwege laten. We gaan meteen de code toevoegen om de 'Dallas' temperatuursensors uit te lezen.
Ignore het verhaal over 3.3V en de external pull-up resistor. Een DS18B20 kan ook met 5V input omgaan en onze Wemos heeft een internal pull-up die we gaan activeren :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
esphome:
  name: soepkipsensor
  platform: ESP8266
  board: d1_mini

wifi:
  networks:
  - ssid: "netwerk1"
    password: "password1"
  - ssid: "netwerk2"
    password: "password2"

  manual_ip:
    # Set this to the IP of the ESP
    static_ip: 192.168.1.161
    # Set this to the IP address of the router. Often ends with .1
    gateway: 192.168.1.1
    # The subnet of the network. 255.255.255.0 works for most home networks.
    subnet: 255.255.255.0
    
  #fast_connect: True # Required to connect to hidden SSIDs and only with one network
  domain: ".lan"

  # reboot_timeout: 0s # Do not reboot if no wifi (can be useful for offline use)

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: CV Temp Fallback Hotspot
    password: password123

logger:

# Enable Home Assistant API for logging over wifi.
# Disable reboot loop by setting reboot_timeout to 0s!
api:
  reboot_timeout: 0s

# Disable webserver, Can be useful for diagnostics, but takes up quite some memory
# web_server:
#   port: 80

# Allow OTA updates
ota:

# For Dallas temp sensors connected to pin GPIO0 = D3, enable internal pull-up
# resistor
dallas:
  pin:
    number: GPIO0 
    # D3 = GPIO 0
    # inverted: True
    mode: INPUT_PULLUP
  update_interval: 1s #adjust to your own preference


Push de code naar je Wemos en als het goed is verbind hij nu met je WiFi en gaat hij logging uitspugen.

Je zou nu sensor-adressen moeten kunnen vinden in je logging, ongeveer zoiets:



Deze adressen gebruiken we vervolgens om software-matige sensoren te definiëren die data uitspugen richting Home Assistant (MQTT kan ook).


Uiteindelijke YAML code


De finale code is dan iets als:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
esphome:
  name: soepkipsensor
  platform: ESP8266
  board: d1_mini

wifi:
  networks:
  - ssid: "netwerk1"
    password: "password1"
  - ssid: "netwerk2"
    password: "password2"

  manual_ip:
    # Set this to the IP of the ESP
    static_ip: 192.168.1.161
    # Set this to the IP address of the router. Often ends with .1
    gateway: 192.168.1.1
    # The subnet of the network. 255.255.255.0 works for most home networks.
    subnet: 255.255.255.0
    
  #fast_connect: True # Required to connect to hidden SSIDs and only with one network
  domain: ".lan"

  # reboot_timeout: 0s # Do not reboot if no wifi (can be useful for offline use)

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: CV Temp Fallback Hotspot
    password: password123

logger:

# Enable Home Assistant API for logging over wifi.
# Disable reboot loop by setting reboot_timeout to 0s!
api:
  reboot_timeout: 0s

# Disable webserver, Can be useful for diagnostics, but takes up quite some memory
# web_server:
#   port: 80

# Allow OTA updates
ota:

# For Dallas temp sensors connected to pin GPIO0 = D3, enable internal pull-up
# resistor
dallas:
  pin:
    number: GPIO0 
    # D3 = GPIO 0
    # inverted: True
    mode: INPUT_PULLUP
  update_interval: 1s #adjust to your own preference


sensor:
  - platform: dallas
    address: 0x280000000b333728
    name: "CV_supply_temp"
    id: CV_supply_temp
    
  - platform: dallas
    address:  0x590000000e2e4c28
    name: "CV_return_temp"
    id: CV_return_temp
    
  - platform: template
    id: CV_delta_temp
    name: "CV_delta_temp"
    unit_of_measurement: °C
    update_interval: 1s
    lambda: 'return id(CV_supply_temp).state - id(CV_return_temp).state;'


Upload de code (wirelessly, of via USB) naar je Wemos, en Home Assistant zal je verzelf vertellen dat hij nieuwe sensors heeft gevonden ;)


RESULT

https://tweakers.net/fotoalbum/image/hR3zttoWPksht8vxLQikkQbb.png


https://tweakers.net/fotoalbum/image/F7hFbOPqbNNWjugxD6klaOjE.png


IDEAS

Misschien nog een derde DS18B20 toevoegen aan de warmwaterleiding; vervolgens je badkamerventilator starten/harder laten draaien na x minuten warm-water?

De mogelijkheden zijn zo groot als je fantasie (ok, en tijd...).


TOT SLOT

Dit is mijn eerste Tweakblog. Trying to give back to the community. Be gentle :)