14 Mar 21

T-Watch 2020 : Installation du firmware Sharandac

Catégorie : Hack
Étiquettes :

Il est temps d'installer un firmware un peu plus complet que celui qui est livré avec la montre, qui est très minimaliste. L'idée n'est pas d'installer ce firmware, puis d'utiliser la montre telle quelle, mais juste de voir un peu ce qu'il est possible de faire.

Pour démarrer, petit tour sur le dépôt git de la t-watch. En lisant le fichier README.MD, on apprend que le dernier firmware est fait par sharandac, dans un autre dépôt git : sharandac/My-TTGO-Watch. Pas de problème, continuons le jeu de piste et allons sur ce nouveau dépôt. Sur ce dépôt, pas de version publiée à l'heure actuelle, mais le projet semble en vie : un peu plus de 650 commits, le dernier datant d'il y a deux jours, et 17 contributeurs. C'est plutôt bon signe. Du côté des problèmes remontés, 8 actuellement ouverts, 108 corrigés. Je vois aussi un fichier platformio.ini à la racine du projet. Très bien, on va pouvoir utiliser le framework PlatformIO avec vscode pour compiler le firmware, c'est une bonne chose.

C'est parti. Ouverture de vscode, on laisse le temps à PlatformIO de se charger, et puis dans QUICK ACCESS, on va dans Miscellaneous > Clone Git Project. Je n'ai jamais fait, mais je suppose que ça permet de… cloner un dépôt git directement. Il suffit ensuite de coller l'url du projet https://github.com/sharandac/My-TTGO-Watch.git dans la fenêtre qui apparaît en haut de l'écran, de choisir dans quel dossier placer le dépôt, et le téléchargement du dépôt démarre.

On attend un peu que l'inspection automatique du code se termine. Lecture rapide du fichier platformio.ini, et je m'aperçois que ça fait référence à la version 1 de la t-watch, alors qu'a priori j'ai la version 3. À voir plus tard si on doit adapter.

Lancement de la compilation, ça prend un peu de temps, et là, patatra ! Ça ne compile pas. Myriade de messages d'erreur, dont voici le tout début :

.pio/build/ttgo-t-watch-v1/libf9d/libTTGO TWatch Library.a(TFT_eSPI.cpp.o): In function `TFT_eSPI::width()':
/home/lgr/.platformio/packages/framework-arduinoespressif32@src-745eb9bf7c21582e61c010425ed055df/libraries/FS/src/FS.h:47: multiple definition of `TFT_eSPI::width()'

On dirait qu'une fonction de la bibliothèque TFT_eSPI (qui gère l'écran de la montre) est définie deux fois. Étrange, parce que dans le graph des dépendances qui s'affiche au lancement de la compilation, cette bibliothèque n'apparaît bien qu'une seule fois :

Found 40 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <TTGO TWatch Library> 1.4.1
|   |-- <Wire> 1.0.1
|   |-- <SPI> 1.0
|   |-- <Ticker> 1.1
|   |-- <TFT_eSPI> 2.3.59
|   |   |-- <SPIFFS> 1.0
|   |   |   |-- <FS> 1.0
|   |   |-- <FS> 1.0
|   |   |-- <SPI> 1.0

Petit tour dans l'onglet Libraries de PlatformIO. Une petite recherche dans l'onglet « Installed » m'indique que j'ai déjà installé deux fois cette bibliothèque TFT_eSPI. Le bouton « Reveal » permet de savoir à quel endroit est installée chacune de ces deux bibliothèques :

  • une fois dans le dossier d'un projet. Là, ça ne devrait pas gêner
  • une autre fois dans le « Global storage », je suppose que c'est l'endroit où PlatformIO installe les bibliothèques communes. En cliquant sur « Reveal », ça m'indique le dossier /home/lgr/.platformio/lib/. Il s'agit de la version 2.3.59, la même que celle qui apparaît dans le graph des dépendances.

On désinstalle donc cette bibliothèque et on lance à nouveau la compilation. Cette fois, ça passe ! Le téléversement du firmware dans la montre prend une petite minute, mais passe sans problème également. La montre redémarre ensuite… avec l'écran à l'envers ! À croire que le projet est développé dans l'hémisphère sud ! :-) Il va falloir régler ça, pas question de mettre la montre à l'envers pour pouvoir lire à l'endroit !

Petit tour dans le dossier src\hardware. J'y trouve un fichier display.h avec une ligne très intéressante :

uint32_t rotation = 0;                        /** @brief display rotation */

je remplace donc 0 par 180, puis nouvelle compilation et téléversement. Cette fois, c'est bon, au redémarrage, l'écran est bien dans le bon sens, ouf !

Première impression, ça ressemble au firmware d'origine. Petite nouveauté sur l'écran d'accueil, on a les prévisions météo, mais ça n'a pas l'air configuré. En swipant une fois à droite, et une fois en bas, on arrive à l'écran de configuration. j'active le wifi et je me connecte à la box. De retour à l'écran d'accueil, la montre s'est mise à l'heure et a ajusté la date. Ce n'est pas sur le bon fuseau horaire, mais ça doit se régler quelque part.

Il me reste maintenant à voir comment faire des captures d'écran de la montre et récupérer les images. Il m'a semblé voir quelque chose dans la très sommaire doc d'utilisation du firmware sur le dépôt git. Pour une prochaine fois…