Kunnen een SDS011 en een MH-Z19C op een NodeMCU v2?

Pagina: 1
Acties:

  • Appesteijn
  • Registratie: Juni 2001
  • Niet online
Om ook eens de luchtkwaliteit te gaan meten en deze data in Home Assistant te gaan loggen heb ik vol goede moed deze kit gekocht: https://www.tinytronics.n...ijnstofmeter-workshop-kit samen met een losse MH-Z19C CO2 sensor.

De kit draait nu goed mbv ESPHome vanuit Home Assistant alleen is het me niet duidelijk hoe ik de MH-Z19C sensor moet aansluiten. Graag jullie advies.

Dit is mijn ESPHome config:
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
uart:
  rx_pin: D2
  tx_pin: D1
  baud_rate: 9600

i2c:
  sda: D3
  scl: D4

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    reset_pin: D0
    address: 0x3C
    lambda: |-
      it.line(0, 0, 128, 64);

sensor:
  - platform: sds011
    id: PM
    pm_2_5:
      name: "Particulate Matter <2.5µm Concentration"
    pm_10_0:
      name: "Particulate Matter <10.0µm Concentration"
    update_interval: 5min
  - platform: dht
    id: DHT22
    pin: D7
    temperature:
      name: "DHT Temperature"
    humidity:
      name: "DHT Humidity"
    model: DHT22
    update_interval: 1min
  - platform: mhz19
    id: CO2
    co2:
      name: "MH-Z19 CO2 Value"
    temperature:
      name: "MH-Z19 Temperature"
    update_interval: 60s
    automatic_baseline_calibration: false


En dit werkt nu correct (behalve dan de MH-Z19 sensor want die is nog niet aangesloten).

Klopt mijn aanname dat ik de UART RX en TX van de MH-Z19C ook moet aansluiten op pin D1 en D2 op de NodeMCU? En dat ESPHome dan zelf middels de UART bus de SDS011 en MH-Z19C uit elkaar haalt?

Acties:
  • +1 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 26-09 11:35

SA007

Moderator Tweaking
UART is geen bus, daar kan maar 1 sensor aan, anders gaan de 2 sensoren gewoon door elkaar heen praten.

Je zal een 2e UART moeten hebben, ik weet niet of ESPHome een software uart heeft die je daarvoor kan gebruiken, of je moet iets van een chip erbij (bijv een 4051) die je laat schakelen tussen verschillende bronnen data en dan om en om de verschillende sensors bekijken.

Andere optie kan zijn als je met chip select/output enable ofzo beide sensoren 'uit' kan zetten en ze om en om aan zetten om data te laten sturen, maar gewoon samen tegelijk aansluiten is geen goed idee.

Acties:
  • 0 Henk 'm!

  • Appesteijn
  • Registratie: Juni 2001
  • Niet online
Volgens mij las ik dat de Nodemcu een tweede UART heeft, eens kijken of dat lukt.

Acties:
  • 0 Henk 'm!

  • Lennyz
  • Registratie: Januari 2010
  • Laatst online: 25-09 09:49
Appesteijn schreef op vrijdag 20 augustus 2021 @ 08:10:
Volgens mij las ik dat de Nodemcu een tweede UART heeft, eens kijken of dat lukt.
Er is wel een soort van halve twee UART op een ESP82666 maar ik denk niet dat die daarvoor geschikt is.

1. Ga voor een software UART. Volgens de manual van ESPhome wordt dat ondersteund.

Whenever possible, ESPHome will use the hardware UART unit on the processor for fast and accurate communication. When the hardware UARTs are all occupied, ESPHome will fall back to a software implementation that may not be accurate at higher baud rates.

Volgens mij kan je gewoon de MH-Z19C aansluiten op andere pins en dan de TX en RX instellen in ESPhome.

2. Pak een ESP32 die 3 UART poorten heeft.

Acties:
  • 0 Henk 'm!

  • Appesteijn
  • Registratie: Juni 2001
  • Niet online
Dank!
Het lijkt te werken, alle sensoren geven een waarde terug. Alleen de MH-Z19C waardes kloppen nog niet helemaal:
Afbeeldingslocatie: https://tweakers.net/i/p1w6qNnGS9qDK__vTCMwcXVj2Xk=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/mT3bBS1iSejErNMuCLLkwUMT.png?f=user_large

Acties:
  • 0 Henk 'm!

  • titan1901
  • Registratie: Januari 2015
  • Laatst online: 08:54
Appesteijn schreef op vrijdag 20 augustus 2021 @ 13:24:
Dank!
Het lijkt te werken, alle sensoren geven een waarde terug. Alleen de MH-Z19C waardes kloppen nog niet helemaal:
[Afbeelding]
Zou je de code van de ESPhome config willen delen waar je dit resultaat mee bereikt hebt? Ik probeer hetzelfde te bereiken maar het is me niet duidelijk hoe ik onderscheid moet maken tussen de verschillende UART pinnen.

Acties:
  • +1 Henk 'm!

  • Appesteijn
  • Registratie: Juni 2001
  • Niet online
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
esphome:
  name: airquality
  platform: ESP8266
  board: nodemcuv2

# Enable logging
logger:
  baud_rate: 0
  
# Enable Home Assistant API
api:

ota:
  password: ""

wifi:
  ssid: ""
  password: ""

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

time:
  - platform: homeassistant
    id: esptime
    
font:
  - file: 'BebasNeue-Regular.ttf'
    id: font2
    size: 36
  - file: 'BebasNeue-Regular.ttf'
    id: font3
    size: 18


captive_portal:

# Example configuration entry
uart:
  - id: uart_1
    rx_pin: D2
    tx_pin: D1
    baud_rate: 9600
  - id: uart_2
    rx_pin: D6
    tx_pin: D5
    baud_rate: 9600

i2c:
  sda: D3
  scl: D4

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    reset_pin: D0
    address: 0x3C
    lambda: |-
       if (id(mhz_co2).has_state()) {
         it.printf(0, 0, id(font3), "%.1fppm", id(mhz_co2).state);
       }
       if (id(dht_temperature).has_state()) {
         it.printf(72, 0, id(font3), "%.1f°C", id(dht_temperature).state);
       }
       if (id(dht_humidity).has_state()) {
         it.printf(72, 24, id(font3), "%.1f%%", id(dht_humidity).state);
       }
       if (id(PM_25).has_state()) {
         it.printf(0, 48, id(font3), "%.1fug/m3", id(PM_25).state);
       }
       if (id(PM_100).has_state()) {
         it.printf(72, 48, id(font3), "%.1fug/m3", id(PM_100).state);
       }
      
switch:
  - platform: template
    name: "MH-Z19 ABC"
    optimistic: true
    on_turn_on:
      - mhz19.abc_enable: mhz19sensor
    on_turn_off:
      - mhz19.abc_disable: mhz19sensor

sensor:
  - platform: sds011
    id: PM
    uart_id: uart_1
    pm_2_5:
      name: "Particulate Matter <2.5µm Concentration"
      id: PM_25
    pm_10_0:
      name: "Particulate Matter <10.0µm Concentration"
      id: PM_100
    update_interval: 5min
    
  - platform: dht
    id: DHT22
    pin: D7
    temperature:
      name: "DHT Temperature"
      id: dht_temperature
      filters:
        - sliding_window_moving_average:
            window_size: 5
            send_every: 5
    humidity:
      name: "DHT Humidity"
      id: dht_humidity
      filters:
        - sliding_window_moving_average:
            window_size: 5
            send_every: 5
    model: DHT22
    update_interval: 1min
    
  - platform: mhz19
    id: mhz19sensor
    uart_id: uart_2
    co2:
      name: "MH-Z19 CO2 Value"
      id: mhz_co2
      filters:
        - sliding_window_moving_average:
            window_size: 5
            send_every: 5
    temperature:
      name: "MH-Z19 Temperature"
    update_interval: 30sec
    automatic_baseline_calibration: false
Pagina: 1