Il y a quelque temps, j'ai eu l'occasion de me procurer une smartwatch Lilygo T-Watch 2020. Il s'agit d'une montre totalement programmable avec un prix plutôt accessible, aux alentours de 30€. Son principal interêt, c'est les différents composants qu'elle embarque, à savoir :
* Un chip ESP32
* Un Module RTC PCF8563 (pour une montre c'est mieux)
* Un écran LCD tactile
* Un accéleromètre
* Un vibreur
* Un haut-parleur
* Un emetteur infrarouge
* Un chip WiFi 802.11 b/g/n
* Un chip Bluetooth 4.2 et BLE
Du coup, c'est plutôt interessant à bricoler et les possibilités de "hack" sont assez importante. Bien que la montre se programme principalement en C++ à l'aide de l'éditeur Arduino, il semble possible de programmer en Python dessus via MicroPython. Du coup, c'est parti.
## Créer l'image Micropython
Avant de pouvoir programmer en python sur la T-Watch, il est tout d'abord nécessaire de déployer un firmware avec Micropython dessus. Comme il n'éxiste pas de firmware officiel, nous allons compiler le notre, y inclure quelques librairies python permettant de jouer avec les composants de la montre et le déployer.
La première étape consiste à télécharger les sources de MicroPython et les différentes dépendances du projet :
Il est ensuite possible de compiler le firmware avec les commandes suivantes :
```bash
make -C ports/esp32 clean
make -C ports/esp32 all
```
Si tout s'est bien passé, le firmware est présent dans le dossier ```ports/esp32/build-GENERIC```. Nous allons pouvoir le tester.
# Tester le firmwware
Pour déployer le firmware que nous venons de compiler, il suffit de brancher la T-Watch en USB à l'ordinateur puis d'entrer la commande suivante :
```bash
make deploy
```
Il est ensuite possible de se connecter à un shell interactif python (REPL) via le port USB en série. Par exemple, à l'aide du logiciel picocom :
```bash
picocom /dev/ttyUSB0 -b115200
```
Il est ensuite possible d'entrer un simple code python :
```python
frommachineimportPin
buzz=Pin(4,Pin.OUT)
# Faire vibrer la montre
buzz.on()
# Arrêter le vibreur
buzz.off()
```
Si tout s'est bien passé, nous allons pouvoir passer à la préparation d'un firmware plus spécifique à la T-Watch. Pour quitter picocom, il suffit d'effectuer ```Ctrl+a Ctrl+x```.
# Préparer un framework spécifique
Comme nous avons pu le voir, le framework actuel permet d'interagir avec les composants de la montre. Néanmoins, il s'agit d'un environnement basique sans librairies permettant, par exemple, d'interagir facilement avec l'écran LCD ou la puce RTC.
Nous allons donc amener quelques bibliothèques dans notre firmware afin de pouvoir les utiliser sur notre montre. Ce type de bibliothèque est souvent chronophage à développer, heureusement, certains projet sur cette montre commence à pointer le bout de leur nez, c'est par exemple le cas de [ce projet](https://gitlab.com/mooond/t-watch2020-esp32-with-micropython/) dont nous allons récupérer quelques fichiers utiles, à savoir :
Le dossier *modules* permet de déposer des bibliothèques écrite en python qui seront intégrées dans notre firmware. Maintenant que c'est fait, nous pouvons recompiler notre firmware et le déployer :
```bash
cd micropython/ports/esp32
make all
make deploy
```
Testons, notre module RTC avec le code suivant :
```python
frommachineimportPin,I2C
importpcf8563
i2c=I2C(0,scl=Pin(22),sda=Pin(21))
rtc=pcf8563.PCF8563(i2c)
# Doit renvoyer l'heure actuelle
print(rtc.hours())
# Changement d'heure
rtc.write_all(hours=12)
print(rtc.hours())
```
Et voilà, il ne reste plus qu'à ajouter quelques autres bibliothèques pour simplifier l'usage de python sur cette montre. Pourquoi pas l'ajout de LVGL pour créer de jolies interfaces ?