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.



- É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.
# 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.salonValidé 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_powerallumé 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ù ledelay()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



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
- 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.
- Choisissez votre version d'écran (ST7123, ST7121 ou ILI9881C), installez, puis donnez le Wi-Fi.
- 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.