[DefiDIY25] Matrice ESPHome : horloge & capteurs

Bonjour à tous,

Je me lance à mon tour pour vous présentez un projet d’afficheur pour par exemple l’heure et les infos de vos capteurs. Il s’agit d’un bloc de 4 matrices 8*8 max7219 et d’un esp8266 wemos D1 mini.

Il vous permettra d’afficher ce que vous souhaitez de home assistant. L’affichage actuellement est en alternance selon un temps défini paramétrable : l’heure et une température dans mon cas.

Le coût du projet est d’environ 10€.

VID_20250927_165147

Ce projet n’est pas nouveau en soi, on retrouve des projets similaires sur ce forum.

Pour celui-ci, je me suis attaché à créer un boitier compact en 3D intégrant l’afficheur et un wemos D1 et bien documenter ce projet et tout mettre à votre disposition ( fichiers d’impression 3D en stl et le fichier fusion 360 (f3d) si vous désirez le modifier tout est disponible ici.

Le cablage est simple :

On peut pousser assez facilement l’interface avec home assistant comme les timers entre l’affichage des différentes entités : heure, température … ou la gestion de l’éclairage. J’ai encore un peu de temps devant moi avant la fin du concours :wink:

On peut aussi décider de passer le texte en défilement. Vous trouvez tout ici sur ce component sous esphome.

Bien sûr la couleur affichée est à choisir au moment de l’achat de votre dalle. J’avais un rouge en stock.

Le code esphome

esphome:
  name: Display-MAX7219
  friendly_name: Display MAX7219

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxx"

ota:
  - platform: esphome
    password: "xxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

    # Optional manual IP
  manual_ip:
    static_ip: 192.168.1.XXX
    gateway: 192.168.1.1
    subnet: 255.255.255.0

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Display-MAX7219 Fallback Hotspot"
    password: "Da5dersVX7Cp"

captive_portal:
web_server:
  port: 80

spi:
  clk_pin: GPIO5
  mosi_pin: GPIO4

display:
  - platform: max7219digit
    cs_pin: GPIO0
    num_chips: 4
    scroll_enable: False
    lambda: |-
      // éteindre avant d'écrire
      it.turn_on_off(false);

      if (id(mode) == 1) {
          it.strftime(5, 0, id(digit_font), "%H:%M", id(hass_time).now());
      } else {
          it.printf(5, 0, id(digit_font), "%.1f°", id(ha_ext).state);
          id(timer) = 1;
      }

      // rallumer après
      it.turn_on_off(true);
      
      #} else {
          # it.printf(40, 0, id(digit_font), "%s", id(ha_weather).state.c_str());
          #id(timer) = 1;
      #}   

font:
  - file: "fonts/pixelmix.ttf"
    id: digit_font
    size: 8

time:
  - platform: homeassistant
    id: hass_time

sensor:
  - platform: homeassistant
    id: ha_ext
    entity_id: sensor.exterieure
    
#text_sensor:
#  - platform: homeassistant
#    id: ha_weather
#    entity_id: sensor.xxxxxx_daily_original_condition

globals:
  - id: mode # 1 = time, 2 = temperature 3 = xxxxxx
    type: int
    initial_value: "1"
  - id: timer
    type: int
    initial_value: "0"
  - id: time_duration   # en intervalles de 5s
    type: int
    initial_value: "4"  # 4 * 5s = 20s
  - id: temp_duration
    type: int
    initial_value: "1"  # 1 * 5s = 5s
#- id: sensor_duration
#   type: int
#    initial_value: "1"  # 1 * 5s = 5s

interval:
  - interval: 5s
    then:
      - lambda: |-
          id(timer) += 1;

          if (id(mode) == 1 && id(timer) >= id(time_duration)) {
            // après X intervalles d'heure → passe à température
            id(mode) = 2;
            id(timer) = 0;
          } else if (id(mode) == 2 && id(timer) >= id(temp_duration)) {
            // après Y intervalles de température → passe à heure
            id(mode) = 1;
            id(timer) = 0;
          }

En espérant que ce projet vous plaira et vous occupera pour vos journées d’automne ou d’hiver à venir :sweat_smile:

Merci pour ce projet. J’ai le même afficheur dans un placard qui n’attend que d’être utilisé (pour affichage température de l’eau de la piscine).

Pareil chez moi :rofl: