Utilisation d'écran OLED adafruit

Bonjour à tous !

Je souhaite intégrer un petit écran OLED de chez Adafruit en remplacement d'un écran LCD, dans un petit projet utilisant actuellement un arduino UNO R3 .

Voici le lien vers la page de l'écran OLED que j'ai en ma possession :

J'ai choisi de le câbler en SPI, j'ai installé les 2 librairies requisses ( Adafruit_SSD1306 et Adafruit_GFX )
suivant les instructions disponibles ici :

Jusque là, pas de problème, j'arrive sans difficulté à faire tourner le programme d'exemple ssd1306_128x64_spi contenu dans la librairie Adafruit_SSD1306.

Lorsque je souhaite aller plus loin et faire mon propre programme très basique (afficher "bonjour" puis "aurevoir") voici les problèmes que je rencontre :

1- au démarrage, il y a le logo adafruit qui reste affiché quelques secondes ( Splashscreen), et je souhaiterais l'éviter.

2- le simple fait de faire afficher ces 2 mots constitue un programme si lourd que l'IDE m'indique qu'il occupe "33% de l'espace de stockage de programme", et "Les variables globales utilisent 1 540 octets (75%) de mémoire dynamique, ce qui laisse 508 octets pour les variables locales."

Je me demande donc si je m'y prends correctement ou si j'utilise mal les librairies.

Plus tard je souhaiterais remplacer l'arduino UNO R3 par un Nano, mais sachant que ce dernier à des caractéristiques de mémoire (Flash, SRAM, EEPROM) divisées par 2 par rapport à la UNO je m'inquiète du point N° 2...

Voici le programme très basique évoqué + haut :

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC);
}

void loop() {
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Bonjour");
display.display();
delay(3000);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Aurevoir");
display.display();
delay(3000);
display.clearDisplay();

}

Voilà, explication un peu longue, pour au final vous demander si je suis complétement à coté de la plaque, si l'appel de la libraire Adafruit_GFX est impératif, ou si les points évoqués plus haut sont normaux...

Merci d'avance pour votre aide...

Le logo est affiché automatiquement lorsque l'on fait display.begin(). En effet le logo est dans la définition du tampon d'image qui contient l'état de l'écran.
Ce buffer est défini au tout début de Adafruit_SSD1306.cpp

static uint8_t buffer[SSD1306_LCDHEIGHT * SSD1306_LCDWIDTH / 8] = {

Il suffit de remplir ce tableau avec des 0 ce qui remplira l'écran en noir à l'initialisation.

Le programme est lourd parce que la librairie est assez volumineuse. Il n'y a malheureusement rien à faire sauf à alléger la librairie des fonctions que tu n'utiliseras pas.

Pour la RAM c'et le même problème. La librairie définit en mémoire un buffer d'image qui contient une copie de l'état de tous les points de l'écran. Pour un afficheur 128 x 64, la mémoire occupée est égale à 128 x 64 / 8 soit 1024 octets soit la moitié de la mémoire d'un ATmega 328.

Merci pour la réponse !

Donc plusieurs possibilités s'offrent à moi :

1- je me contente de la situation
2- J’allège la librairie Adafruit_SSD1306.cpp
3- je trouve une autre librairie plus basique en substitution à celle-ci

Bon ben je vais continuer à me gratter la tête !

Autre interrogation du coup :

Qu'elles sont les rôles des bibliothèques Adafruit_SSD1306 et Adafruit_GFX ?

Je crois comprendre que la première sert à communiquer avec l'écran et le seconde à "coder" les fonction telles que dessiner un cercle ou autre, mais ça manque de clarté...

Merci encore.

La librairie Adafruit_GFX est une librairie générique de fonctions de haut niveau. Elle est utilisée pour tous les afficheurs distribués par Adafruit.

On lui associe une librairie bas niveau spécifique à un type d'afficheur particulier Adafruit_SSD1306 dans le cas de ton afficheur.

Il y a peut être d'autres librairies pour ce type d'afficheur. Je n'en ai pas vu (mais je n'ai pas beaucoup cherché non plus). Une chose est sûre les librairies Adafruit sont généralement bien ficelées et sans mauvaise surprise.

Après, il faut faire en fonction de ton besoin final.
taille du code que tu vas ajouter
nombre de variables nécessaires

Peut être que ça passerait comme ça sans reprendre la librairie.

Bien ! Merci pour les infos !

C'est partit pour une bonne soirée à se gratter la tête !

Tu peux essayer la librairie u8glib pour voir si elle est moins gourmande en mémoire....