Projet d'affichage déporté sur un écran 7 pouces pour Station météo Netatmo

Bonsoir,
Bonjour,
Nouvelle direction prise par mon projet
Après avoir compris que je ne pourrais pas utiliser les deux écrans 3,5' que j'avais acheté sur mon arduino, j'ai décidé de n'en utiliser qu'un seul... puis je me suis dis que ce serait trop petit... donc qu'il me faudrait un plus grand écran, comme par exemple un écran 7p comme j'ai pu le voir sur un autre projet (en lien ci-dessous).

Je veux donc faire un mix entre ces deux projets :
Ecran permanent pour station Netatmo
Station méteo sur TFT 7 "

J'ai donc commandé un écran 7p avec son shield.

J'ai donc maintenant tout le matériel adéquat :

Pour contrôler l'écran il faut utiliser la bibliothèque UTFT.
Pour les scripts PHP, j'utilise mon NAS Synology en tant que serveur web.

Avancement du projet :

  • :art: Scripts PHP de récupération des données Netatmo/Openweathermap : **OK **
  • :art: Connexion au wifi via l'ESP826 : **OK **
  • :art: Récupération des données depuis l'arduino : **OK **
  • :art: Test de l'écran 7p : En cours...

Il faut aller au message #12 pour la nouvelle direction de mon projet.

PS : je publierais proprement tout le code quand tout sera fonctionnel :slight_smile:

Post initial :


J'ai commandé un kit de démarrage avec un UNO, j'ai commandé un MEGA aussi, et surtout deux écrans TFT "Kuman Ecran Tactile UNO R3 3.5 TFT" (lien amazon)
À priori ce sont deux écrans qui se connecte en mode parallèle donc utilisant pas mal de PIN.
Est-ce qu'il y a moyen de connecter les deux écrans pour qu'ils fonctionnent ensemble sur un seul arduino ? En utilisant le moins de PIN possible ? Car il faut aussi que je connecte un module wifi ESP 8266 ESP01.

Je précise que je ne suis pas encore super calé en arduino et avec sa programmation.

Pour ce projet, j'ai déjà mis à jour les scripts PHP qui permettent de récupérer les données Netatmo et OpenWeaterMap via les 2 API de ces services.
Mais comme je n'ai pas encore le hardware, je ne peux pas trop avancer sur la programmation du programme qui pilotera les deux écrans, le module wifi...

Merci de vos conseils et de votre aide


++
Miles

Bonjour,

Personnellement j'utiliserai un Esp32 et deux ecrans Nextion.

Bonsoir,
Pourquoi ce choix plutôt que ce que je souhaite utiliser ?

J'ai reçu une partie du matériel dont les écrans. Je commencerais à tester demain.
Le 3,5', c'est pas grand :grin: Je le savais mais l'avoir en vrai dans les mains me permet de vraiment le constater :smiley:
Je pourrais aussi alterner l'affichage des données sur un seul écran, toutes les 30s par exemple...
Et je me dis qu'il m'aurait peut-être plutôt fallu du 6 pouces, mais je n'arrive pas à en trouver...

MilesTEG:
Pourquoi ce choix plutôt que ce que je souhaite utiliser ?

Parce que l'esp32 à le wifi intégré et avec les bibliothèques et exemples qu'on trouve partout il est très simple de faire un client ou serveur web.
Parce que les écrans Nextion se connectent par liaison série, donc pas de problème pour en mettre plusieurs et ont leur propre gestion locale de l'interface ce qui simplifie le développement.

Le problème avec l'écran que tu as choisi c'est que le shield utilise quasiment toutes les broches de la UNO.
Éventuellement, si tu n'utilises pas la carte SD tu pourras récupérer les 4 broches de la carte SD.

Ok, je comprends ^^

Vous avez des liens pour acheter un esp32 et un écran Nextion ?
Je peux encore renvoyer les deux écrans à amazon :slight_smile:

PS : l'ESP32 se programme de la même manière que l''arduino UNO / MEGA ?

La dernière fois que j'ai acheté un écran Nextion, je l'ai acheté chez Bangood, c'est là que j'ai trouvé le meilleur prix. L'inconvénient est le délai (de 15 jours à 2 mois).
L'esp32 se trouve un peu partout par exemple chez Amazon ou Bangood ou Aliexpress

Tu peux programmer l'ESP32 dans l'IDE arduino. Il faut ajouter le support de l'ESP32 aux cartes existantes.

kamill:
La dernière fois que j'ai acheté un écran Nextion, je l'ai acheté chez Bangood, c'est là que j'ai trouvé le meilleur prix. L'inconvénient est le délai (de 15 jours à 2 mois).
L'esp32 se trouve un peu partout par exemple chez Amazon ou Bangood ou Aliexpress

Ok, merci. Le fait que ce soit des écrans pour R-Pi, c'est pas gênant ?
Le délai chez banggood est trop long en effet...

merci pour ces conseils.
Je vais déjà voir ce que je peux faire avec l'arduino MEGA et les deux écrans que j'ai, voir un seul.
J'ai un peu moins de 30 jours pour arriver à quelques chose, sinon je renvoi les écrans, et j'avise après.

fdufnews:
Tu peux programmer l'ESP32 dans l'IDE arduino. Il faut ajouter le support de l'ESP32 aux cartes existantes.

J'ai effectivement vu qu'on pouvait faire ça dans l'IDE Arduino.
merci :slight_smile:

MilesTEG:
Ok, merci. Le fait que ce soit des écrans pour R-Pi, c'est pas gênant ?
Le délai chez banggood est trop long en effet...

Non c'est une liaison série, ça fonctionne avec n'importe quelle carte disposant d'une liaison série. Il existe aussi une bibliothèque qu'on peut utiliser avec l'ide arduino, mais on peut s'en passer.

Tu peux aussi trouver les écrans Nextion sur Amazon, mais le prix n'est pas le même. :frowning:

J'ai effectivement vu les prix s'envoler sur amazon...
J'ai vu des écrans pour R-pi dans des prix raisonnable mais je n'ai aucune idée de s'ils sont compatibles avec l'esp32 ou un arduino standard...
(de préférence plus grand que 3,5', au moins 5 du coup, si le cout n'est pas prohibitif...)

Bonjour,
J'ai pu tester l'utilisation d'un écran TFT 3,5" sur mon MEGA. Je n'arrive à le faire fonctionner qu'en mode shield, soit en le fixant sur l'arduino mega, soit en reliant les broches au même endroit que si c'était en raccordé en mode shield.
(pour ça il faut aussi décommenter une ligne dans un librairie à inclure pour faire fonctionner l'écran).

J'ai essayé de connecter l'écran en mode breadboard, mais ça ne veut pas fonctionner... je ne sais pas pourquoi...
Mais même si je passais par ce mode, je ne vois pas comment utiliser un deuxième écran car je ne peux pas définir les PIN de branchement autre que les broches connectés sur les A0 à A4 qui sont définies dans le programme.

Du coup, je vais devoir faire avec un seul écran.
J'arrive à écrire des trucs dessus, tracer des rectangles, donc ça ça ira ^^ bien que les caractères accentués ne passent pas correctement...

Mais du coup, existe-t-il des écrans plus grand que je pourrais raccorder sur un arduino Mega ou UNO ?
(idéalement je souhaiterais au moins du 6-7 pouces...)
Merci d'avance
Miles

Bonjour,
Nouvelle direction prise par mon projet

Après avoir compris que je ne pourrais pas utiliser les deux écrans 3,5' que j'avais acheté sur mon arduino, j'ai décidé de n'en utiliser qu'un seul... puis je me suis dis que ce serait trop petit... donc qu'il me faudrait un plus grand écran, comme par exemple un écran 7p comme j'ai pu le voir sur un autre projet (en lien ci-dessous).

Je veux donc faire un mix entre ces deux projets :
Ecran permanent pour station Netatmo
Station méteo sur TFT 7 "

J'ai donc commandé un écran 7p avec son shield.

J'ai donc maintenant tout le matériel adéquat :

Pour contrôler l'écran il faut utiliser la bibliothèque UTFT.
Pour les scripts PHP, j'utilise mon NAS Synology en tant que serveur web.

Avancement du projet :

  • :art: Scripts PHP de récupération des données Netatmo/Openweathermap : **OK **
  • :art: Connexion au wifi via l'ESP826 : **OK **
  • :art: Récupération des données depuis l'arduino : **OK **
  • :art: Test de l'écran 7p : En cours...

La librairie UTFT disponible dans les fichiers fourni sur le site (buydisplay) où j'ai commandé l'écran fonctionne correctement et semble être une vieille version de celle de rinkydinkelectronics.
Problème, lorsque j'utilise la dernière version de rinkydinkelectronics, certaines couleurs sont inversées. J'ai l'impression que les sous-pixels rouge et bleu sont inversés.
La couleur VGA_RED donne un écran bleu avec la commande myGLCD.fillScr ( VGA_RED );
La couleur VGA_BLUE donne un écran rouge avec la commande myGLCD.fillScr ( VGA_BLUE );
La couleur VGA_LIME donne un écran vert avec la commande myGLCD.fillScr ( VGA_LIME );

Voilà le code qui permet d'avoir ce qui est visible sur les vidéos, la seule chose qui change c'est la librairie UTFT :

// Fichier pour tester les fonctions d'affichage

#include <UTFT.h>
#include <UTFT_Geometry.h>


// Déclaration de l'écran LCD
UTFT myGLCD ( SSD1963_800, 38, 39, 40, 41 ); // (byte model, int RS, int WR, int CS, int RST, int SER)
UTFT_Geometry geo ( &myGLCD );
extern unsigned int DC[];
extern unsigned int DQ[];
extern unsigned int GC[];
extern unsigned int GD[];
extern unsigned int NL[];
extern unsigned int PC[];
extern unsigned int PL[];
extern unsigned int PQ[];


void setup() {
    // === INITIALISATOIN ===

    Serial.begin ( 115200 );
    Serial3.begin ( 115200 ); // baudrate par défaut de l'ESP8266

    Serial.println ( F ( "===== DÉBUT DU SETUP =====" ) );

    // On s'occupe de l'écran TFT
    Serial.println ( F ( "Allumage de l'écran LCD..." ) );
    myGLCD.InitLCD();
    pinMode ( 8, OUTPUT );  	//backlight
    digitalWrite ( 8, HIGH );	//on

    Serial.println ( F ( "Initialisation de l'écran LCD..." ) );



    // -- Fin Affichage Heure

    Serial.println ( F ( "===== FIN DU SETUP =====" ) );

}

void loop() {

    // pour le moment rien dedans
    myGLCD.clrScr();
    myGLCD.fillScr ( 0, 255, 255 );
    myGLCD.setFont ( Grotesk24x48 );
    myGLCD.setBackColor ( VGA_TRANSPARENT );
    myGLCD.setColor ( 0, 0, 0 );
    myGLCD.print ( "RGB = 0,255,255 ---- CYAN", CENTER, 40  );
    delay ( 2000 );

    myGLCD.fillScr ( VGA_FUCHSIA );
    myGLCD.setFont ( Grotesk24x48 );
    myGLCD.setColor ( 0, 0, 0 );
    myGLCD.print ( "VGA FUCHSIA", CENTER, 40  );
    delay ( 2000 );

    myGLCD.fillScr ( VGA_AQUA );
    myGLCD.setFont ( Grotesk24x48 );
    myGLCD.setColor ( 0, 0, 0 );
    myGLCD.print ( "VGA AQUA", CENTER, 40  );
    delay ( 2000 );

    myGLCD.fillScr ( VGA_YELLOW );
    myGLCD.setFont ( Grotesk24x48 );
    myGLCD.setColor ( 0, 0, 0 );
    myGLCD.print ( "VGA YELLOW", CENTER, 40  );
    delay ( 2000 );

    myGLCD.fillScr ( VGA_WHITE );
    myGLCD.setFont ( Grotesk24x48 );
    myGLCD.setColor ( 0, 0, 0 );
    myGLCD.print ( "VGA WHITE", CENTER, 40  );
    delay ( 2000 );

    myGLCD.fillScr ( VGA_BLACK );
    myGLCD.setFont ( Grotesk24x48 );
    myGLCD.setColor ( 255, 255, 255 );
    myGLCD.print ( "VGA BLACK", CENTER, 40  );
    delay ( 2000 );
}

Vidéo faite avec la vieille version de la librairie UTFT (celle du site d'achat de l'écran) : UTFT vieille version = pas de soucis - YouTube

Vidéo faite avec la dernière version de la librairie UTFT (celle du site rinkydinkelectronics) : UTFT dernière version = inversion sous-pixels rouge et bleu - YouTube

Du coup je vais devoir utiliser la version le UTFT qui fonctionne, mais comme vous l'avez-vu dans les vidéos, l'affichage est moins rapide qu'avec la dernière version. Ce ne sera vraisemblablement pas un problème, mais bon...
Si quelqu'un de super calé pouvait me dire pourquoi il y a ces inversions avec la dernière version... je lui en serais reconnaissant...

Du coup, au-delà de ce petit soucis de couleurs, je suis en train de voir comment découper en zone l'écran, et ce que je vais vouloir afficher comme valeurs... et peut-être faire un petit graphique d'évolution de la température, ou pour les prévisions dans les prochains jours...

Voilà voilà.
++ Miles

Tu est sur que ton ecran c'est un SSD1963_800? Si c'est le cas la librerie ne supporte pas bien ce type d'écran. Essaye avec "SSD1963_800ALT"

Oui, c'est bien un SSD1963_800.
J'ai essayé avec SSD1963_800ALT, c'est pire encore...

D'après une autre source d'information, l'écran serait en BGR au lieu de RGB...
Il faudrait que je tente ce qui m'a été proposé en modification de la librairie pour voir si ça change quelque chose.
Je reviendrais poster ici la modif si jamais elle s'avérait fonctionnelle ^^

Tu peux créer tes propre couleurs sans rien modifier.

J'y ai pensé, mais je ne maitrise pas la conversrion R,G,B, en valeur 0x0000... alors en faire en inversant les couleurs Bleue et Rouge :confused:

Je pense que c'est ça en tenant compte que toi tu a un BGR:
RGB565

Autre solution: dans UTFT.h tu a

#define VGA_BLACK 0x0000
#define VGA_WHITE 0xFFFF
#define VGA_RED 0xF800
#define VGA_GREEN 0x0400
#define VGA_BLUE 0x001F
#define VGA_SILVER 0xC618
#define VGA_GRAY 0x8410
#define VGA_MAROON 0x8000
#define VGA_YELLOW 0xFFE0
#define VGA_OLIVE 0x8400
#define VGA_LIME 0x07E0
#define VGA_AQUA 0x07FF
#define VGA_TEAL 0x0410
#define VGA_NAVY 0x0010
#define VGA_FUCHSIA 0xF81F
#define VGA_PURPLE 0x8010

met ça dans ton code et modifie les noms des couleurs pour qu'ils correspondent.

Salut,

A tu contacté le hotline du vendrut du LCD par mail en expliquant le problème, il sont assez réactif, tu exposes le problème avec les couleurs et il devrait te dire si il peuvent faire quelque chose pout toi.

@+

Tu as quoi comme ligne de commande pour declaration LCD, j'ai

UTFT myGLCD(SSD1963_800480, 38, 39, 40, 41)

Je vais voir si je peux te donner la bonne LIB.

@+