DS18b20+esp d1 mini przestało działać

Witam zrobiłem sobie prosty sterownik do basenu i działał w tamtym roku. w tym już nie chce nie wiem co się stało. Dziwne było to że same dsy się grzały więc kupiłem nowe ale nadal nie chodzi na wyświetlaczu zamiast temperatury to jest napis "nan ". sprawdziłem same czujniki na arduino i działają. Myślałem może że jest jakiś zimny lut ale też nie. zasilam dsy z 5v przez rezystor 4.7k. Nie mam pomysłu juz co to może być. Dsy są podłączone do pinu D7 jest takiś sposób żeby sprawdzić ten ten pin jest dobry (miernikiem przedzwoniłem i jest ok ). Może zmieniło sie coś w programowaniu, macie ten program może coś wam się uda wymyśleć

esphome:
  name: basen
  platform: ESP8266
  board: d1_mini
      
  # Enable logging
logger:
  
# Enable Home Assistant API
api:
  password: "1234567890"

ota:
  password: "1234567890"

  
wifi:
  networks:
  - ssid: "Bobiouiouio"
    password: "pufocek182iouiouiouio"
    
 
   # Optional manual IP

  

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

captive_portal:


i2c:
  sda: D2
  scl: D1
  scan: True 

dallas:
  - pin: D7
    update_interval: 1s


  
  
sensor:
  - platform: dallas
    address: 0x413C01E076AB1B28
    id: tempdallas
    name: "woda" #1
    on_value_range:
        - above: 27 
          then:
            - switch.turn_off: woda
            
  
        - below:  40 
          then:
            - switch.turn_on: woda
            
  
  - platform: dallas
    address: 0x0D3C01E0760A1D28
    name: "Woda" #2
    id: basen
    
  
    
            

  
  
  
 
display:
  - platform: lcd_pcf8574
    dimensions: 20x2
    address: 0x27
    lambda: |-
    
    
    
       it.printf(0, 0, "Temperatura Wody:%.1f", id(tempdallas).state);
       it.printf(0, 1, "Temperatura  Sola:%.2f", id(basen).state);


switch:
  - platform: gpio
    pin: D5
    name: "Pompa"
    id: woda
    
    

binary_sensor:
  - platform: gpio
    pin: 16
    name: "Przycisk"
    on_press:
      then:
        - switch.toggle: woda 

# Example configuration entry
status_led:
  pin: GPIO2

Na początek zmień na 3.3V - zasilaj tak jak cały ESP.
Jeśli nie ruszy tzn. , że grzało i się zgrzało - uszkodził się pin.
Zmień na inny i nie zasilaj tego nigdy z 5V w zastosowaniu z ESP.

1 polubienie

Druga kwestia jest taka - nie do końca rozumiem ideę zasilania przez rezystor (no chyba, że chodzi tu o “układ zasilania pasożytniczego” - parasite, zdecydowanie jednak zalecam użycie połączenia 3 żyłowego w przypadku ESP i 1-wire: masa, zasilanie i linia sygnałowa jako osobne przewody).
Natomiast linia danych powinna być podciągnięta pull-up’em do 3V3 (i tu nawet te 4k7 by pasowało).


Kwestia trzecia - trafiłem na “klony” D1 mini, które po prostu się psuły - zastosowano w nich prawdopodobnie podróbkę ME6211 (który w oryginale ma obciążalność 500mA) lub układ zastępczy, który nie ma pożądanej obciążalności, a ponadto często pada robiąc zwarcie z 5V co kończyło się upieczeniem ESP i/lub flasha - ich cecha charakterystyczna to brak sporo większego od tranzystorów układu stabilizatora napięcia AMS1117 (spotykanego w tych lepszych podróbkach).

Rozwiązanie zapewniające długotrwałą pracę to zasilanie ich z zewnętrznego stabilizatora 3,3V.

Oryginalne D1 mini wyglądają naprawdę inaczej niż to co zwykle kupujemy
https://www.wemos.cc/en/latest/d1/d1_mini.html

1 polubienie

Zmieniłem pin na D5 i to nic nie dało Może źle się wyraziłem desy z 5 v ale rezystor 4,7 jest na lini zasilania a sygnałowej jest tylko do podciągnięcia i to działało jak już wgrałem ten program to mam takie logi

INFO Reading configuration /config/esphome/basen.yaml...
INFO Generating C++ source...
INFO Compiling app...
Processing basen (board: d1_mini; framework: arduino; platform: platformio/espressif8266 @ 3.2.0)
--------------------------------------------------------------------------------
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
Dependency Graph
|-- <ESPAsyncTCP-esphome> 1.2.3
|-- <ESPAsyncWebServer-esphome> 2.1.0
|   |-- <ESPAsyncTCP-esphome> 1.2.3
|   |-- <Hash> 1.0
|   |-- <ESP8266WiFi> 1.0
|-- <DNSServer> 1.1.1
|-- <ESP8266WiFi> 1.0
|-- <ESP8266mDNS> 1.2
|-- <noise-c> 0.1.4
|   |-- <libsodium> 1.10018.1
|-- <Wire> 1.0
Compiling /data/basen/.pioenvs/basen/src/main.cpp.o
Linking /data/basen/.pioenvs/basen/firmware.elf
RAM:   [====      ]  42.6% (used 34888 bytes from 81920 bytes)
Flash: [=====     ]  48.3% (used 504573 bytes from 1044464 bytes)
Building /data/basen/.pioenvs/basen/firmware.bin
esp8266_copy_factory_bin(["/data/basen/.pioenvs/basen/firmware.bin"], ["/data/basen/.pioenvs/basen/firmware.elf"])
========================= [SUCCESS] Took 26.49 seconds =========================
INFO Successfully compiled program.
INFO Resolving IP address of basen.local
INFO  -> 192.168.1.185
INFO Uploading /data/basen/.pioenvs/basen/firmware.bin (508720 bytes)
INFO Compressed to 354867 bytes
Uploading: [============================================================] 100% Done...

INFO Waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from basen.local using esphome API
WARNING Can't connect to ESPHome API for basen.local: Error resolving IP address: [Errno -5] No address associated with hostname
INFO Trying to reconnect to basen.local in the background
INFO Successfully connected to basen.local
[20:56:37][I][app:102]: ESPHome version 2022.5.1 compiled on Jun 14 2022, 20:55:49
[20:56:37][C][status_led:019]: Status LED:
[20:56:37][C][status_led:020]:   Pin: GPIO2
[20:56:37][C][wifi:491]: WiFi:
[20:56:37][C][wifi:353]:   Local MAC: 48:3F:DA:48:54:67
[20:56:37][C][wifi:354]:   SSID: [redacted]
[20:56:37][C][wifi:355]:   IP Address: 192.168.1.185
[20:56:37][C][wifi:356]:   BSSID: [redacted]
[20:56:37][C][wifi:358]:   Hostname: 'basen'
[20:56:37][C][wifi:360]:   Signal strength: -78 dB ▂▄▆█
[20:56:37][C][wifi:364]:   Channel: 3
[20:56:37][C][wifi:365]:   Subnet: 255.255.255.0
[20:56:37][C][wifi:366]:   Gateway: 192.168.0.1
[20:56:37][C][wifi:367]:   DNS1: 192.168.1.185
[20:56:37][C][wifi:368]:   DNS2: 8.8.4.4
[20:56:37][C][logger:274]: Logger:
[20:56:37][C][logger:275]:   Level: DEBUG
[20:56:37][C][logger:276]:   Log Baud Rate: 115200
[20:56:37][C][logger:277]:   Hardware UART: UART0
[20:56:37][C][i2c.arduino:038]: I2C Bus:
[20:56:37][C][i2c.arduino:039]:   SDA Pin: GPIO4
[20:56:37][C][i2c.arduino:040]:   SCL Pin: GPIO5
[20:56:37][C][i2c.arduino:041]:   Frequency: 50000 Hz
[20:56:37][C][i2c.arduino:044]:   Recovery: bus successfully recovered
[20:56:37][I][i2c.arduino:054]: Results from i2c bus scan:
[20:56:37][I][i2c.arduino:060]: Found i2c device at address 0x27
[20:56:37][C][switch.gpio:050]: GPIO Switch 'Pompa'
[20:56:37][C][switch.gpio:051]:   Pin: GPIO15
[20:56:37][C][switch.gpio:073]:   Restore Mode: Restore (Defaults to OFF)
[20:56:38][C][gpio.binary_sensor:015]: GPIO Binary Sensor 'Przycisk'
[20:56:38][C][gpio.binary_sensor:016]:   Pin: GPIO5
[20:56:38][C][dallas.sensor:075]: DallasComponent:
[20:56:38][C][dallas.sensor:076]:   Pin: GPIO14
[20:56:38][C][dallas.sensor:077]:   Update Interval: 3.0s
[20:56:38][W][dallas.sensor:080]:   Found no sensors!
[20:56:38][C][dallas.sensor:089]:   Device 'Woda'
[20:56:38][C][dallas.sensor:089]:     Device Class: 'temperature'
[20:56:38][C][dallas.sensor:089]:     State Class: 'measurement'
[20:56:38][C][dallas.sensor:089]:     Unit of Measurement: '°C'
[20:56:38][C][dallas.sensor:089]:     Accuracy Decimals: 1
[20:56:38][C][dallas.sensor:097]:     Address: 0x8f3f01f098a42e28
[20:56:38][C][dallas.sensor:098]:     Resolution: 12
[20:56:38][C][dallas.sensor:089]:   Device 'woda'
[20:56:38][C][dallas.sensor:089]:     Device Class: 'temperature'
[20:56:38][C][dallas.sensor:089]:     State Class: 'measurement'
[20:56:38][C][dallas.sensor:089]:     Unit of Measurement: '°C'
[20:56:38][C][dallas.sensor:089]:     Accuracy Decimals: 1
[20:56:38][C][dallas.sensor:097]:     Address: 0x9f3c01f096a41d28
[20:56:38][C][dallas.sensor:098]:     Resolution: 12
[20:56:38][C][lcd_pcf8574:024]: PCF8574 LCD Display:
[20:56:38][C][lcd_pcf8574:025]:   Columns: 20, Rows: 2
[20:56:38][C][lcd_pcf8574:026]:   Address: 0x27
[20:56:38][C][lcd_pcf8574:027]:   Update Interval: 1.0s
[20:56:38][C][captive_portal:088]: Captive Portal:
[20:56:38][C][mdns:084]: mDNS:
[20:56:38][C][mdns:085]:   Hostname: basen
[20:56:38][C][ota:085]: Over-The-Air Updates:
[20:56:38][C][ota:086]:   Address: basen.local:8266
[20:56:38][C][ota:089]:   Using Password.
[20:56:38][C][api:138]: API Server:
[20:56:38][C][api:139]:   Address: basen.local:6053
[20:56:38][C][api:141]:   Using noise encryption: YES
[20:56:40][E][dallas.sensor:112]: Requesting conversion failed
[20:56:40][D][sensor:124]: 'Woda': Sending state nan °C with 1 decimals of accuracy
[20:56:40][D][sensor:124]: 'woda': Sending state nan °C with 1 decimals of accuracy
[20:56:43][E][dallas.sensor:112]: Requesting conversion failed
[20:56:43][D][sensor:124]: 'Woda': Sending state nan °C with 1 decimals of accuracy
[20:56:43][D][sensor:124]: 'woda': Sending state nan °C with 1 decimals of accuracy
[20:56:46][E][dallas.sensor:112]: Requesting conversion failed

Zasilasz nadal z 5V?

…działało przypadkiem na granicy rozpoznawalności stanów Hi/Lo …mogły zmienić się warunki zasilania (np. starzenie kondensatorów).
To Ci trochę wyjaśni w czym jest problem.

Wg mojego doświadczenia D1 mini jest dość “kapryśne” w obsłudze DS-a, proponuję przetestować z mniejszym rezystorem 4k czy nawet 3,3 k.

1 polubienie

założyłem nowe d1 mini zasilannie na dsy jest 3,3 v nadal nic spróbuję z tym rezystorem

@andrzej04
Na podstawie loga który wrzuciłeś widać, że nie ma wcale komunikacji z sensorami Dallasa.

Pomysł zmniejszenia rezystancji pullupu jest dobry

Jeśli chcesz sobie ułatwić życie to zakomentuj (lub tymczasowo wywal) całość kodu oprócz niezbędnych podstaw i “gołej” platformy dallas (wtedy logi będą bardziej przejrzyste, wyświetlacz nikogo przecież nie interesuje).

Jutro zmienię rezystor i dam znać o i jak

Daj :), bo to ciekawy przypadek.
Tak jak pisał @szopen odchudź soft albo nawet dla próby uruchom to na tasmocie, żeby wykluczyć przyczynę sprzętową. Spróbuj również tylko jeden czujnik.

OK problem rozwiązany problem był bo miałem zimny lut i teraz dsy czyta dzięki wszystkim za zainteresowanie pozdrawiam

1 polubienie