Cześć.
Czy możliwe jest aby do jednego GPIO w esp przypisać dwie różne funkcje? Zrobiłem termostat do lodówki na ESP02 ESP01S. Totalne minimum moduł z przekaźnikiem i wyświetlaczem oled plus DS18B20. Mam już wykorzystane wszystkie GPIO: 2 na I2C do wyświetlacza, jeden na 1wire do dallasa i jeden na przekaźnik. Czy dałoby się zrobić tak aby GPIO 1 wire współdzielić z przyciskiem ? Odczyt temperatury może odbywać się co minutę lub nawet dwie a przycisk miałby działać jako zmiana temperatury zadanej termostatu w pętli np. 6 zaprogramowanych temperatur ( 0/2/4/6/8/10 st.) Czyli nic nie klikam i esp co minutkę czyta temperaturę klikam raz esp zmienia temp. o jeden kroczek z np. 2 stopnie na 4 i wraca do czytania temperatury. Nie chce zaprzęgać do tego większej płytki bo to nie ma sensu ani dokładać scalaka i klawiatury i2c. Mogę sterować temperaturą z HA lub www ale guziczek spodobałby pełną autonomię. Wejście 1wire jest teraz podciągnięte a button mógłby być na niskim stanie.
Nie, nie jest to możliwe.
(wręcz wprowadzono kontrolę GPIO już na poziomie lintera by tak nie robić, bo ludzie zanadto kombinowali)
Dodatkowo akurat magistral zazwyczaj nie wolno zwierać do masy, 1-wire póki co z tego co wiem w ESPHome nie ma obsługi strong-pullup (w ESP to i tak wymaga 2 pinów GPIO, bo nie jest realizowane wewnątrz MCU), ale w wielu innych realizacjach ma i to jest przyczyna formalna dla której nie wolno jej zwierać do masy, bo strong-pullup normalnie podpina magistralę do Vcc
, więc robiłbyś zwarcie na zasilaniu MCU.
W ciemno podpowiem, że jeśli to ESP8266 to na przycisk wykorzystaj GPIO0 (które pewnie masz wolne)
PS to taka płytka ESP02?
to ja tam widzę 5 GPIO do potencjalnego wykorzystania
skorzystaj z bryku
w kwestii przeprojektowania konstrukcji - no masz jeszcze możliwość zastąpić Dallasa 1-wire dowolnym czujnikiem temperatury I2C
Na GPIO00 jest przekaźnik to gotowy chińczyk składający się z dwóch modułów przekaźnik ze stabilizatorem 3v3, przyciskiem reset i led plus sam moduł ale mój błąd nie 02 tylko 01S.
Wprowadzasz w błąd, to jest ESP-01 a nie ESP02
Dla mnie nie ma sensu stosowanie ESP-01 w 2025 roku. To strasznie nieudana konstrukcja jest.
No tak na ESP-01s to nie ma szału…
No to w założeniu konstrukcyjnie jest “modem WiFi” (prosty konwerter UART na WiFi), ale nie uważam, że to już kompletnie bezużyteczna konstrukcja - wciąż się nadaje właśnie w takim charakterze w jakim była projektowana, a oprócz tego do usmartowienia gotowych czujników PM czy CO2 itd…
Już się poprawiłem ale rozwiązaniem pewnie będzie dolutowanie kolejnego pinu bezpośrednio pod esp. Pewnie i nie ma sensu ale mam i chcę wykorzystać narazie działa to obecnie w ramach nauki esp.
Można i tak, ja bym wymienił czujnik temperatury na inny.
Z samym dallasem z Chin też się namęczyłem. Test na Arduino: działa odczytuje numer i temperaturę w esp już nie wykryty. Niestety chińczyki miały serię dziwnych podróbek chyba a ja się nastudiowalem o problemach z dallasami w esp sprzed roku po aktualizacji. Zatem jaki czujnik ? Bo dla zabawy miałem dodać drugiego dallasa do zamrażalnika tylko do odczytu.
Jak ktoś ma w szufladzie to i może tak, ale jak miałbym kupować coś budżetowego pod przekaźnik, to raczej szukał bym czegoś bardziej wszechstronnego jak np. płytka HW-622
A dla minimalistycznych zastosowań jak podłączenie czujników, to coś z nowych mikrobowych płytek np. ESP32-C3 (podobno możliwe dla Deep Sleep ~5 µA).
Stan pinu można zawsze odczytać za pomocą digitalRead(pin_nr) bez względu na kierunek.
Jeśli wyjście będzie ustawione jako pullup to zwarcie przycisku do GND można bezpiecznie wykryć, trzeba tylko pamiętać aby po skończonej operacji transmisji wyjście zostawić w stanie H. Jest to możliwe w niektórych zastosowaniach, tylko trzeba to programowo sprytnie zrobić.
To jest proste do sprawdzenia.
Kilka sztuczek na GPIO dla ESP01
Oczywiście się z tym zgadzam, C3 z założenia ma być następcą 8266/8285 które od dawna mają status NRND i chyba nawet zostały wycofane z produkcji, ale w sklepach będą dostępne jeszcze przez lata (w szufladach też u mnie wala się jeszcze chyba więcej niż 5 szt ESP-01s. dla których nie mam sensownego zastosowania).
@Wojteck
Jeśli chodzi o stosunkowo tanie czujniki na magistralę I2C to jest ich sporo, w zasadzie wszystkie to mutisensory oprócz temperatury zmierzysz coś jeszcze)
No tak ale wszystkie to moduły z czujnikami nie wejdą mi kapilarę, którą włożę do lodówki. Na pomiar energii kupiłem już ESP32-C3 mini ale ESP01 czy 02 jeszcze są - czekały aż będzie więcej czasu na domową automatykę. ESP02 zastąpiły częściowo moduły z urządzeń Tuya.
Co do tego termostatu to dolutuję DPIO do buttona tak będzie najprościej bo miejsca w pamięci też za dużo już nie ma a chciałbym dopisać do opcji displaya aby naciśnięcie buttona pokazywało na chwilę ustawioną wartość i wyświetlacz wrócił do wyświetlania aktualnej temp chociaż nie wiem jeszcze jak tego dokonać.
Kod w chwili obecnej wygląda tak:
esphome:
name: lodwifi1
friendly_name: LodWiFi1
esp8266:
board: esp01_1m
logger:
api:
encryption:
key: "9tSQURTFD0PLcx+aOA+v+aJZsOqdpYRein6rcA9Qp8A="
ota:
- platform: esphome
password: "1dbc62cf65ece4e290c6d7651e3c6803"
wifi:
networks:
- ssid: KOTLOWNIA
password: !secret wifi_password_1
- ssid: SALON
password: !secret wifi_password_2
- ssid: PODDASZE
password: !secret wifi_password_3
- ssid: PIWnica
password: !secret wifi_password_4
manual_ip:
static_ip: 192.168.1.78
gateway: 192.168.1.1
subnet: 255.255.255.0
dns1: 192.168.1.1
dns2: 91.234.8.8
ap:
ssid: !secret wifi_ap_ssid
password: !secret wifi_ap_password
captive_portal: null
web_server:
port: 80
version: 3
auth:
username: !secret web_username
password: !secret web_password
time:
- id: time_provider
platform: homeassistant
one_wire:
- platform: gpio
pin: GPIO02
sensor:
- platform: dallas_temp
id: T_lodowka
name: "T_lodowka"
update_interval: 30s
resolution: 12
accuracy_decimals: 1
text_sensor:
- platform: wifi_info
ip_address:
name: ESP IP Address
ssid:
name: ESP Connected SSID
climate:
- platform: thermostat
name: "Lodowka"
sensor: "T_lodowka"
min_cooling_off_time: 300s
min_cooling_run_time: 120s
min_idle_time: 60s
cool_deadband: 1 °C
cool_overrun: 1 °C
cool_action:
- switch.turn_on: cool
idle_action:
- switch.turn_off: cool
default_preset: 6°C
preset:
- name: 0°C
default_target_temperature_high: 0 °C
mode: COOL
- name: 1°C
default_target_temperature_high: 1 °C
mode: COOL
- name: 2°C
default_target_temperature_high: 2 °C
mode: COOL
- name: 3°C
default_target_temperature_high: 3 °C
mode: COOL
- name: 4°C
default_target_temperature_high: 4 °C
mode: COOL
- name: 6°C
default_target_temperature_high: 6 °C
mode: COOL
- name: 8°C
default_target_temperature_high: 8 °C
mode: COOL
visual:
min_temperature: -2 °C
max_temperature: 10 °C
temperature_step: 1 °C
switch:
- platform: gpio
pin: GPIO00
name: "Chlodzenie"
id: cool
inverted: true
font:
- file: 'arial.ttf'
id: font1
size: 50
i2c:
sda: GPIO1 # Change this to your SDA pin
scl: GPIO3 # Change this to your SCL pin
scan: false
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
lambda: |-
it.printf(2, 5, id(font1), "%.1f°C", id(T_lodowka).state);
Poprawki i uwagi mile widziane wraz z sugestiami jak ogarnąć zmianę opcji buttonem i jej wyświetlenie.
W tym YAMLu nie masz żadnej automatyki, więc ja bym sugerował użyć klik i dwuklik (np. 1 klik przejdzie z odczytu temperatury do trybu ustawiania, a np. kolejnymi dwuklikami możesz zmieniać wartości)
Binary Sensor Automation
a do wyświetlania użyć skrypt np. w tym guście
Display pages alternative
W ogóle to warto przestudiować jakieś konstrukcje, które już ktoś inny “zapiął na ostatni guzik” - czy szukałem długo? no może z 5 minut, ale to tylko dlatego, że analizowałem czy wyniki będą użyteczne, ale to trafienia z pierwszej strony wyników w google…
to że zdecydowałeś się na spartański sprzęt nie znaczy, że twój kod będzie jakoś specjalnie prostszy (w tej chwili masz za sobą jakieś 2% roboty)
a odnośnie stosowania wieloklików tu jest ładny przykład