Aller au contenu
Aux fils des idées English
M5Stack · ESP32-P4 · 5 pouces

M5Stack Tab5 en écran Home Assistant

La tablette pour laquelle le projet est né : un écran tactile de 5 pouces en 1280 × 720 autour d'un ESP32-P4. M5Stack l'a fabriquée avec trois puces d'écran différentes ; le micrologiciel existe pour les trois.

Photo d'un M5Stack Tab5 sur un pied : la fenêtre des lumières avec trois ampoules, l'arc de luminosité à 100 % et douze couleursPhoto du M5Stack Tab5 en écran Home Assistant : l'accueil avec l'heure, la météo et les prévisionsPhoto du M5Stack Tab5 : le thermostat Home Assistant dans la fenêtre du chauffage
Écran
5", 1280 × 720
Processeur
ESP32-P4
Mémoire
32 Mo PSRAM, 16 Mo flash
Radio
ESP32-C6, Wi-Fi 6, BLE 5
Versions d'écran
3

Les trois versions du Tab5

M5Stack a changé plusieurs fois la puce qui pilote l'écran et le tactile. Chacune demande son propre micrologiciel : ils ne sont pas interchangeables. La page d'installation vous fait choisir la vôtre.

ST7123

Fabriquée du 14 octobre 2025 au 28 avril 2026. Écran et tactile dans une seule puce.

Prise en charge : la version sur laquelle le projet a été développé et vérifié, jusqu'à la panne de ma tablette le 11 octobre 2026. C'est le choix par défaut ; le micrologiciel de la 3.9.1 n'a pas encore tourné sur un appareil.

ST7121

Fabriquée depuis le 28 avril 2026. Écran et tactile dans une seule puce.

Tourne chez un utilisateur depuis octobre 2026 (écran, tactile et mot d'éveil) ; installée aussi sur ma deuxième tablette le 21 octobre 2026.

ILI9881C

La version d'origine, fabriquée du 9 mai au 14 octobre 2025, avec une puce tactile GT911 séparée.

Compile, jamais essayée : le micrologiciel est construit à chaque changement, mais personne ne l'a encore lancé sur cette version.

Comment savoir laquelle vous avez : la puce d'écran est écrite sur l'autocollant au dos, juste au-dessus du logo Espressif. Attention, un appareil marqué « ST7123 » peut contenir une ST7121 : dans le doute, essayez l'un puis l'autre micrologiciel.

Vous avez une ST7121 ou une ILI9881C et vous voulez bien essayer ? Racontez ce que ça a donné dans la rubrique de compatibilité des Discussions : c'est ce qui fait avancer ces versions.

La configuration ESPHome

Pour partir de zéro avec ESPHome sur le Tab5 : un exemple complet et court, qui allume l'écran, le tactile, le Wi-Fi et le rétroéclairage, montre une température de Home Assistant et allume une lumière. Choisissez la puce de votre tablette en tête du fichier, puis remplacez les deux entités par les vôtres.

tab5-home-assistant.yamlGitHub
# M5Stack Tab5 avec ESPHome et Home Assistant : écran, tactile, Wi-Fi et rétroéclairage,
# une température de Home Assistant au centre et un bouton qui allume une lumière.
# Broches et réglages du micrologiciel « Écran Home Assistant » (3.9.0), qui tourne sur la
# tablette ; cet exemple, lui, est compilé avec ESPHome 2026.9.1 mais pas essayé tel quel.
substitutions:
  # La puce d'écran est écrite au dos du Tab5, au-dessus du logo Espressif :
  #   ST7123   : M5STACK-TAB5-ST7123, tactile st7123, 100ms
  #   ST7121   : M5STACK-TAB5-ST7121, tactile st7123, 100ms
  #   ILI9881C : M5STACK-TAB5,        tactile gt911,  never
  panel_model: M5STACK-TAB5-ST7123
  touch_chip: st7123
  touch_interval: 100ms

esphome:
  name: tab5
  friendly_name: Tab5
  min_version: 2026.9.0
  on_boot:
    # Le reset de l'écran passe par un expandeur PI4IOE5V6408, qui demande une seconde
    # après le démarrage : sans cette attente, écran noir après un redémarrage logiciel.
    # Un delay() en C : le « delay: » d'ESPHome ne retient pas la mise en route de l'écran.
    - priority: 700
      then:
        - lambda: "delay(1000);"

esp32:
  board: esp32-p4-evboard
  flash_size: 16MB
  framework:
    type: esp-idf
    advanced:
      enable_idf_experimental_features: true
      execute_from_psram: true

# 32 Mo de PSRAM, où LVGL garde l'image entière (buffer_size: 100 % plus bas).
psram:
  mode: hex
  speed: 200MHz

# Le Wi-Fi est sur une deuxième puce, un ESP32-C6, reliée en SDIO.
# Son reset est actif à l'état haut : active_high: false donne « sdmmc_card_init failed ».
esp32_hosted:
  variant: esp32c6
  active_high: true
  clk_pin: GPIO12
  cmd_pin: GPIO13
  d0_pin: GPIO11
  d1_pin: GPIO10
  d2_pin: GPIO9
  d3_pin: GPIO8
  reset_pin: GPIO15
  slot: 1
  sdio_frequency: 20MHz
  use_psram: true

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: "Tab5 secours"

captive_portal:

api:
  encryption:
    key: !secret api_encryption_key
  # Sans Home Assistant connecté, ESPHome redémarre au bout de 15 min par défaut.
  reboot_timeout: 60min

ota:
  - platform: esphome

logger:
  hardware_uart: USB_SERIAL_JTAG

# Un seul bus I2C pour le tactile, les deux expandeurs et les puces audio.
i2c:
  - id: bsp_bus
    sda: GPIO31
    scl: GPIO32
    frequency: 400kHz

pi4ioe5v6408:
  - id: pi4ioe1
    address: 0x43
  - id: pi4ioe2
    address: 0x44

# Alimentations derrière les expandeurs. « wifi_power » alimente l'ESP32-C6 : l'expandeur
# démarre éteint, et sans cette ligne le Wi-Fi ne monte jamais (« sdmmc_card_init failed »).
# Le chargeur reste coupé, comme sans batterie.
switch:
  - platform: gpio
    id: wifi_power
    pin:
      pi4ioe5v6408: pi4ioe2
      number: 0
    restore_mode: ALWAYS_ON
  - platform: gpio
    id: usb_5v_power
    pin:
      pi4ioe5v6408: pi4ioe2
      number: 3
    restore_mode: ALWAYS_ON
  - platform: gpio
    id: external_5v_power
    pin:
      pi4ioe5v6408: pi4ioe1
      number: 2
    restore_mode: ALWAYS_ON
  - platform: gpio
    id: charge_enable
    pin:
      pi4ioe5v6408: pi4ioe2
      number: 7
    restore_mode: ALWAYS_OFF

# Alimentation du lien MIPI-DSI de l'écran : LDO 3 à 2,5 V.
esp_ldo:
  - voltage: 2.5V
    channel: 3

# La dalle est en portrait (720 × 1280) : LVGL la tourne en paysage plus bas.
display:
  - id: panel
    platform: mipi_dsi
    model: ${panel_model}
    dimensions:
      width: 720
      height: 1280
    reset_pin:
      pi4ioe5v6408: pi4ioe1
      number: 4
    pixel_mode: 16bit
    color_order: RGB
    update_interval: never
    auto_clear_enabled: false

# Mêmes broches sur les trois versions. Pas de miroir (il abîme l'image d'une ST7121) :
# LVGL tourne les appuis avec l'image.
touchscreen:
  - id: touch
    platform: ${touch_chip}
    update_interval: ${touch_interval}
    interrupt_pin: GPIO23
    reset_pin:
      pi4ioe5v6408: pi4ioe1
      number: 5
    calibration:
      x_min: 0
      x_max: 720
      y_min: 0
      y_max: 1280

output:
  - platform: ledc
    id: backlight_pwm
    pin: GPIO22
    frequency: 1000Hz

light:
  - platform: monochromatic
    id: backlight
    name: "Rétroéclairage"
    output: backlight_pwm
    restore_mode: RESTORE_DEFAULT_ON

# À remplacer par vos entités. Pour le bouton, cochez dans Home Assistant « Autoriser
# l'appareil à effectuer des actions Home Assistant » (options de l'appareil ESPHome).
sensor:
  - platform: homeassistant
    id: living_room_temperature
    entity_id: sensor.temperature_salon
    on_value:
      - lvgl.label.update:
          id: temperature_label
          text:
            format: "%.1f °C"
            args: [x]

# Les polices intégrées à LVGL n'ont pas les accents : Roboto, téléchargée à la compilation
# (il ne lui manque que des accents combinants, d'où ignore_missing_glyphs).
font:
  - file: "gfonts://Roboto"
    id: font_text
    size: 32
    glyphsets: [GF_Latin_Core]
    ignore_missing_glyphs: true
  - file: "gfonts://Roboto@700"
    id: font_big
    size: 80
    glyphsets: [GF_Latin_Core]
    ignore_missing_glyphs: true

lvgl:
  displays: [panel]
  touchscreens: [touch]
  rotation: 270
  color_depth: 16
  byte_order: little_endian
  buffer_size: 100%
  default_font: font_text
  pages:
    - id: home_page
      widgets:
        - label:
            id: temperature_label
            align: CENTER
            y: -80
            text: "--"
            text_font: font_big
        - button:
            align: CENTER
            y: 120
            width: 360
            height: 120
            widgets:
              - label:
                  align: CENTER
                  text: "Lumière du salon"
            on_click:
              - homeassistant.action:
                  action: light.toggle
                  data:
                    entity_id: light.salon

Validé et compilé avec ESPHome 2026.9.1 le 28/10/2026, pas essayé tel quel sur la tablette : ses broches et ses réglages sont ceux du micrologiciel complet, qui tourne sur la mienne.

Les réglages qui comptent sur cette tablette

  • L'ESP32-C6, qui porte le Wi-Fi, est alimenté par un expandeur (PI4IOE5V6408, broche 0 du second) : sans l'interrupteur wifi_power allumé au démarrage, le lien SDIO ne monte jamais (« sdmmc_card_init failed »). Son reset, GPIO15, est actif à l'état haut.
  • Le reset de l'écran passe par l'autre expandeur, qui demande une seconde après le démarrage : sans l'attente de la ligne on_boot, écran noir après un redémarrage logiciel. Elle doit bloquer, d'où le delay() en C.
  • La dalle est en portrait (720 × 1280) : LVGL la tourne en paysage par rotation: 270, et tourne les appuis avec elle.
  • Pas de miroir sur l'écran ni sur le tactile : il abîme l'image d'une ST7121.
  • Le lien MIPI-DSI est alimenté par le LDO 3 de l'ESP32-P4, à 2,5 V (esp_ldo).
  • Home Assistant attend : sans client de l'API, ESPHome redémarre au bout de 15 minutes par défaut, d'où reboot_timeout: 60min. Pour que le bouton agisse, autorisez l'appareil à effectuer des actions dans ses options ESPHome.

Le micrologiciel complet range le matériel dans tab5-hardware.yaml (son, micros, horloge, batterie compris) et la puce d'écran dans un fichier par version (ecran-st7123.yaml, ecran-st7121.yaml, ecran-ili9881c.yaml). La même tablette sans Home Assistant : Vigie sur le Tab5.

Sur la vraie tablette

Photo du M5Stack Tab5 en écran Home Assistant : l'accueil avec l'heure, la météo et les prévisions
L'accueil
Photo du M5Stack Tab5 : la fenêtre des lumières Home Assistant, luminosité et couleurs
Les lumières
Photo du M5Stack Tab5 : le thermostat Home Assistant dans la fenêtre du chauffage
Le chauffage

Ce qu'il y a dedans

  • ESP32-P4 : processeur RISC-V double cœur, qui fait tourner tout le micrologiciel ; 32 Mo de PSRAM, indispensables pour l'image de 1280 × 720 en mémoire, et 16 Mo de flash.
  • ESP32-C6 à part pour le Wi-Fi 6 et le Bluetooth 5, relié au P4 ; transparent pour ESPHome.
  • Horloge sauvegardée (RX8130CE) : l'heure et le réveil sont justes dès le démarrage, avant le réseau.
  • Son et micros : un convertisseur ES8388 pour le haut-parleur, un ES7210 pour les micros du mot d'éveil.
  • Capteur de mouvement, utilisé par les jeux qui se jouent en inclinant la tablette.
  • Batterie lithium 2S en option, avec chargeur et mesure de tension ; le micrologiciel coupe le chargeur quand il n'y a pas de batterie ou quand la tablette chauffe.

Consommation mesurée à l'entrée USB : 2,6 W écran à 100 %, 1,7 W à 50 %, 1,2 W écran éteint.

L'installer

  1. Branchez la tablette à un ordinateur avec un câble USB-C qui transmet les données, et ouvrez la page d'installation dans Chrome ou Edge.
  2. Choisissez votre version d'écran (ST7123, ST7121 ou ILI9881C), installez, puis donnez le Wi-Fi.
  3. Suivez les étapes Home Assistant : fichiers, ajout de l'appareil, sources météo, blueprint.

Ce que fait l'écran une fois installé : l'écran Home Assistant natif. Une autre carte, plus grande et moins chère : la Waveshare ESP32-P4 7B.