T-Watch. Créer votre 1er projet ESP32 avec la librairie LilyGoWatch (IDE Arduino ou PlatformIO) • Domotique et objets connectés à faire soi-même

La librairie LilyGoWatch pour l’IDE Arduino est livrée avec une l’ensemble des drivers nécessaires pour faire fonctionner les périphériques des montres et boitiers T-Watch. Dans cet article nous allons apprendre comment créer un projet from scratch (de zéro) sur l’IDE Arduino et PlatformIO.

PlatformIO est beaucoup plus performant pour compiler le firmware que l’IDE Arduino, à l’exception de la première compilation. Si vous êtes débutant en programmation, la prise en main de PlatformIO peut être déroutante. Je vous conseille donc par commencer par la lecture de ces quelques articles.

A LIRE AUSSI :

Développer avec PlatformIO. Problèmes et solutions

Créer un projet pour la T-Watch 2020 sur l’IDE Arduino

Avant de pouvoir commencer à développer un projet pour votre T-Watch, T-Block ou T-Bot, vous devez installer le SDK Arduino-ESP32 (ESP-IDF). C’est le kit de développement officiel qui contient toutes les librairies et les outils nécessaires pour pouvoir développer du code Arduino pour les micro-contrôleurs ESP32.

Une fois que le SDK est installé, il faut installer manuellement la librairie TTGO pour les T-Watch depuis GitHub.

Installer la librairie TTGO de LilyGo

LilyGo ne propose pas (encore) sa librairie sur le dépôt officiel de l’IDE Arduino. On va donc devoir aller la récupérer sur GitHub en ce allant sur cette page.

1 Cliquer sur Code puis Download ZIP pour télécharger la librairie. Ne compressez pas l’archive ZIP.

2 Aller dans le menu Croquis de l’IDE Arduino puis Ajouter une bibliothèque et enfin Ajouter une librairie .ZIP.

3 Indiquez le chemin vers le fichier ZIP de la librairie que vous venez de télécharger puis valider pour installer la librairie.

Sélectionner la carte ESP32 TTGO T-Watch (tout modèle)

Une fois installé, allez dans le menu Outils -> Carte de développement

Sélectionnez la carte “TTGO T-Watch” dans la section ESP32.

Si la carte n’apparaît pas dans la liste, mettez à jour le SDK ESP32 depuis le menu Outils -> Carte -> Gestionnaire de cartes. Sélectionner la version puis Installer pour mettre à jour.

Créer un nouveau projet T-Watch sur l’IDE Arduino

Créer un nouveau projet, coller le code Arduino suivant et enregistrer le fichier

// Doit être définit avant d'inclure la libraire LilyGoWatch
// De-commenter la ligne correspondant à votre montre LilyGo
#define LILYGO_WATCH_2019_WITH_TOUCH        // T-Watch 2019 with touchscreen
// #define LILYGO_WATCH_2019_NO_TOUCH       // T-Watch2019-N 
// #define LILYGO_WATCH_2020_V1             // T-Watch 2020

#include 

// Objet C++ qui permettra d'accéder aux fonctions du boitier
TTGOClass *watch;

void setup() {
    // Récupère l'objet et allume l'écran
    watch = TTGOClass::getWatch();
    watch->begin();     
    watch->openBL();
    
    // On utilise la librairie eTFT pour afficher du texte à l'écran
    watch->tft->fillScreen(TFT_BLACK);
    watch->tft->setTextFont(2);
    watch->tft->setTextSize(2);
    watch->tft->setTextColor(TFT_WHITE);
    watch->tft->setCursor(0, 0);
    watch->tft->println(F("Hello T-Watch"));
}

void loop() {}

Explication du code Arduino ESP32

A l’initialisation de la librairie LilyGoWatch, celle-ci charge les drivers (librairies) des périphériques embarqués sur le Core PCB (accéléromètre, horloge RTC, écran TFT ou e-Paper…)

Pour éviter de devoir chercher les constantes à activer manuellement en fonction des périphériques embarqués, on dispose d’une constante (détaillées dans ce paragraphe) pour chaque modèle de T-Watch.

  • LILYGO_WATCH_BLOCK T-Block avec écran eInk
  • LILYGO_WATCH_2019_WITH_TOUCH Boitier avec écran tactile couleur
  • LILYGO_WATCH_2019_NO_TOUCH T-Watch-N sans écran tactile
  • LILYGO_WATCH_2020_V1 T-Watch 2020
  • LILYGO_WATCH_2020_V2 T-Watch 2020 v2 (pas encore commercialisée)

La constante définissant le modèle de T-Watch doit être placée avant d’inclure la librairie LilyGoWatch comme ceci

#define LILYGO_WATCH_2019_WITH_TOUCH 
#include 

La librairie LilyGoWatch permet d’accéder aux méthodes proposées (du moins celles exposées par les développeurs de LilyGo) des différents périphériques de la montre. Pour cela, on déclare un objet C++ de type TTGOClass.

TTGOClass *watch;

Puis on initialise l’objet watch en appelant la méthode getWatch().

watch = TTGOClass::getWatch();

Maintenant, on peut accéder aux fonctions de tous les périphériques.

Par exemple, pour utiliser l’écran TFT de la montre, on commence par initialiser la librairie avec la méthode begin(), puis on allume le rétro-éclairage avec la méthode openBL().

watch->begin();  // Initialise l'écran couleur TFT
watch->openBL(); // Allume le rétro-éclairage de l'écran

Un fork de la librairie SPI_eTFT de Bodmer est intégrée à la librairie LiLyGoWatch. L’écran étant déjà pré-configuré, on peut directement utiliser les fonctionnalités proposées.

Ici on va mettre le fond de l’écran en noir et écrire un simple texte en blanc dans le coin supérieur gauche de l’écran.

watch->tft->fillScreen(TFT_BLACK); 
watch->tft->setTextFont(2); 
watch->tft->setTextSize(2); 
watch->tft->setTextColor(TFT_WHITE); 
watch->tft->setCursor(0, 0); 
watch->tft->println(F("Hello T-Watch"));

Téléverser le projet sur une T-Watch 2020

Voilà, il ne reste plus qu’à téléverser le projet comme n’importe quel autre projet ESP32.

Créer un projet T-Watch sur PlatformIO (VSCode)

Contrairement à l’IDE Arduino, PlatformIO est capable d’aller chercher lui même tout se dont il a besoin sur Internet (SDK, librairies…). Nous allons donc directement passer à la création du projet !

Lisez cet article pour installer et débuter avec PlatformIO rapidement

Depuis le menu PIO, cliquer sur + New project.

Puis

  • Name donner un nom à votre projet
  • Board sélectionner TTGO T-Watch dans la liste (saisir les premières lettres pour chercher plus rapidement)
  • Framework laisser Arduino
  • Location indiquer le chemin d’enregistrement du projet ou conserver celui de PlatformIO par défaut (conseillé pour les débutants)
  • Cliquer sur Continue

Il est possible d’importer (convertir) un projet (ou un exemple) développé avec l’IDE Arduino. Lisez cet article pour en savoir plus

Contrairement à un projet Arduino classique, un projet PlatformIO adopte une structure particulière ainsi qu’un fichier de configuration platformio.ini situé à la racine

project_dir
├── .pio
|     └─ buid
|     └─ libdeps
├── lib
|     └─ ...
├── includes
|     └─ ...
├── src
|     └─ main.cpp
└── test
|     └─ ...
└── platformio.ini

Le dossier caché .pio contiendra

  • Le (ou les) build, les fichiers de compilation et le firmware qui est téléversé sur la carte de développement.
  • Une copie locale des librairies nécessaires au projet. Ici la librairie LilyGoWatch

Le dossier src contiendra le code source du projet. Au minimum un fichier C++ nommé main.cpp. L’équivalent du fichier ino sur l’IDE Arduino.

Lisez cet article pour prendre en main rapidement PlatformIO sur VSCode.

Modifier le fichier du code source main.cpp

L’assistant de création créé un fichier main.cpp dans le dossier scr (source). Ouvrez le puis collez le code suivant

#include Arduino.h
// Select you T-Watch in the platformio.ini file | Sélectionner votre T-Watch dans le fichier platform.io
#include LilyGoWatch.h

// C++ object which will allow access to the functions of the Watch | Objet C++ qui permettra d'accéder aux fonctions du boitier
TTGOClass *watch;

void setup() {
    // Get Watch object and set up the display | Récupère l'objet et allume l'écran
    watch = TTGOClass::getWatch();
    watch->begin();     
    watch->openBL();
    
    // Use eTFT library to display text on screen | On utilise la librairie eTFT pour afficher du texte à l'écran
    watch->tft->fillScreen(TFT_BLACK);
    watch->tft->setTextFont(2);
    watch->tft->setTextSize(2);
    watch->tft->setTextColor(TFT_WHITE);
    watch->tft->setCursor(0, 0);
    watch->tft->println(F("Hello T-Watch"));
}

void loop() {}

Vous pouvez remarquer deux différences par rapport au projet Arduino :

  • Arduino.h nécessaire pour la compilation à partir du framework Arduino
  • La déclaration du type de montre est déplacé dans le fichier de configuration platformio.ini

Modifier le fichier de configuration platformio.ini

La configuration proposée par l’assistant de création de projet de PIO ne déclare pas (encore) les librairies à installer.

On va donc devoir le faire manuellement. Pour cela, ouvrez le fichier platformio.ini qui se trouve à la racine du projet et remplacez la configuration par celle-ci :

[env:ttgo-t-watch]
platform = espressif32
board = ttgo-t-watch
framework = arduino
build_flags =
    ;-D LILYGO_WATCH_2019_WITH_TOUCH=1
    ;-D LILYGO_WATCH_2019_NO_TOUCH=1
    -D LILYGO_WATCH_2020_V1=1
lib_deps =
    TTGO TWatch Library
upload_speed = 2000000
monitor_speed = 115200

Enregistrez le fichier. L’installation des librairies débute automatiquement !

Explications

  • build_flags ajoute automatiquement à la compilation la constante correspondant au modèle de montre ! Dé-commenter la ligne qui correspond à votre montre
  • lib_deps déclare les librairies à intégrer au projet. Elles sont téléchargées et installées automatiquement dans le dossier .pio/libdeps
  • upload_speed vitesse pour téléverser le firmware
  • monitor_speed vitesse du moniteur série

Lisez cet article pour en savoir plus sur le fichier de configuration platformio.ini

Téléverser le projet depuis PlatformIO

Branchez la T-Watch sur un port USB et cliquez sur l’icône en forme de flèche du menu PIO. Le projet et compilé et directement téléversé.

Le temps de compilation est similaire à celui de l’IDE Arduino … la première fois, puis c’est beaucoup plus rapide car PIO ne re-compile que le projet. Testez par vous même, vous ne pourrez plus vous en passer !

Où trouver les exemples installés avec la librairie TTGO ?

L’avantage de l’IDE Arduino et qu’il propose un menu Exemples où il est très facile de retrouver les exemples de codes livrés avec les librairies.

Avec PIO, il suffit d’aller dans le dossier .pio -> libdeps ->ttgo-t-watch -> TTGO T-Watch Library -> examples

Déclarer les accessoires et cartes d’extension pour T-Watch

En fonction du modèle, le Core PCB (l’équivalent de la carte mère d’un ordinateur) d’une T-Watch embarque des périphériques (horloge RTC, accéléromètre, contrôleur d’alimentation, écran eInk ou LCD) et éventuellement une carte d’extension (GPS, GPRS, Lora…).

Lisez cet article pour en savoir plus sur les différents modèles de T-Watch disponibles.

Pour simplifier le développement, on dispose de constantes pour charger les drivers depuis la librairie LilyGoWatch. Inutile donc de connaître les broches de chaque équipement. Tout est pré-configuré.

  • LILYGO_WATCH_HAS_SIM800L, modem GSM/GPRS quad-bandes
  • LILYGO_WATCH_HAS_SIM868, modem GSM/GPRS quad-bandes
  • LILYGO_WATCH_HAS_NFC, lecteur NFC
  • LILYGO_WATCH_HAS_GPRS, modem GPRS
  • LILYGO_WATCH_HAS_GPS, module GPS u-blox NEO M8N
  • LILYGO_WATCH_HAS_LORA, module Lora Semtec 1276 ou 1278
  • LILYGO_WATCH_HAS_BUZZER, buzzer
  • LILYGO_WATCH_HAS_MOTOR, moteur
  • LILYGO_WATCH_HAS_BMA423, accéléromètre 3 axes
  • LILYGO_WATCH_HAS_MPU6050, accéléromètre 6 axes
  • LILYGO_WATCH_HAS_MAX301XX, mesure de la fréquence cardiaque (vient de fixer sur la capot inférieur)
  • LILYGO_WATCH_HAS_PCF8563, horloge RTC
  • LILYGO_WATCH_HAS_SDCARD, lecteur de carte micro SD
  • LILYGO_WATCH_HAS_BUTTON, bouton utilisateur
  • LILYGO_WATCH_HAS_MPR121, interface tactile externe
  • LILYGO_WATCH_HAS_BBQ_KEYBOARD, mini clavier externe !
  • LILYGO_WATCH_HAS_S76_S78G, carte d’extension embarquant le SiP AcSIP S76GXB ou AcSIP S78GXB
  • LILYGO_WATCH_LVGL, active la librairie graphique LVGL. Attention, uniquement pour les écran TFT ST7789
  • LILYGO_WATCH_HAS_TOUCH, driver tactile FT6236
  • LILYGO_WATCH_HAS_BACKLIGHT, rétro-éclairage écran TFT ST7789
  • LILYGO_WATCH_HAS_GAMEPAD, gamepad avec joystick et 4 boutons
  • LILYGO_WATCH_HAS_AXP202, contrôleur d’alimentation I2C AXP202
  • LILYGO_WATCH_HAS_DISPLAY, active l’écran
  • LILYGO_WATCH_HAS_IRREMOTE, émetteur IR (uniquement pour T-Watch 2020)
  • LILYGO_WATCH_HAS_EINK, active l’écran eInk
  • LILYGO_WATCH_DRV2605, contrôleur haptic

Uniquement pour la T-Block

  • LILYGO_EINK_TOUCHSCREEN, écran ePaper tactile
  • LILYGO_BLOCK_ST7796S_MODULE, driver pour écran LCD ST7796S
  • LILYGO_BLOCK_ILI9488_MODULE, driver pour écran LCD ILI9488

Pour éviter de devoir chercher les constantes à activer manuellement, on dispose d’une constante pour chaque T-Watch. Tout est expliqué au prochain paragraphe.

Déclarer le type de T-Watch cible

Pour éviter de devoir chercher les constantes à activer manuellement en fonction des périphériques embarqués, on dispose d’une constante pour chaque modèle de T-Watch

  • LILYGO_WATCH_BLOCK T-Block avec écran eInk
  • LILYGO_WATCH_2019_WITH_TOUCH Boitier avec écran tactile couleur
  • LILYGO_WATCH_2019_NO_TOUCH T-Watch-N sans écran tactile
  • LILYGO_WATCH_2020_V1 T-Watch 2020
  • LILYGO_WATCH_2020_V2 T-Watch 2020 v2 (pas encore commercialisée)

Il suffit d’ajouter la constante au début de votre projet ou dans un fichier de configuration séparé pour charger les librairies et démarrer automatiquement les périphériques à la mise sous tension de l’ESP32.

LILYGO_WATCH_BLOCK, T-Block avec écran eInk

Périphériques activés automatiquement

  • LILYGO_WATCH_HAS_PCF8563, horloge RTC
  • LILYGO_WATCH_HAS_AXP202, contrôleur d’alimentation AXP202
  • LILYGO_WATCH_HAS_BUTTON, bouton utilisateur sur le GPIO36
  • LILYGO_WATCH_HAS_MPU6050, accéléromètre 6 axes

Périphériques non supportés : aucune restriction indiquée

Voir plus d’offres

LILYGO_WATCH_2019_WITH_TOUCH, T-Watch Touch

Périphériques activés automatiquement

  • LILYGO_WATCH_HAS_TOUCH, drivers tactile
  • LILYGO_WATCH_HAS_DISPLAY, écran TFT
  • LILYGO_WATCH_HAS_PCF8563, horloge RTC
  • LILYGO_WATCH_HAS_BMA423, accéléromètre 3 axes
  • LILYGO_WATCH_HAS_AXP202, contrôleur d’alimentation AXP202
  • LILYGO_WATCH_HAS_BACKLIGHT, rétro-éclairage de l’écran piloté par la sortie LDO2 de l’AXP202
  • LILYGO_WATCH_HAS_BUTTON, bouton utilisateur sur le GPIO36

Périphériques non supportés

  • LILYGO_EINK_TOUCHSCREEN, écran e-Paper tactile
  • LILYGO_WATCH_HAS_IRREMOTE, émetteur IR

Voir plus d’offres

LILYGO_WATCH_2019_NO_TOUCH, T-Watch-N sans écran tactile

Périphériques activés automatiquement

  • LILYGO_WATCH_HAS_DISPLAY, écran TFT
  • LILYGO_WATCH_HAS_PCF8563, horloge RTC
  • LILYGO_WATCH_HAS_BMA423, accéléromètre 3 axes
  • LILYGO_WATCH_HAS_AXP202, contrôleur d’alimentation AXP202
  • LILYGO_WATCH_HAS_BACKLIGHT, rétro-éclairage de l’écran piloté par la sortie LDO2 de l’AXP202
  • LILYGO_WATCH_HAS_BUTTON, bouton utilisateur sur le GPIO36

Périphériques non supportés

  • LILYGO_WATCH_HAS_TOUCH, drivers tactile
  • LILYGO_EINK_TOUCHSCREEN, écran e-Paper tactile
  • LILYGO_WATCH_HAS_IRREMOTE, émetteur IR

Voir plus d’offres

LILYGO_WATCH_2020_V1, version 2020, montre au design Apple Watch

Périphériques activés automatiquement

  • LILYGO_WATCH_HAS_TOUCH, drivers tactile
  • LILYGO_WATCH_HAS_DISPLAY, écran TFT
  • LILYGO_WATCH_HAS_BUZZER, buzzer (attention, ce n’est pas un haut parleur)
    LILYGO_WATCH_HAS_MOTOR, vibreur sur la broche 4
  • LILYGO_WATCH_HAS_PCF8563, horloge RTC
  • LILYGO_WATCH_HAS_BMA423, accéléromètre 3 axes
  • LILYGO_WATCH_HAS_AXP202, contrôleur d’alimentation AXP202
  • LILYGO_WATCH_HAS_BACKLIGHT, rétro-éclairage de l’écran piloté par la sortie LDO2 de l’AXP202
  • LILYGO_WATCH_HAS_IRREMOTE, émetteur IR sur la broche 13

Périphériques non supportés : toutes les autres options

Voir plus d’offres

LILYGO_WATCH_2020_V2, T-Watch 2020 en cours de développement

Périphériques activés automatiquement

  • LILYGO_WATCH_HAS_TOUCH, drivers tactile
  • LILYGO_WATCH_HAS_DISPLAY, écran TFT
  • LILYGO_WATCH_HAS_PCF8563, horloge RTC
  • LILYGO_WATCH_HAS_BMA423, accéléromètre 3 axes
  • LILYGO_WATCH_HAS_AXP202, contrôleur d’alimentation AXP202
  • LILYGO_WATCH_HAS_BACKLIGHT, rétro-éclairage de l’écran piloté par la sortie LDO2 de l’AXP202
  • LILYGO_WATCH_HAS_IRREMOTE, émetteur IR sur la broche 4
  • LILYGO_WATCH_HAS_GPS, GPS Air 530
  • LILYGO_WATCH_HAS_SDCARD, lecteur de carte micro SD

Périphériques non supportés : toutes les autres options

Documentations techniques des périphériques

Avez-vous aimé cet article ?

[Total: 0 Moyenne: 0]