Bonjour,
Je voulais vous partager une réalisation simple à base d’esp8266 et afficheur à matrice de leds piloté par un Max7219.
Celui-ci m’affiche en permanence l’heure et des informations utiles pour moi.
Je l’avais mise en place depuis un moment en C++ avec l’IDE Arduino et je viens de le migrer sous Esphome et j’ai étais assez étonné de la rapidité à générer le programme pour faire l’équivalent de ma version Arduino.
Cette afficheur est encastré dans l’entrée et permet d’avoir des information sur l’ouverture du portail et de la porte du ssol (qui a souvent été oubliée ouverte plusieurs nuits).
Et je viens de rajouté avec des led RGB , l’information concernant la couleur du jour pour mon contrat elec. Tempo. (bleu, blanc,rouge) ce qui me permet de ne pas oublié de faire attention à ma consommation les jours rouge surtout).
Le coté esthétique serait surement à revoir mais pour l’instant il me donne satisfaction tout en étant encastré dans un boitier électrique courant.
Voici le rendu à l’entrée:
Les 2 leds rouges allumées à gauche et droite de l’heure m’indique l’ouverture du portail et porte du ssol.
Et la led bleu indique la couleur du Tempo du jour
Le câblage à l’arrache du Wemos D1 Mini, de la matrice de leds et du module Led RVB
En version Fritzing:
Et pour finir le yaml esphome pour faire fonctionner le montage:
esphome:
name: wemosd1mini3-clock
friendly_name: wemosd1mini3-clock
esp8266:
board: d1_mini
# Enable logging
logger:
wifi:
networks:
- ssid: !secret wifi_ssid
password: !secret wifi_password
- ssid: !secret wifi_ssid_backup
password: !secret wifi_password_backup
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "wemosd1mini3-clock"
password: "O7ldeGmyKsvE"
# Enable Home Assistant API
api:
encryption:
key: !secret api_key
ota:
password: !secret ota_pwd
captive_portal:
mqtt:
broker: '192.168.xxx.xxx'
topic_prefix: esphome
discovery: false
birth_message:
topic: home/esphome/wemosd1mini3-clock_sys/binary_sensor/status
payload: online
will_message:
topic: home/esphome/wemosd1mini3-clock_sys/binary_sensor/status
payload: offline
shutdown_message:
log_topic:
spi:
clk_pin: D5
mosi_pin: D7
sensor:
- platform: wifi_signal
name: "Wemosd1Mini3-Clock WiFi AP Signal"
state_topic: home/esphome/wemosd1mini3_ap/sensor/signal
filters: []
update_interval: 300s
- platform: uptime
name: "Wemosd1Mini3-Clock Uptime"
update_interval: 120s
state_topic: home/esphome/wemosd1mini3-clock_sys/sensor/uptime
binary_sensor:
- platform: homeassistant
name: "Etat portail"
id: etat_portail
entity_id: binary_sensor.portail
internal: true
- platform: homeassistant
name: "Etat porte garage"
id: etat_garage
entity_id: binary_sensor.porte_garage
internal: true
text_sensor:
- platform: homeassistant
name: "Tempo du jour"
id: tempo_jour
entity_id: sensor.tempo_aujourd_hui
on_value:
then:
lambda: |-
std::string val = id(tempo_jour).state;
ESP_LOGI("main", "Value of tempo jour: %s", val.c_str());
if (id(tempo_jour).state == "TEMPO_BLEU") {
id(blue_led_on).execute();
}
else if (id(tempo_jour).state == "TEMPO_BLANC") {
id(white_led_on).execute();
}
else if (id(tempo_jour).state == "TEMPO_ROUGE") {
id(red_led_on).execute();
}
switch:
- platform: gpio
name: "Green Led"
id: sw_gled
pin: D2
command_topic: home/esphome/Wemosd1Mini3-Clock_gled/switch/state
state_topic: home/esphome/Wemosd1Mini3-Clock_gled/binary_sensor/state
- platform: gpio
name: "Red Led"
id: sw_rled
pin: D3
command_topic: home/esphome/Wemosd1Mini3-Clock_rled/switch/state
state_topic: home/esphome/Wemosd1Mini3-Clock_rled/binary_sensor/state
- platform: gpio
name: "Blue Led"
id: sw_bled
pin: D6
command_topic: home/esphome/Wemosd1Mini3-Clock_bled/switch/state
state_topic: home/esphome/Wemosd1Mini3-Clock_bled/binary_sensor/state
- platform: gpio
name: "Gnd Leds"
pin: D8
display:
- platform: max7219digit
cs_pin: D4
num_chips: 4
intensity: 2
lambda: |-
it.strftime(5, 0, id(digit_font), "%H:%M", id(hass_time).now());
if (id(etat_garage).state) {
it.draw_pixel_at(0, 7, COLOR_ON);
} else {
it.draw_pixel_at(0, 7, COLOR_OFF);
}
if (id(etat_portail).state) {
it.draw_pixel_at(31, 7, COLOR_ON);
} else {
it.draw_pixel_at(31, 7, COLOR_OFF);
}
font:
- file: "fonts/pixelmix.ttf"
id: digit_font
size: 8
time:
- platform: homeassistant
timezone: "Europe/Paris"
id: hass_time
script:
- id: blue_led_on
then:
- switch.turn_off: sw_gled
- switch.turn_off: sw_rled
- switch.turn_on: sw_bled
- id: white_led_on
then:
- switch.turn_on: sw_bled
- switch.turn_on: sw_rled
- switch.turn_on: sw_gled
- id: red_led_on
then:
- switch.turn_off: sw_bled
- switch.turn_off: sw_gled
- switch.turn_on: sw_rled
Voilà, si cela peut servir ou si vous avez des questions/remarques/améliorations