Aller au contenu

Matériel

Révisions matérielles

M5Stack a livré le Tab5 avec trois contrôleurs d'écran différents (journal des versions M5Stack). Chacun demande son propre modèle d'affichage ESPHome, et ils ne sont pas interchangeables (documentation ESPHome mipi_dsi) :

Puce écran Appareils fabriqués Modèle ESPHome tab5_ecran: Statut dans ce projet
ILI9881C + tactile GT911 séparé du 9 mai 2025 au 14 octobre 2025 M5STACK-TAB5 ili9881c 🧪 Compile, non testée — compilée par la CI, jamais lancée sur une tablette
ST7123 (écran et tactile dans une seule puce) du 14 octobre 2025 au 28 avril 2026 M5STACK-TAB5-ST7123 (nommé M5STACK-TAB5-V2 avant ESPHome 2026.7) st7123 (défaut) ✅ Prise en charge — la tablette de l'auteur, utilisée tous les jours
ST7121 (écran et tactile dans une seule puce) depuis le 28 avril 2026 M5STACK-TAB5-ST7121 st7121 ✅ Tourne chez un utilisateur — compilée par la CI ; un autre utilisateur fait tourner ce firmware depuis octobre 2026 : écran, tactile et mot d'activation (discussion #278). L'auteur n'a pas de ST7121

Comment savoir lequel vous avez : la puce écran est inscrite sur l'autocollant au dos, juste au-dessus du logo Espressif. ESPHome prévient qu'un appareil marqué « ST7123 » peut contenir une ST7123 ou une ST7121 : le seul moyen de savoir est d'essayer les deux.

Choisir sa révision : ajoutez une ligne dans Tab5/user_entities.yaml, par exemple tab5_ecran: st7121. Sans elle, le firmware est compilé pour la ST7123. Ce qui change d'une révision à l'autre (modèle d'écran, puce tactile) est dans Tab5/paquets/ecran-<révision>.yaml ; les broches, la calibration et le comportement sont communs, dans Tab5/paquets/tab5-hardware.yaml.

Ce que « non testée » veut dire : la CI compile les fichiers de l'ILI9881C et de la ST7121 à chaque changement de la configuration de l'écran, ils ne peuvent donc pas casser en silence, mais personne n'a encore lancé ce firmware sur une ILI9881C.

  • ILI9881C : modèle d'écran et tactile GT911 repris de la page ESPHome de l'appareil pour la révision d'origine, avec les mêmes broches que la ST7123.
  • ST7121 : ESPHome a un modèle d'écran officiel, mais pas de pilote tactile ST7121. D'après les commentaires du code du modèle dans ESPHome, le firmware d'usine de M5Stack distingue les deux puces en lisant la version du contrôleur tactile : elles partagent donc très probablement le même protocole, et ce projet utilise la plateforme tactile st7123. En juillet 2026, en testant la PR ESPHome qui ajoutait le modèle ST7121, un autre utilisateur a signalé que ce même couple (écran M5STACK-TAB5-ST7121, tactile st7123) marche sur une vraie ST7121 : écran et tactile, précis sur tout l'écran, en paysage. Depuis octobre 2026, ce firmware lui-même tourne sur la ST7121 d'un autre utilisateur (discussion #278) : écran, tactile et mot d'activation marchent. Si, chez vous, l'écran marche mais pas le tactile, le pilote tactile est le premier suspect.

Bon à savoir : la plupart des exemples Tab5 publiés jusqu'ici visent la révision d'origine ILI9881C. En septembre 2026, la page ESPHome de l'appareil n'indique encore qu'elle comme prise en charge, et l'exemple d'IHM Home Assistant de M5Stack ne prend pas en charge les appareils fabriqués après le 14 octobre 2025. Ce projet tourne sur la ST7123 et compile pour les deux autres.

Sur une ST7121, deux points méritent d'être vérifiés : le tactile dans les quatre coins en paysage, et l'ouverture puis la fermeture du flipper Neon Apron, qui passe l'écran en portrait puis le remet en paysage. L'utilisateur cité plus haut tournait l'image dans le bloc display: ; ce firmware la tourne dans LVGL (rotation: 270, modifiée à la volée par Neon Apron), un chemin que personne n'a encore signalé sur une ST7121. Un signalement parle d'un plantage au démarrage avec la rotation LVGL sur une ST7121, mais sur un appareil renvoyé ensuite pour un défaut d'écran : le lien est incertain. Le même signalement montre que le miroir écran/tactile abîme l'image sur une ST7121 : ce firmware ne l'utilise pas.

Vous avez un Tab5 ST7121 ou ILI9881C et vous voulez bien essayer ? Racontez ce que ça a donné dans Discussions → Hardware compatibility.


Waveshare ESP32-P4 7B (expérimentale)

🧪 Tourne sur la carte de l'auteur depuis le 14/10/2026. Le firmware peut aussi être compilé pour la Waveshare ESP32-P4-WIFI6-Touch-LCD-7B (7 pouces, 1024×600, les mêmes ESP32-P4 et ESP32-C6 que le Tab5) : ajoutez tab5_carte: waveshare-7b dans Tab5/user_entities.yaml et compilez avec ESPHome 2026.9.1 ou plus récent (ADR-0061). L'accueil et les popups suivent la taille de son écran ; elle n'a ni capteur de mouvement, ni puce d'horloge, ni jauge de batterie (un connecteur de batterie, dont ce firmware ne se sert pas encore). Son matériel, ses broches, son installation et les problèmes rencontrés à son arrivée ont leur page : Waveshare ESP32-P4 7B. Le reste de cette page parle du Tab5.


M5Stack Tab5 V2

Le Tab5 est un panneau tactile de 5 pouces de M5Stack. Il utilise un ESP32-P4 comme processeur applicatif principal, avec un co-processeur ESP32-C6 séparé gérant la connectivité Wi-Fi et Bluetooth. Ce projet tourne sur la révision ST7123, que ce dépôt appelle « Tab5 V2 » (voir Révisions matérielles).

ESP32-P4 (processeur principal)

Spec Valeur
Architecture RISC-V, dual-core, 360 MHz sur le Tab5 (puce révision v1.3, lue au démarrage ; 400 MHz demande une puce révision v3.x)
SRAM interne 768 KB
PSRAM externe 32 Mo (mode hex, 16 lignes de données, 200 MHz) — mesuré sur la tablette le 26/09/2026 : esp_psram_get_size() = 32 768 Ko, dont 29 567 Ko pour le tas
Flash 16 MB
Interface affichage MIPI-DSI, RGB565 16 bits
Contrôleur tactile I2C (ST7123)

La PSRAM est critique pour ce projet. LVGL nécessite un framebuffer dimensionné à la résolution de l'affichage — à 1280 × 720 px en RGB565, ça fait ~1,8 MB rien que pour le framebuffer. La SRAM interne de l'ESP32-P4 seule ne suffirait pas. Avec 32 Mo de PSRAM, le framebuffer reste entièrement en mémoire externe.

ESP32-C6 (co-processeur)

Gère toute la communication radio : Wi-Fi 6 (802.11ax) et BLE 5. Le ESP32-P4 principal communique avec lui via un bus SDIO (composant esp32_hosted:, 20 MHz). Du point de vue du code ESPHome/LVGL, c'est transparent — les composants Wi-Fi et BLE standards d'ESPHome fonctionnent normalement.

Le C6 a sa propre RAM (512 Ko) et fait tourner le logiciel ESP-Hosted d'Espressif, pas le nôtre : notre firmware, pile TCP/IP (lwIP) comprise, tourne sur le P4. ESPHome compile la partie P4 d'ESP-Hosted (2.12.12 avec ESPHome 2026.9) mais ne met pas le C6 à jour : il garde son logiciel d'usine tant que personne ne le reflashe. Le capteur de diagnostic Tab5 C6 Version en donne la version, lue une fois par démarrage. Le P4 réinitialise le C6 par GPIO 15 à chaque démarrage, redémarrage logiciel compris (réglage par défaut d'ESP-Hosted, CONFIG_ESP_HOSTED_SLAVE_RESET_ON_EVERY_HOST_BOOTUP) ; la seule fois où le C6 n'est pas revenu après une OTA : Incidents connus.

Notes d'un autre projet sur Tab5 (discussion #369, merci à Jiuhai, qui construit des appareils sur Tab5 avec ESP-IDF, sans ESPHome). Elles viennent de la lecture du schéma et du code source, pas de mesures, et l'auteur n'a pas vérifié le schéma :

  • Sur le schéma, le signal de reset du C6, RF_C6_RST, passe par R4 jusqu'à SOC_EXTRF_RST, qui est le GPIO 15 du P4.
  • Firmware compilé avec ESP-IDF, sans ESPHome : dans le Kconfig d'ESP-Hosted (vérifié en 2.12.12), la broche de reset ESP_HOSTED_SDIO_GPIO_RESET_SLAVE vaut 15 par défaut seulement si le préréglage de carte ESP32P4_TAB5_C6_BOARD est choisi, et 54 sur tout autre ESP32-P4 : l'impulsion de reset part alors sur la mauvaise broche et le C6 n'est jamais vraiment réinitialisé (c'est arrivé au premier build de ce projet). grep GPIO_RESET_SLAVE sdkconfig le dit. ESPHome prend la broche dans reset_pin (15 ici). Ce préréglage passe aussi le reset en actif bas, avec un commentaire qui dit que sinon le C6 ne sort jamais du reset sur un Tab5 ; ce firmware utilise active_high: true et le C6 est revenu à chaque démarrage de la tablette de l'auteur (une cinquantaine depuis le 30/09/2026). Les deux ne s'accordent pas, et l'auteur ne sait pas pourquoi.
  • Au démarrage, ESP-Hosted sur le P4 compare sa version à celle du C6 et avertit Version mismatch: Host […] > Co-proc […] ==> Upgrade co-proc to avoid RPC timeouts (compare_fw_version()). Cet avertissement n'existe pas dans un firmware ESPHome : les avertissements d'ESP-IDF sont retirés à la compilation (voir Diagnostiquer). Sur la tablette de l'auteur (2.12.12 sur le P4, 1.4.1 sur le C6), aucun délai RPC dépassé n'a été vu : aucun dans le journal de l'appareil depuis le 30/09/2026, aucun sur trois démarrages lus sur le port série le 07/10/2026.
  • Mettre le C6 à jour n'est pas simple : un projet sur Tab5 constate que le logiciel d'usine du C6 n'offre aucun chemin de mise à jour par SDIO et prévoit d'abord une reprogrammation unique par câble (sslivins/arctic-controller#276, ouvert) ; sur une autre carte P4 + C6, après une mise à jour du logiciel hosted en 2.12.8, le lien SDIO a lâché et le C6 a redémarré en boucle, même après un retour en 2.12.1 (esphome/esphome#16692). Aucun des deux projets ne met le C6 à jour.

Horloge temps réel (RX8130CE)

Adresse 0x32 sur le bus I2C interne (bsp_bus, GPIO31/32), sauvegardée par un supercondensateur de 70 000 µF (spécification M5Stack). Le firmware la lit une fois au démarrage, pour que l'horloge et le réveil aient l'heure avant le réseau, et la réécrit après chaque synchro NTP. Elle stocke l'heure UTC. Le même bus porte aussi le moniteur de batterie INA226 (0x41, voir Alimentation).


Affichage

  • Taille : 5 pouces
  • Résolution : 1280 × 720 px (lot M5Stack Tab5 V2 utilisé dans ce projet)
  • Interface : MIPI-DSI RGB565 16 bits (périphérique LCD de l'ESP32-P4)
  • Tactile : Capacitif multi-touch via la plateforme tactile I2C officielle st7123 d'ESPHome sur la révision ST7123 (depuis ESPHome 2026.7.0 ; l'ancien composant maison my_components/st7123 a été retiré le 06/07/2026) — gt911 sur la révision d'origine ILI9881C, voir Révisions matérielles

Broches

Toutes les broches que le firmware configure, telles qu'écrites dans son YAML. Elles sont les mêmes sur les trois révisions. « PI4IOE 0x43, P1 » veut dire la broche 1 de l'expandeur d'E/S PI4IOE5V6408 d'adresse 0x43 sur le bus I2C interne ; il y en a deux (0x43 et 0x44). La liaison MIPI-DSI elle-même n'a aucune broche dans le YAML : le modèle d'écran de Tab5/paquets/ecran-<révision>.yaml s'en charge. La dernière colonne nomme le composant (son id, ou le bloc qui n'en a pas) et la clé : tests/test_doc_broches.py compare chaque ligne au YAML, dans les deux langues, et échoue si une broche du YAML manque ici.

Fonction Broche Dans le YAML
Bus I2C interne, SDA (400 kHz) GPIO 31 bsp_bus · sda
Bus I2C interne, SCL GPIO 32 bsp_bus · scl
Reset de l'écran PI4IOE 0x43, P4 tab5_display · reset_pin
Interruption du tactile GPIO 23 touch · interrupt_pin
Reset du tactile PI4IOE 0x43, P5 touch · reset_pin
PWM du rétroéclairage (LEDC, 1 kHz) GPIO 22 backlight_pwm · pin
Horloge bit I2S (micro et haut-parleur) GPIO 27 mic_bus · i2s_bclk_pin
Sélection de mot I2S (micro et haut-parleur) GPIO 29 mic_bus · i2s_lrclk_pin
Horloge maître I2S (micro et haut-parleur) GPIO 30 mic_bus · i2s_mclk_pin
Données I2S entrantes, de l'ES7210 (micro) GPIO 28 tab5_microphone · i2s_din_pin
Données I2S sortantes, vers l'ES8388 (haut-parleur) GPIO 26 tab5_speaker · i2s_dout_pin
Activation de l'ampli du haut-parleur PI4IOE 0x43, P1 speaker_enable · pin
Détection de la prise casque PI4IOE 0x43, P7 headphone_detect · pin
Antenne Wi-Fi, interne ou externe PI4IOE 0x43, P0 wifi_antenna_int_ext · pin
Alimentation 5 V externe PI4IOE 0x43, P2 external_5v_power · pin
Alimentation du Wi-Fi PI4IOE 0x44, P0 wifi_power · pin
Alimentation USB PI4IOE 0x44, P3 usb_5v_power · pin
Charge rapide de la batterie (active à 0, laissée à l'arrêt) PI4IOE 0x44, P5 quick_charge · pin
État de charge de la batterie PI4IOE 0x44, P6 batterie_en_charge · pin
Activation de la charge de la batterie PI4IOE 0x44, P7 charge_enable · pin
Liaison ESP32-C6 (SDIO), horloge GPIO 12 esp32_hosted · clk_pin
Liaison ESP32-C6 (SDIO), commande GPIO 13 esp32_hosted · cmd_pin
Liaison ESP32-C6 (SDIO), données 0 GPIO 11 esp32_hosted · d0_pin
Liaison ESP32-C6 (SDIO), données 1 GPIO 10 esp32_hosted · d1_pin
Liaison ESP32-C6 (SDIO), données 2 GPIO 9 esp32_hosted · d2_pin
Liaison ESP32-C6 (SDIO), données 3 GPIO 8 esp32_hosted · d3_pin
Reset de l'ESP32-C6 GPIO 15 esp32_hosted · reset_pin

Le firmware ne déclare qu'un bus I2C (bsp_bus) : toutes les puces I2C qu'il pilote y sont, les deux expandeurs d'E/S, le contrôleur tactile, l'ES8388 et l'ES7210, le capteur de mouvement BMI270 (0x68, Tab5/paquets/tab5-imu.yaml), l'horloge RX8130CE (0x32) et le moniteur de batterie INA226 (0x41 ; l'adresse qu'ESPHome lui donne par défaut, 0x40, est celle de l'ES7210).


Audio — DAC ES8388

Le Tab5 intègre un codec audio ES8388, utilisé ici pour le chemin DAC (sortie haut-parleur) via la plateforme native audio_dac: es8388 d'ESPHome. L'entrée microphone passe par un chip ADC séparé, l'ES7210 (audio_adc: es7210, 16 kHz / 16 bits), dont l'ESP32-P4 lit la sortie en I2S.

Connexions

Les deux puces se règlent par le bus I2C interne et partagent un seul bus I2S (mic_bus) : les trois horloges sont communes, chaque sens a sa ligne de données. Une seule des deux peut tenir ce bus à la fois (ADR-0010). L'ampli du haut-parleur est commandé par le premier expandeur d'E/S (speaker_enable). Les broches sont dans Broches.

Problème de séquence au boot

L'ES8388 nécessite une séquence d'initialisation spécifique sur I2C pour sortir du reset et router correctement l'audio. Si la ligne d'activation de l'amplificateur passe avant que l'horloge I2S soit stable, un fort pop se produit dans le haut-parleur.

Le bloc on_boot d'ESPHome règle ça en séquençant (tab5-ha-hmi.yaml, priorité 600) : 1. Allumer le rétroéclairage, attendre 1 s 2. Régler le volume du media player 3. Seulement alors activer le switch ampli (speaker_enable) 4. Puis attendre la connexion API HA

Cet ordre garantit que l'horloge I2S est stable avant que l'ampli ouvre le chemin vers le haut-parleur. L'initialisation des registres est prise en charge par la plateforme es8388 d'ESPHome elle-même — il n'y a plus d'appel manuel i2c.write_bytes dans la configuration.


Microphone — ADC ES7210 via I2S

Le microphone intégré est capturé par le chip ADC ES7210 (audio_adc: es7210), qui streame vers l'ESP32-P4 en I2S (adc_type: external), sur le bus qu'il partage avec le haut-parleur (voir Broches).

Paramètres de capture : 16 kHz, 16-bit mono. Correspond au format d'entrée attendu par le composant micro_wake_word et par le pipeline vocal de Home Assistant.


Alimentation

Le Tab5 est alimenté en USB-C. Mesurée le 10/10/2026 sur une tablette avec sa batterie : 2,6 W écran à 100 %, 1,7 W à 50 %, 1,2 W écran éteint (consommation) ; le chiffre de 1,5 A donné ici avant n'avait pas de source. La tablette de l'auteur tourne sans batterie sur un port USB de PC ; l'historique gardé par Home Assistant (depuis le 30/09/2026) montre un seul reset par sous-tension, le 06/10/2026 juste après une OTA, cause inconnue. Un chargeur de 5 V / 2 A ou plus laisse de la marge : un conseil, plus une exigence. Sans batterie, la tablette redémarre seule au retour de l'alimentation USB-C, après un câble tiré en marche comme après une extinction par appui long.

Chemin de l'alimentation, lu sur le schéma (notes de Jiuhai dans la discussion #369, page 5 du schéma, non vérifiées par l'auteur). Sans batterie, le 5 V vient de l'USB-C ou de la broche HVIN de l'Ext.Port (broche 2) : HVIN → D7 → FU4 (fusible réarmable de 1 A) → convertisseur abaisseur MP4560 (5,04 V) → diode idéale MAX40200 (1 A au maximum absolu) → SYS_5VBUS ; l'USB-C rejoint SYS_5VBUS par une seconde MAX40200 ; des interrupteurs de charge LPW5209 alimentent ensuite l'écran, le P4, le C6, le haut-parleur, la caméra et la sortie EXT 5V. Selon cette lecture, toutes les charges en 5 V se partagent une seule diode idéale de 1 A : en pointe (luminosité au maximum, son fort, caméra, capteurs externes), une sous-tension semble plus probable qu'une casse. On ne sait pas si cela explique les sous-tensions ci-dessus (sur un port USB de PC). Les appareils de Jiuhai tournent en 9 V par HVIN ; l'auteur n'a jamais alimenté la tablette ainsi. Les mesures annoncées dans la discussion (démarrage par HVIN après une coupure, puissance absorbée au repos, en pointe et pendant une OTA, EXT 5V en charge, vingt redémarrages et OTA d'affilée, dérive de l'horloge) seront ajoutées ici quand elles seront publiées.

La luminosité du rétroéclairage est contrôlée logiciellement via PWM (sortie LEDC sur GPIO 22, light: monochromatic) et peut être réduite depuis Home Assistant. Toucher l'écran quand le rétroéclairage est éteint le rallume (touchscreen: on_release). Il n'y a pas de capteur de luminosité ambiante dans cette configuration.

Batterie. Le Tab5 accepte une batterie lithium à deux éléments (2S) en option. Avant la 3.6.0, le firmware n'activait jamais son chargeur, et un utilisateur a signalé que la batterie ne se chargeait pas (discussion #278). De la 3.6.0 (04/10/2026) à la dernière version publiée, il active le chargeur à chaque démarrage (charge_enable, PI4IOE 0x44 P7), comme la bibliothèque M5Unified de M5Stack, batterie ou pas ; la prochaine version ne l'allume que quand elle trouve une batterie (plus bas). La charge rapide (P5) reste à l'arrêt par défaut : la tablette reste branchée, et la charge standard demande moins de courant au chargeur USB (le mode de charge « Rapide », plus bas, l'allume). Trois entités de diagnostic arrivent dans Home Assistant : Tab5 Batterie en charge (état de charge, P6, lu toutes les 10 s, un changement publié quand il a tenu 30 s), Tab5 Tension batterie (tension mesurée par l'INA226, publiée quand elle bouge de 50 mV ou toutes les 15 min) et Tab5 Batterie (niveau estimé d'après la tension ; il lit trop haut pendant la charge ; « inconnu » tant qu'aucune batterie n'est détectée). Depuis la prochaine version, le niveau suit une courbe de décharge mesurée sur un Tab5 : 6,6 V = 0 %, 7,0 V = 2 %, 7,4 V = 7 %, 7,6 V = 18 %, 7,8 V = 47 %, 8,0 V = 62 %, 8,2 V = 97 %, 8,35 V = 100 %. Elle a été mesurée sur la batterie d'origine de la tablette d'un utilisateur (husyildiz, discussion #278, 15/10/2026) : deux décharges complètes à charge constante, écran éteint (0,17 A environ, 1,2 W), lues dans l'historique de Home Assistant ; la capacité restante est le temps restant jusqu'à la coupure de la protection de la batterie (13 h 23). La seconde nuit a franchi chaque tension à moins de 5 minutes de la première. Jusqu'à la dernière version publiée, c'était une droite, 6,0 V = 0 %, 8,23 V = 100 % (config de référence ESPHome) : une batterie lithium reste longtemps sur un plateau puis s'effondre, et le niveau descendait de 100 à 65 % environ en 11 heures, puis à 0 % en une heure environ ; la 3.9.0-rc.2 prenait la table à vide d'une autre batterie (Samsung EB535151VU, noyau Linux), mieux mais encore plate des heures, puis 58 → 7 % en deux heures. Limites : une seule batterie mesurée ; écran allumé, la tension baisse un peu plus et le niveau lit un peu bas ; sur le plateau de 8,00 à 8,05 V (62 → 81 %), la tension publiée à 50 mV près peut faire sauter le niveau d'environ 20 %. Elles sont désactivées par défaut dans Home Assistant ; avec la batterie montée, les activer sur la page de l'appareil.

Sans batterie, chargeur allumé (de la 3.6.0 à la dernière version publiée), le chargeur charge dans le vide. Il dit « en charge », et l'INA226 lit le chargeur ou l'USB, jamais une batterie : 4,2 V sur la tablette d'un utilisateur dont la batterie d'origine montée lit environ 7,2 V, avec un état de charge qui suit la réalité (05/10/2026) ; sur la tablette de l'auteur, qui n'en a pas, 4,2 V et 8,39 V en alternance toutes les 1 à 3 minutes (soir du 03/10/2026), puis 5,71 V stable (04/10/2026), vers 5,70 à 5,76 V le 08/10/2026. 8,39 V est donc une des valeurs lues sans batterie, pas une batterie pleine. Il fait aussi un léger souffle continu, qui s'arrête quand on coupe le chargeur (dépannage). Jusqu'à la prochaine version, « pas de batterie » veut dire une lecture sous 6,0 V dans les 10 dernières minutes (depuis le 05/10/2026, discussion #278) : le cas de l'alternance repasse au-dessus de 6 V entre deux lectures basses, et le cas des 5,7 V stables reste en dessous.

Détection de la batterie chargeur coupé (prochaine version). Chargeur coupé, l'INA226 lit la batterie elle-même, ou presque rien : sur la tablette de l'auteur, sans batterie, 1,83 à 1,94 V (quatre lectures, 08/10/2026), avec l'état de charge à « pas en charge ». Une batterie 2S, même vide, lit plus de 5 V. Chargeur coupé, 5,5 V ou plus veut donc dire une batterie, moins veut dire aucune (3,0 V jusqu'à la 3.8.0 : un résidu de 3,29 V lu sans batterie le 11/10/2026 le passait, et le chargeur chargeait alors dans le vide ; une batterie 2S ne descend jamais sous 6 V environ, sa protection coupe avant). Quand la tablette regarde :

  • au démarrage (prochaine version), le chargeur reste coupé jusqu'à ce qu'une sonde ait lu la tension chargeur coupé (environ 8 s après la fin de setup()) ; il n'est allumé que si cette lecture voit une batterie (5,5 V ou plus). Le réveil de 30 s d'une batterie en protection ne suit qu'une sonde qui n'a rien vu, si le démarrage précédent avait vu une batterie (gardé en flash, tab5_batterie_memoire : inconnue, aucune, vue), et jamais après un redémarrage anormal (plantage, baisse de tension). Jusqu'à la dernière version publiée, ce réveil venait d'abord, à chaque démarrage tant que rien n'était décidé : 30 s de charge dans le vide au premier démarrage d'une tablette sans batterie (le modèle C145 est vendu sans), et à chaque tour d'une boucle de redémarrages. INA226 muet (présence inconnue) : le chargeur reste coupé. Risque : une batterie neuve ou totalement plate lit moins de 5,5 V, est vue absente et n'est pas réveillée : allumer Tab5 Batterie montée, qui la réveille tout de suite (30 s), puis une fois par heure tant qu'elle n'est pas vue ;
  • chargeur allumé, avec une batterie : une sonde toutes les 10 minutes, et tout de suite après une lecture sous 6 V, pour voir si la batterie a été retirée ;
  • chargeur coupé : chaque lecture (toutes les 60 s) décide, donc une batterie glissée tablette allumée est vue dans la minute ;
  • pas de batterie trouvée alors que l'interrupteur Tab5 Batterie montée dit qu'il y en a une : le chargeur est rallumé 30 s une fois par heure (et tout de suite quand on allume l'interrupteur, depuis le 10/10/2026), puis une sonde, au cas où la batterie était si vide que sa protection l'avait coupée. Interrupteur éteint (aucune batterie déclarée), le chargeur n'est jamais rallumé.

Sans batterie, le chargeur reste coupé : plus de souffle, plus de faux « en charge ». Une quatrième entité de diagnostic, Tab5 Batterie détectée, activée par défaut, publie la décision (inconnue avant la première lecture). Mesuré à ce jour : seulement la lecture sans batterie, sur la tablette de l'auteur ; avec une batterie, pas encore mesuré.

Verrous de sécurité du chargeur. La Tab5 de l'auteur est morte le 11/10/2026, très probablement d'une charge dans le vide (chargeur allumé sans batterie, 7,7 V lus, le P4 passé de 61 à 70 °C en 4 minutes ; pas confirmé, elle est au SAV de M5Stack). Le firmware coupe le chargeur de lui-même :

  • thermique (3.8.1) : CPU à 55 °C ou plus, ou +4 °C en 60 s au-dessus de 48 °C → chargeur coupé au moins 15 minutes, puis jusqu'à une température lue à 44 °C ou moins. Depuis la prochaine version, il est gardé en flash (un redémarrage, provoqué par la chaleur ou non, le retrouve posé) et une température illisible ne le lève plus ;
  • électrique (prochaine version), chargeur allumé : une tension au-dessus de 8,45 V (plus qu'une batterie 2S pleine) ou aucun courant de charge (moins de 20 mA dans un sens ou dans l'autre) pendant 30 s → chargeur coupé et sonde tout de suite (avant : jusqu'à 10 minutes avant la sonde suivante). Pas de courant alors que la sonde lit une batterie pleine (95 % ou plus) veut dire charge terminée : rien d'anormal, le contrôle du courant se tait jusqu'à ce que le niveau repasse sous 90 %. Deux coupures en moins d'une heure verrouillent le chargeur jusqu'au redémarrage suivant. Pas mesuré avec une batterie : la tension lue en fin de charge, et le courant d'une batterie pleine ;
  • chaque verrou se voit : l'entité de diagnostic Tab5 Sécurité chargeur (problème, allumée tant qu'un verrou est posé) et l'événement esphome.tab5_securite_chargeur (cause : thermique, tension ou courant ; mesure ; verrouille : oui quand il est bloqué jusqu'au redémarrage), que la garde « sécurité du chargeur » du package tab5_health change en notification persistante et sur le téléphone.

Ce que le firmware ne peut pas faire pour vous. Ne monter que la batterie 2S prévue pour le Tab5 (type NP-F550, 7,4 V nominal), jamais une batterie à un seul élément (1S). Préférer un chargeur 5 V / 2 A à un port USB de PC : une sous-tension a été vue sur le port d'un PC juste après le passage de la luminosité à 100 % (08/10/2026). HVIN : 6 à 24 V seulement. M5Stack donne 0 à 40 °C ambiants pour le Tab5 : ni au soleil ni contre une source de chaleur.

À l'écran, une icône termine le bandeau d'état (en haut à gauche, après la cloche du réveil) quand l'interrupteur de l'appareil Tab5 Batterie montée est allumé ; il est éteint par défaut et survit aux redémarrages. Sans batterie détectée, l'icône est une prise, de la couleur du texte du thème ; avec une batterie, son glyphe suit le niveau (pleine au-dessus de 80 %, moitié, basse, « ! » sous 20 %, un éclair pendant la charge) et sa couleur est l'échelle du téléphone (get_battery_color() : vert, bleu, ambre, rouge) ; « ? » en gris avant la première lecture. L'icône lit les capteurs sur la tablette même : elle marche aussi avec les entités de la batterie laissées désactivées dans Home Assistant.

Limite de charge (prochaine version). Le réglage de l'appareil Tab5 Limite de charge : « 100 % » (le défaut) ou « 80 % » : la charge s'arrête à 80 % et reprend à 70 %, après au moins 10 minutes d'arrêt. C'est pour une tablette toujours branchée : une batterie lithium gardée sous le plein dure plus longtemps. Le niveau vient de la tension (la courbe de décharge plus haut), et la tension est plus haute pendant la charge qu'au repos : la charge s'arrête donc un peu avant 80 % réels. Avec la courbe mesurée, elle s'arrête vers 8,05 V lus en charge et reprend vers 8,02 V lus chargeur coupé (7,78 V et 7,56 V avec l'ancienne droite) ; les deux sont sur le plateau, et la pause d'au moins 10 minutes évite le va-et-vient (pas mesuré sur une tablette). Pas encore mesuré : chargeur arrêté et USB branché, la tablette tourne-t-elle sur l'USB ou sur sa batterie ? Si c'est sur sa batterie, le mode 80 % la fait aller et venir entre 80 et 70 % au lieu de la mettre au repos.

Mode de charge (prochaine version, ADR-0045). Le réglage de l'appareil Tab5 Mode de charge : « Classique » (le défaut, charge rapide à l'arrêt comme avant) ou « Rapide » : l'entrée de charge rapide du chargeur (nCHG_QC_EN, P5) est allumée, seulement quand le chargeur lui-même l'est — jamais sans batterie, pendant une sonde ou en pause à 80 %. La bibliothèque M5Unified de M5Stack appelle ces deux états 500 mA et 1000 mA (setChargeCurrent) ; aucun de ces courants n'a été mesuré sur cette tablette, ni la chauffe, ni la charge sur le chargeur USB.

Wi-Fi éco (prochaine version, ADR-0045). Le réglage de l'appareil Tab5 Wi-Fi éco : « Jamais » (le défaut : la radio écoute en permanence, power_save_mode: NONE), « Sur batterie » ou « Toujours », avec le même « sur batterie » que l'économie d'énergie. Actif, le Wi-Fi passe en économie légère (WIFI_PS_MIN_MODEM), envoyée au C6 par ESP-Hosted, et revient à l'écoute complète pendant la voix, un son ou une mise à jour. Pas mesuré : le courant gagné, et la latence ajoutée à un push ou un ping (jusqu'à un intervalle DTIM du routeur). Que le logiciel du C6 (1.4.1 sur la tablette de l'auteur) applique la demande n'est pas vérifié non plus ; la ligne de journal tab5.wifi dit si elle a été acceptée.

Consommation (prochaine version). Tab5 Consommation (W) est la tension × le courant de la batterie, quand la batterie se décharge ; elle est inconnue sur secteur, le courant de l'USB n'étant pas mesuré. Sur la tablette, la ligne « Batterie » de la console système montre le niveau et cette puissance sur batterie (par exemple « 78% · 2.4 W »), sinon le niveau et la tension. Mesurée sur une tablette le 10/10/2026 (consommation). Pour la mesurer cas par cas (écran, micro, haut-parleur, thème, économie d'énergie), le script Home Assistant « Tab5 — consumption test » (packages/tab5_mesure_conso.yaml, décrit ici) allume Tab5 Mesure de consommation (prochaine version), qui lit la batterie toutes les 2 s au lieu d'une fois par minute, 2 h au plus.

Alerte de batterie faible (prochaine version). Sur batterie, quand le niveau passe sous 20 %, puis sous 10 %, la tablette envoie l'événement esphome.tab5_batterie_faible (niveau, seuil), une fois par seuil, ré-armé à 30 % ou quand la charge reprend. La garde « batterie faible » du package tab5_health le transforme en notification persistante (celle de 10 % remplace celle de 20 %) et en notification sur le téléphone.

Courant de la batterie et économie d'énergie (06/10/2026). L'INA226 donne aussi le courant de la batterie, publié en Tab5 Courant batterie (diagnostic, désactivé par défaut comme la tension) : positif quand la batterie se décharge, c'est-à-dire quand la tablette tourne sur elle, négatif quand elle charge. Ce sens vient de la bibliothèque M5Unified de M5Stack (getBatteryCurrent : le shunt est câblé pour que la charge se lise négative ; ESPHome publie le registre tel quel), et la tablette d'un utilisateur, avec sa batterie, l'a confirmé le 07/10/2026 (discussion #278). Chaque lecture (toutes les 60 s) décide Tab5 Sur batterie : au-dessus de 50 mA de décharge, sur batterie ; sous 20 mA, branchée ; jamais pendant la charge (elle repasse dès que la charge reprend) ni sans batterie détectée. Le réglage de l'appareil Tab5 Économie d'énergie (« Sur batterie » par défaut) s'en sert : sur batterie, la luminosité est plafonnée à 50 % à la sortie du rétroéclairage (Home Assistant garde la luminosité choisie), descend au plus bas (10 %) après 30 s sans toucher et à 35 % de batterie ou moins (jusqu'à ce que le niveau remonte à 60 % ; 40 % jusqu'à la dernière version publiée, à 23 mV seulement de 35 % sur la courbe de décharge mesurée, contre 0,26 V pour 60 %), les animations s'arrêtent (quel que soit le réglage « Tab5 Animations ») et LVGL redessine 30 fois par seconde au plus hors des jeux. Seuils : Tab5/socle/tab5_economie.h, testés sur PC par tools/test_alarm_clock.cpp ; réglages : réglages.