mardi 27 août 2019

Écrire sur une carte SD avec l'ESP32

Voyons un peu comment procéder pour écrire ou lire des fichiers sur une carte SD avec un ESP32. Ça peut s'avérer utile pour archiver des valeurs mesurées par des capteurs branchés à l'ESP32, par exemple.

En plus de l'ESP32 et d'une carte SD, nous aurons besoin d'un lecteur de carte SD du genre illustré ci-dessous, qui communique avec le microcontrôleur au moyen du protocole SPI (en fait, il est possible de lier directement les broches de l'ESP32 aux connecteurs de la carte, mais ça ne me semble pas très pratique).



Nous programmerons l'ESP32 au moyen de l'IDE Arduino donc, au besoin, vous pouvez vous référer à ce précédent tutoriel pour obtenir des informations supplémentaires.

Connexions

Puisque le module communique par SPI, les connexions sont les suivantes:
  • GND du module SD --- GND de l'ESP32
  • +3.3 du module SD --- 3V3 de l'ESP32
  • +5 du module SD --- pas branché
  • CS du module SD --- GPIO 5 de l'ESP32*
  • MOSI du module SD --- GPIO 23 de l'ESP32
  • SCK du module SD --- GPIO 18 de l'ESP32
  • MISO du module SD --- GPIO 19 de l'ESP32

* La broche CS peut être modifiée dans le sketch, si désiré.

Exemple SD_Test

En général, une fois le module SD connecté, je recommande l'essai du sketch d'exemple CardInfo fourni avec l'IDE Arduino. Mais bien que ce sketch fonctionne correctement avec les cartes Arduino conventionnelles, avec l'ESP8266 et avec les cartes à base de STM32, il est incompatible avec l'ESP 32.

Nous allons plutôt nous rabattre sur le sketch SD_Test, accessible par le menu Fichier - Exemples - SD(esp32) - SD_Test.


Ce sketch comporte 8 routines utiles pour interagir avec une carte SD:
  • listDir: retourne la liste du contenu d'un répertoire
  • createDir: créé un répertoire
  • removeDir: efface un répertoire
  • readFile: lit le contenu d'un fichier
  • writeFile: remplace le contenu d'un fichier
  • appendFile: ajoute du contenu supplémentaire dans un fichier
  • renameFile: renomme un fichier
  • deleteFile: efface un fichier
L'auteur du sketch n'est pas du genre à abuser des commentaires, mais en lisant la section setup() du sketch, on parvient à avoir une assez bonne idée de la façon d'utiliser ces foncions.

Si vous exécutez ce sketch pendant qu'une carte SD se trouve dans le lecteur branché à l'ESP32, le moniteur série devrait vous présenter des informations concernant le contenu de votre carte, ce qui démontrera que vos branchements sont corrects. Si le module SD est mal branché, le moniteur série se contentera d'afficher le message "Card Mount Failed".



Exemple 1: écrire des valeurs mesurées dans un fichier texte

Dans le sketch ci-dessous, je mesure toutes les 5 secondes la valeur analogique de la broche GPIO 36, et j'enregistre le résultat dans un fichier nommé "Valeurs.txt" sur la carte SD (le fichier est créé s'il n'existe pas déjà).





Exemple 2: data logger consultable par WiFi

Ce deuxième sketch est la version ESP32 d'un projet préalablement réalisé sur l'ESP8266: en plus d'enregistrer la valeur mesurée (ainsi que la date et l'heure de la mesure) sur une carte SD, l'ESP32 produit une page web permettant de consulter les 10 mesures les plus récentes.



Articles similaires


Yves Pelletier   (TwitterFacebook)

vendredi 23 août 2019

Écran couleur SPI ST7735 et ESP32 / ESP8266


Aujourd'hui, je vous prodigue quelques conseils sur l'utilisation d'un petit écran couleur de 128 X 160 pixels, utilisant le protocole SPI, et basé sur le contrôleur ST7735, avec une carte ESP32 ou ESP8266.

Il existe plusieurs écrans similaires mais comportant certaines différences (par exemple, ceux dont le contrôleur est le S6D02A1 ou encore le ILI9163). Il est possible que mes indications vous soient utiles même si votre écran n'est pas rigoureusement identique à celui que j'ai utilisé.

Mon modèle porte la mention "KMR-1.8 SPI". Il est muni d'un lecteur de carte SD (que je n'ai pas utilisé pour l'instant) et de 16 connecteurs.




Connexions

Voici la façon de brancher votre écran à l'ESP32 ou à l'ESP8266 pour pouvoir utiliser sans modification la bibliothèque de Bodmer, que je vous présente un peu plus loin.

Schéma du circuit pour un module de développement STM32 (voir description un peu plus loin).

Schéma du circuit pour une carte Wemos D1 mini (voir description ensuite).

Allons-y broche par broche ( la broche numéro 1 de l'écran est celle qui est en bas sur les schéma ci-dessus):
  • #1 GND du KMR-1.8: GND de l'ESP8266 ou de l'ESP32
  • #2 VCC du KMR-1.8: sortie 5 V de l'ESP8266 ou de l'ESP32 *
  • #3 NC du KMR-1.8: Pas branché
  • #4 NC du KMR-1.8: Pas branché
  • #5 NC du KMR-1.8: Pas branché
  • #6 RESET du KMR-1.8: GPIO 2 de l'ESP8266 ou GPIO 4 de l'ESP32
  • #7 AO du KMR-1.8: GPIO 0 de l'ESP8266 ou GPIO 2 de l'ESP32
  • #8 SDA du KMR-1.8: GPIO 13 de l'ESP8266 ou GPIO 23 de l'ESP32
  • #9 SCL du KMR-1.8: GPIO 14 de l'ESP8266 ou GPIO 18 de l'ESP32
  • #10 CS du KMR-1.8: GPIO 15 de l'ESP8266 ou GPIO 15 de l'ESP32
  • #11 SCK du KMR-1.8: pas branché (lecteur de carte SD)
  • #12 MISO du KMR-1.8: pas branché (lecteur de carte SD)
  • #13 MOSI du KMR-1.8: pas branché (lecteur de carte SD)
  • #14 SD_CS du KMR-1.8: pas branché (lecteur de carte SD)
  • #15 LED+ du KMR-1.8: 3.3 V **
  • #16 LED- du KMR-1.8: GND
* Mon écran comporte un régulateur de tension 65z5 (portant la désignation "U2" sur le circuit imprimé) qui permet d'alimenter le module avec une tension de 5 V (si vous préférez l'alimenter avec 3,3 V, il faut fermer par une soudure le jumper "JP1" au verso de l'écran). Notez que certains écrans en apparence identiques sont conçus pour être alimentés avec 3,3 V! Sur ma carte ESP32, la broche "VIN" est directement liée au 5 V de l'alimentation USB et constitue donc une excellente sortie 5 V.

** Pour le rétroéclairage, j'ai utilisé une résistance de protection d'une centaine de ohms, mais elle ne semble pas obligatoire.

Installation de la bibliothèque TFT_eSPI

TFT_eSPI est une bibliothèque spécialement conçue pour piloter des écrans TFT SPI avec l'ESP32 ou l'ESP8266. Elle est compatible avec les contrôleurs ILI9341, ILI9163, ST7735, S6D02A1, ILI9481, ILI9486, ILI9488, HX8357D et ST7789! Elle a été conçue par Bodmer, le même qui a fait des bibliothèques similaires pour l'Arduino. Vous pouvez installer la bibliothèque TFT_eSPI par l'entremise du gestionnaire de bibliothèque de l'IDE Arduino.

Modifications à apporter au fichier User_Setup.h

Une fois la bibliothèque installée, il est très important d'ouvrir le fichier "User_Setup.h" afin d'y sélectionner les paramètres qui conviennent à votre écran. Le chemin d'accès, à partir de votre dossier "libraries", est "libraries / TFT_eSPI / User_Setup.h".

Parmi tous les contrôleurs énumérés, il faut en choisir un seul: pour mon écran, c'est le ST7735.


Ensuite, je choisi la définition qui correspond à mon écran: 128 pixels de largeur et 160 pixels de hauteur.

Il existe plusieurs variantes d'écrans basés sur le ST7735, et Bodmer les a classés selon la couleur de l'onglet de la pellicule qui protégeait l'écran lors de l'achat. En général, on les essaie au hasard jusqu'à ce qu'on tombe sur celle qui fonctionne; dans mon cas, il s'agit du ST7735_BLACKTAB. Si vous choisissez la mauvaise variante, votre écran fonctionnera quand même, mais avec les mauvaises couleurs, ou avec des bandes de pixels aléatoires sur les bords de l'image.

Si vous utilisez un ESP8266, il faut décommenter les lignes qui indiquent le numéro des broches reliées à CS, DC et RST. Bodmer a utilisé la numérotation des cartes NodeMCU. Si vous utilisez une carte ESP8266 qui ne respecte pas la même convention, utilisez plutôt les numéros de GPIO: remplacez "PIN_D8" par "15", "PIN_D3" par "0", et "PIN_D4" par "2".
Si vous utilisez un ESP32, les lignes à décommenter se trouvent un peu plus bas:


Exécution des exemples fournis avec la bibliothèque

Pour vérifier le fonctionnement correct de votre écran, il est temps de faire l'essai de quelques-uns des nombreux exemples fournis avec la bibliothèque (Menu Fichier / Exemples / TFTeSPI / 160 X 128 ). Si tout va bien, vous devriez voir apparaître une image sur l'écran. Si rien n'apparaît à l'écran, ça peut être causé par une connexion incorrecte, ou un paramètre mal réglé dans le fichier User_Setup.h ... bonne chance!



Quelques sketches

Je vous présente un premier sketch qui ne fait rien de très utile sauf explorer quelques fonctions simples de la bibliothèque:
  • setRotation: pour régler l'écran en mode portrait ou en mode paysage
  • fillScreen: pour remplir tout l'écran avec la couleur désirée
  • setTextColor: pour choisir la couleur du texte à écrire
  • drawString: pour écrire un texte qui débute à la position choisie
  • drawCentreString: pour écrire un texte dont le centre se trouve à la position choisie
  • drawLine: pour tracer une droite entre deux positions
  • drawRect: pour tracer le contour d'un rectangle
  • drawCircle: pour tracer le contour d'un cercle
  • drawRoundRect: pour tracer le contour d'un rectangle à coins arrondis
  • drawTriangle: pour tracer un triangle
  • fillRect: pour tracer un rectangle plein
  • fillCircle: pour tracer un cercle plein
  • fillRoundRect: pour tracer un rectangle plein à coins arrondis
  • fillTriangle: pour tracer un triangle plein
  • drawPixel: pour tracer un point


La vidéo ci-dessous permet de constater le résultat.



Un deuxième sketch présente à l'écran la mesure de l'entrée analogique A0.


À lire aussi

Le même écran a également été utilisé avec une carte Arduino Uno , avec une carte STM32 et avec un Raspberry Pi Pico.

D'autres écrans peuvent évidemment être pilotés par une carte ESP8266 ou ESP32, comme par exemple un écran OLED SH1106, un écran Nokia 5110 ou un classique afficheur 16 X 2.

Vous pouvez également consulter la liste de tous les articles concernant l'ESP8266 et l'ESP32.


Yves Pelletier
   (TwitterFacebook)


mardi 20 août 2019

Livre: 40 activités avec la carte micro:bit

40 activités avec la carte micro:bit
Programmation avec Makecode
par Dominique Nibart
Publié en 2019 chez Eyrolles

La carte micro:bit a été conçue d'abord et avant tout pour initier les écoliers britanniques à la programmation. En plus d'entrées/sorties programmables, elle comporte une matrice de 25 LEDs, des boutons, un accéléromètre, une boussole, un capteur de température, bluetooth, et un module de communication radio permettant à plusieurs cartes de communiquer entre elles.  On programme la carte au moyen de MakeCode, un environnement graphique similaire à Scratch qui permet de construire un programme en imbriquant des blocs.

Grâce à ce livre, le néophyte apprendra à transformer sa carte micro:bit en un jeu de pierre-ciseaux-papier, une boussole, un podomètre, un chronomètre, un système d'alarme, un sabre laser, un robot éviteur d'obstacles, et j'en passe, puisqu'il y a en tout une quarantaine de projets proposés.

Tout comme le précédent livre de Dominique Nibart (36 activités avec le robot mBot) , ne cherchez pas de blabla inutile dans cet ouvrage: la plupart des projets occupent une seule page comportant une photographie du montage, une brève description, ainsi que le code "makecode" complet sous forme de blocs imbriqués.

Articles similaires

Vous serez peut-être intéressé par ces autres billets portant sur des livres consacrés à l'électronique.

Yves Pelletier   (TwitterFacebook)