Bonjour !
J’ai créé une nouvelle vidéo qui est différente des précédentes. Ici, j’explique pas à pas comment créer un projet de petite station météo de A à Z.
Cette station a les fonctionnalités suivante :
- Relevé des températures, de pression et d’humidité
- Affichage des valeurs sur l’écran (ainsi que de l’adresse IP du serveur WEB)
- Affichage sur serveur Web
- Mise en veille pour économiser l’énergie
- Sortie de la mise en veille grâce à un touch pad et affichage des valeurs
- Stockage des températures min et max relevées
- Remise à zéro des min et max
Voilà, le but est de pouvoir en parler ici. J’ai déjà quelques questions :
- Est-ce que pour la mise en veille vous éteignez les écrans électriquement ou alors, comme moi, vous mettez toutes les pixels à 0 ?
- Est-ce que vous pourriez faire des écrans plus sympas (avec icônes, etc).
- Savez vous comment sauvegarder des objets time en mémoire flash et les restaurer pour affichage sur le display ?
- Savez vous vous servir du composant Graph de display ?
- Avez-vous d’autres idées ou des choses à corriger ?
Voici le code Yaml du tuto :
web_server:
text_sensor:
- platform: wifi_info
ip_address:
name: ESP IP Address
id: ip_address
# Example configuration entry for ESP32
i2c:
- id: bus_a
sda: GPIO21
scl: GPIO22
scan: true
- id: bus_b
sda: GPIO27
scl: GPIO13
scan: true
# BME280
sensor:
- platform: bme280
temperature:
name: "BME280 Temperature"
oversampling: 16x
id: bme280_temperature
on_value:
then:
- lambda: |-
if (id(bme280_temperature).state < id(min_temp)) {
id(min_temp) = id(bme280_temperature).state;
}
if (id(bme280_temperature).state > id(max_temp)) {
id(max_temp) = id(bme280_temperature).state;
}
pressure:
name: "BME280 Pressure"
id: bme280_pressure
humidity:
name: "BME280 Humidity"
id: bme280_humidity
address: 0x76
update_interval: 15s
i2c_id: bus_a
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
update_interval: 0.2s
i2c_id: bus_b
pages:
- id: temp_big
lambda: |-
it.printf(0, 0, id(quicksand_big), "%.1f°", id(bme280_temperature).state);
- id: datas
lambda: |-
it.printf(0, 0, id(quicksand), "%.1f°", id(bme280_temperature).state);
it.printf(0, 18, id(quicksand), "%.0f hPa", id(bme280_pressure).state);
it.printf(0, 36, id(quicksand), "%.0f%%", id(bme280_humidity).state);
- id: min_max
lambda: |-
it.printf(0, 0, id(quicksand), "Min : %.1f°", id(min_temp));
it.printf(0, 14, id(quicksand), "Max : %.1f°", id(max_temp));
std::string ip = id(ip_address).state;
it.printf(0, 40, id(quicksand), "IP : %s", ip.c_str());
- id: clear
lambda: |-
it.fill(COLOR_OFF);
font:
- file: "gfonts://Quicksand"
id: quicksand_big
size: 48
- file: "gfonts://Quicksand"
id: quicksand
size: 16
script:
- id: script_roll
then:
repeat:
count: 3
then:
- display.page.show: temp_big
- delay: 2s
- display.page.show: datas
- delay: 2s
- display.page.show: min_max
- delay: 2s
- display.page.show: clear
#touch pad
esp32_touch:
binary_sensor:
#touch pad
- platform: esp32_touch
name: "ESP32 Touch Pad GPIO33"
pin: GPIO33
threshold: 1000
wakeup_threshold: 2000
on_press:
then:
- script.execute: script_roll
globals:
- id: min_temp
type: float
restore_value: yes
initial_value: "100"
- id: max_temp
type: float
restore_value: yes
initial_value: "-100"
# Reset globals
button:
- platform: factory_reset
name: Restart with Factory Default Settings
deep_sleep:
run_duration: 30s
sleep_duration: 10min
touch_wakeup: true