Réaliser une belle interface écran tft avec un ili9341

Bonjour tout le monde,

Tout d'abord merci encore pour tout ce que vous faites ce forum est vraiment géniale est il regorge d'infos absolument géniales pour aider les noobs comme moi dans le domaine des microcontroler.

Je suis en train de réaliser, comme beaucoup à ce que j'ai pu voir, un système automatisé pour "paludarium" exactement (en gros un mix entre un aquarium, et un terrarium,...en gros)

Voici mon matériel :

D'autres modules :

Je vais passer du sons qui pourront être bien sur baissé sons de nuit, de jours, de pluie, de brume, d'orage, etc. :

Tout ça sera alimenté sur secteur ou par 2 alimentations 12 V 30 A (donc 2 x 360 W) (Alimentation électrique 12V, 1a, 2 a, 3a, 5a, 10a, 15a, 20a, 30a, 40a, 50a, 60a, transformateur d'éclairage, pilote de commutation, adaptateur pour bande LED | AliExpress)

Côté lumière j'ai :

Et pour finir le tout à gérer sur un écran tft LCD SPI de 3.2 pouces de 320 x 240 tactile avec comme IC ILI9341 avec la possibilité de connecter une carte sd en arrière de l'ecran pour tout ce qui est images.
(Page Not Found - Aliexpress.com)

L'objectif :

Avec tout ça mon objectif est, vous l'aurez compris, de faire un système entièrement automatisé avec pompes, ventilation, éclairage, lumière, musique, humidification, etc.
Le tout commandé par un arduino et avec les données variables (T°, hum air, hum sol etc.) retranscrites sur un écran, et la possibilité de changer les variables sur un mode paramètre.
Puis par la suite, pourquoi pas, faire communiquer avec un petite application portable en wifi pour faire varier les paramètre et voir les évolution dans le temps.

Le tout en partant de rien, je ne suis pas vraiment un grosse quiche en informatique mais on va dire que le codage en c++ même simplifié comme celui de l'arduino n'est pas forcement mon domaine de prédilection.
Mais c'est pas grave est c'est bien le but, apprendre. Si ça doit me prendre 2 ans c'est pas bien grave, je suis plutôt obstiné et habitué au gros projets.

Pour l'instant, j'ai essayé tous les capteurs, ça c'est bon, j'ai préparé les alims avec des interrupteurs, j'ai aussi préparer les brumisateurs à ultrason en courcircuitant les bouton et en les installant sur l'alim 12V et pour finir j'ai branché l'écran avec des ponts diviseur de tension et oui l'alim est en 5 V mais les broche m'arche en 3.3V.
Pour les lumières on verra après cela me semble un énorme travail et je pense que je vais me garder ça pour la fin avec flashled ou neoled je sais pas encore.

Mon soucis concerne principalement l'affichage ou plus précisement l'interface utilisateur j'ai un ecran ili9341 de 3.2" et 320x240 avec les pins suivants :
SDO(MISO), LED, SCK, SDI(MOSI), DC, RESET, CS, GND, VCC,
Mon soucis vient du fais que je ne trouve pas de librairie a par bien sur les graphisme de base de la librairie d'adafruit gfx que je trouve quand même très limité.
Avec mon écran la librairie utft ne marche pas, seul l'adafruit marche et ell me va bien et les test marche bien mais dès que je cherche d'autre librairie additionnelle pour une ili9341 pour créer quelque chose avec plus de style je tombe systèmatiquement sur des librairies qui demande des pin comme :
DB1, DB2, DB3... ou RD, WD RS ou CLK.
Y a-t-il une solution ou faut-il que je prenne un autre type d'écran pour réussir à avoir une interface belle propre et utilisable ?
Je n'ai que 9 pins de connexion + 5 pour le touch et 4 pour la sd. certaine ili9341 en ont 40!!! comment cela se fait-il ?
Pour finir, vaudrait-il que je me penche plus vers une raspberry pi pour créer ce genre de réalisation ?

Encore merci pour tout ce que propose votre forum

Nico

Avec mon écran la librairie utft ne marche pas

Celle là je n'ai pas bien compris comment elle peut marcher sur une uno. Il lui faut 16 broches imposées et 5 broches "n'importe quelle broche libre", mais je ne compte que 19 broches en tout! D'après ce que j'ai vu il faut un afficheur avec un bus parallèle de 16 bits.

je tombe systèmatiquement sur des librairies qui demande des pin comme : DB1, DB2, DB3... ou RD, WD RS ou CLK.

Pour les écrans avec un dialogue parallèle. Mais si tu a fait des recherches sur des librairies intéressantes, cela m'intéresse. A part celle d'adfruit je n'en avais pas trouvé d'autres.

Y a-t-il une solution ou faut-il que je prenne un autre type d'écran pour réussir à avoir une interface belle propre et utilisable ?

Un librairie graphique c'est comme une superposition ce couches.

  • une première couche permet le dialogue entre la mega et le ili9341
  • une deuxième couche permet de faire les graphiques de base (ecrire et lire un point, dessiner un pavé plein)
  • une troisième couche permet de faire les droites inclinées, les cercles, les remplissages, les textes, les images
  • au dessus éventuellement des fonctions plus complexes.

A partir de la librairie d'adafruit, si elle s'arrête trop tôt, il suffit de lui ajouter les objets qui lui manque. Qui éventuellement sont récupérables sur d'autre librairies. Une couche élevée fera éventuellement appel aux points, mais pas au dialogue de base.

C'est facile de dire ça quand je n'ai pas trouvé de librairie graphique à mon goût et qu'au lieu de faire comme je conseille ici, j'ai écris ma propre bibliothèque.

Quelles sont les fonctions qu'il faut et qui ne sont pas dans la bibliothèque d'Adafruit?

Je n'ai que 9 pins de connexion + 5 pour le touch et 4 pour la sd. certaine ili9341 en ont 40!!! comment cela se fait-il ?

Le touchpad peut utiliser des broches utilisées ailleurs. Si la broche CS est à l'état hut, cela libère les 4 autres broches qui peuvent être utilisées ailleurs.
Pareil pour la SD. Il lui faut 4 broches qui peuvent être partagées. j'avais une carte SD qui utilisait 4 broches, j'en ai deux qui utilisent 5 broches en tout. Avec 6 broches je pourrais utiliser 2 cartes SD et le touchpad.

Attention aussi au terme ili9341. Cela désigne un driver pour un écran LCD 240x320. C'est une puce, ou plutôt un 1080 pattes. Cela ne devrait pas désigner pas un shield qui est composé d'un driver, d'un écran LCD, d'un rétroéclairage, éventuellement d'un touchpad et de quelques composants supplémentaires. J'ai aussi un ili9341, mais comme broches j'ai DB1, DB2, DB3... ou RD, WD RS ou CLK. Complètement incompatibles. Et j'ai aussi deux écrans de même référence, de même marque, l'un possède un ili9341 mais pas l'autre.

Celle là je n'ai pas bien compris comment elle peut marcher sur une uno.

Non utft marche sur une Uno sur une Mega et même sur toutes les cartes mais a priori elle n'est pas compatible avec le driver ili9341. A la différence d'adafruit qui elle a une "extention" la librairie Adafruit_ILI9341.

Pour les écrans avec un dialogue parallèle. Mais si tu a fait des recherches sur des librairies intéressantes, cela m'intéresse. A part celle d'adfruit je n'en avais pas trouvé d'autres.

Je suis donc tombé forcément sur UTFT avec le Touch puis sur tout ce qui est MCUFRIEND que je n'ai pas réussi à configurer à cause de ces différence de pins ou alors Littlevgl mais a priori de ce que j'ai compris c'est plus pour un esp32 après je suis parti sur TFT_eSPI (là aussi esp32 ou esp8266) ou alors GUIslice c'est faisable mais encore moins poussé que adafruit. J'ai aussi testé Visuiuno et druid builder mais de ce que j'ai compris c'est surtout pour faire une interface sur ordinateur, moi ce qui m'interesse c'est d'avoir une interface sur écran. puis je suis tombé sur Nextion mais qui ne marche que sur leur propre display

Quelles sont les fonctions qu'il faut et qui ne sont pas dans la bibliothèque d'Adafruit?

Ce que je veux faire n'est pas forcément complexe mais je t'avoue que quelques roues ou graphiques serait un plus.
Un passionné a créer une interface excellente le iaqua que je vien de trouver aujourduit sur github : GitHub - anotherhobby/iAqua

5 pour le touchpad?

c'est exactement l'écran que j'ai mais en 3.2 "

ce que tu veux me dire c'est que plusieurs pins de la sd card et du touch pad peuvent se connecter au même pin que celui de l'écran en lui même comme par exemple le CS de l'écran, le T_CS et le SD_CS ?

J'ai aussi un ili9341, mais comme broches j'ai DB1, DB2, DB3... ou RD, WD RS ou CLK. Complètement incompatibles. Et j'ai aussi deux écrans de même référence, de même marque, l'un possède un ili9341 mais pas l'autre.

Du coup la seul réelle solution c'est de faire soit même son propre code pour être sur d'avoir ce que l'on veut, et ça je pense que je l'ai bien compris mais je t'avoue qu'une base un peu "écrémée" peut être un bon point :slight_smile:
Mon premier point sur cette modification de code serait de comprendre la correspondance entre mes pins (MISO, LED, SDK,etc....) avec ceux plus utilisé (DB1, DB2,... ou RD, WR, WS,...etc.)

Encore merci pour cette réponse c'est vraiment chouette de pouvoir partager.

Je pense a priori que ma carte lcd ili9341 devrait marcher avec UTFT. Car il y a un dossier UTFT/tft_drivers/ili9341/ avec des sous dossiers 8, 16, s4p, s5p. je devrais pouvoir trouver mon bonheur dedans mais il y a toujours ce problème de différence de nomination de pins

Non utft marche sur une Uno sur une Mega et même sur toutes les cartes

J'ai toujours su qu'elle fonctionnait sur une Uno. Mais je m'étais arrêté au tableau.
ImageCiDessus.gif
Mais une fois que j'aurais assigné DB0 à DB15, il me resterait les broches A2 à A5 soit 4 broches pour RS, WR, RD, CS et RESET. Et c'est ça que je n'ai pas compris. Je viens de voir maintenant qu'elle est compatible avec un bus de 8 bits comme mes cartes, ou avec le dialogue série comme les tiennes, et que si on utilise le bus 16bits, il suffit de ne pas brancher le RESET.

a priori elle n'est pas compatible avec le driver ili9341

Voici le tableau des drivers compatibles et des pilotes nécessaires:
ImageCiDessus2.gif
le ILI9341 y est et bien avec le SPI. A priori, cela doit fonctionner avec ta carte.

il y a toujours ce problème de différence de nomination de pins

C'est les mêmes noms:
ImageCiDessus3.gif

Un passionné a créer une interface excellente le iaqua que je vien de trouver aujourduit sur github : GitHub - anotherhobby/iAqua

Je pense que les graphiques ne sont pas faits avec la bibliothèque graphique, mais sur un ordinateur, et la bibliothèque graphique se contente d'afficher une image. Adafruit sait le faire. J'ai fait 2 programmes utilisant les interfaces
et
Ce sont des dessins faits sous PC, j'explique ici comment j'ai fait.

Après, on peut utiliser le touchpad directement pour gérer le points d'appuis ou utiliser un gestionnaire pour le faire.

ce que tu veux me dire c'est que plusieurs pins de la sd card et du touch pad peuvent se connecter au même pin que celui de l'écran en lui même comme par exemple le CS de l'écran, le T_CS et le SD_CS ?

Oui, chaque boitier sauf le touchpad a une broche CS active à l'état bas, qui met en haute impédance les sorties et ne lit plus les entrées. Ainsi sur l'écran, ou sur une sd, mettre CS haut fait comme si le reste était déconecté. Du coup les broches sont libres d'utilisation en entrée comme en sortie. Il faut que chaque circuit ait sa propre broche CS, le reste peut être partagé.
Le touchpad peut être un peu particulier, à ma connaissance, il y a deux gestions, soit c'est l'Arduino que le gère et qui fait la conversion analogique pour avoir le point qui est touché, soit c'est un circuit (genre ads7846) qui gère le touchpad et qui envoie les coordonnés. Dans le premier cas on a 4 broches parfois repérées x+, x-, y+, y-, et dans le deuxième on peut avoir 5 broches DO, DI CLK, IRQ, CS par exemple.
Dans le premier cas le touchpad est équivalent à des résistances qui sont laissées et qui ne gêne pas si on a des sorties, dans le deuxième cas CS désactive DO, DI et CLK (je suppose pas IRQ).

Du coup la seul réelle solution c'est de faire soit même son propre code pour être sur d'avoir ce que l'on veut

Ça aide, mais comme on m'a dit, il faut encore en être capable. Mais dans le cas du bocal à poisson, le dessin de l'interface doit être personnel.
En général beaucoup de gens utilisent des bibliothèques toutes faites, et cela convient à peu près.

ImageCiDessus.gif

ImageCiDessus2.gif

ImageCiDessus3.gif

nicolasguillore:
Avec mon écran la librairie utft ne marche pas

Si ton afficheur est bien supporté pas cette librairie.
Il faut déclarer un écran de type ILI9341_S5P.

merci à tous je test tout ça de suite et je reviens vers vous

Bonjour,

Sur le dos de votre écran il y a une puce qui s'occupe de la partie tactile. Si vous y lisez XPT2046 alors c'est cette bibliothèque qu'il vous faut.

super ça marche nickel.
Donc pour toutes les personnes qui voudraient comme moi faire marcher une ili9341 avec la librairie UTFT il faut :
Faire exemple/Arduino (AVR)/ utiliser le mode x fois y (moi 320x240) et prendre le mode serial et mettre
UTFT myGLCD(ILI9341_S5P,MOSI,CLK,CS,RESET,DC) (pour moi UTFT myGLCD(ILI9341_S5P,46,45,49,48,47))

Super je fonce vers la suite de mon projet et je vous en fais part

Sur le dos de votre écran il y a une puce qui s'occupe de la partie tactile. Si vous y lisez XPT2046 alors c'est cette bibliothèque qu'il vous faut.

Oui effectivement c'est bien ça q'il y a marqué