ESP32 Eltec OLED

Bonjour a tous,
je viens de recevoir mon esp32 avec écran oled intégré, j'ai essayé quelques circuit simple et tout fonctionne super bien.
Par contre j'ai un soucis avec l'écran, je n’arrive pas a afficher des simple message et sur les forum je trouve rien.
Avec les exemple ça fonctionne super bien mais je n'arrive pas à afficher des simples messages.
Pouvez-vous me dire comment afficher 3 ligne sur l'écran; avec par exemple un texte que j'écris et pour l'autre ligne une acquisition de température par exemple.
voila un exemple qu'il y a dans les bibliothèque.
Je vous remercie beaucoup je bloque vraiment, j'aurai bien aimer que ça soit aussi simple qu'un serial.print :slight_smile:

#include "Arduino.h"
#include "heltec.h"
#include "images.h"



#define DEMO_DURATION 3000
typedef void (*Demo)(void);

int demoMode = 0;
int counter = 1;

void setup() {
  Heltec.begin(true /*DisplayEnable Enable*/, false /*LoRa Disable*/, true /*Serial Enable*/);



  Heltec.display->flipScreenVertically();
  Heltec.display->setFont(ArialMT_Plain_10);

}

void drawFontFaceDemo() {
    // Font Demo1
    // create more fonts at http://oleddisplay.squix.ch/
    Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
    Heltec.display->setFont(ArialMT_Plain_10);
    Heltec.display->drawString(0, 0, "Hello world");
    Heltec.display->setFont(ArialMT_Plain_16);
    Heltec.display->drawString(0, 10, "Hello world");
    Heltec.display->setFont(ArialMT_Plain_24);
    Heltec.display->drawString(0, 26, "Hello world");
}

void drawTextFlowDemo() {
    Heltec.display->setFont(ArialMT_Plain_10);
    Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
    Heltec.display->drawStringMaxWidth(0, 0, 128,
      "Lorem ipsum\n dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore." );
}

void drawTextAlignmentDemo() {
    // Text alignment demo
  Heltec.display->setFont(ArialMT_Plain_10);

  // The coordinates define the left starting point of the text
  Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
  Heltec.display->drawString(0, 10, "Left aligned (0,10)");

  // The coordinates define the center of the text
  Heltec.display->setTextAlignment(TEXT_ALIGN_CENTER);
  Heltec.display->drawString(64, 22, "Center aligned (64,22)");

  // The coordinates define the right end of the text
  Heltec.display->setTextAlignment(TEXT_ALIGN_RIGHT);
  Heltec.display->drawString(128, 33, "Right aligned (128,33)");
}

void drawRectDemo() {
      // Draw a pixel at given position
    for (int i = 0; i < 10; i++) {
      Heltec.display->setPixel(i, i);
      Heltec.display->setPixel(10 - i, i);
    }
    Heltec.display->drawRect(12, 12, 20, 20);

    // Fill the rectangle
    Heltec.display->fillRect(14, 14, 17, 17);

    // Draw a line horizontally
    Heltec.display->drawHorizontalLine(0, 40, 20);

    // Draw a line horizontally
    Heltec.display->drawVerticalLine(40, 0, 20);
}

void drawCircleDemo() {
  for (int i=1; i < 8; i++) {
    Heltec.display->setColor(WHITE);
    Heltec.display->drawCircle(32, 32, i*3);
    if (i % 2 == 0) {
      Heltec.display->setColor(BLACK);
    }
    Heltec.display->fillCircle(96, 32, 32 - i* 3);
  }
}

void drawProgressBarDemo() {
  int progress = (counter / 5) % 100;
  // draw the progress bar
  Heltec.display->drawProgressBar(0, 32, 120, 10, progress);

  // draw the percentage as String
  Heltec.display->setTextAlignment(TEXT_ALIGN_CENTER);
  Heltec.display->drawString(64, 15, String(progress) + "%");
}

void drawImageDemo() {
    // see http://blog.squix.org/2015/05/esp8266-nodemcu-how-to-create-xbm.html
    // on how to create xbm files
    Heltec.display->drawXbm(34, 14, WiFi_Logo_width, WiFi_Logo_height, WiFi_Logo_bits);
}

Demo demos[] = {drawFontFaceDemo, drawTextFlowDemo, drawTextAlignmentDemo, drawRectDemo, drawCircleDemo, drawProgressBarDemo, drawImageDemo};
int demoLength = (sizeof(demos) / sizeof(Demo));
long timeSinceLastModeSwitch = 0;

void loop() {
  // clear the display
  Heltec.display->clear();
  // draw the current demo method
  demos[demoMode]();

  Heltec.display->setTextAlignment(TEXT_ALIGN_RIGHT);
  Heltec.display->drawString(10, 128, String(millis()));
  // write the buffer to the display
  Heltec.display->display();

  if (millis() - timeSinceLastModeSwitch > DEMO_DURATION) {
    demoMode = (demoMode + 1)  % demoLength;
    timeSinceLastModeSwitch = millis();
  }
  counter++;
  delay(10);
}

Au post n: 12 tu n'a pas encore compris que le code doit se mettre entre balises code :

Une lecture de ce fichier épinglé devient urgente :
https://forum.arduino.cc/index.php?topic=315372.0

Voila c'est modifié Désolé, c'est un bout de code que j'ai trouvé dans les exemple mais comme c'est un modèle assez récent je trouve pas grand-chose pour des exemples assez simple.
Si vous pouvez m'aider ça serait vraiment sympa.

Sous toutes réserves : non compilé, non testé , écrit vite fait en élaguant sérieusement l'exemple

drawString() suivi de display() est l'équivalent d'un print
dans drawString() on commence pas préciser les cordonnées du début de l'écriture
drawString() peut être précédé comme içi d'une consigne d'alignement.

#include "Arduino.h"
#include "heltec.h"

void setup() {
  Heltec.begin(true /*DisplayEnable Enable*/, false /*LoRa Disable*/, true /*Serial Enable*/);
  Heltec.display->flipScreenVertically();
  Heltec.display->setFont(ArialMT_Plain_10);
}

void loop() {

  Heltec.display->clear();
  Heltec.display->setTextAlignment(TEXT_ALIGN_RIGHT);
  Heltec.display->drawString(10, 128, String(millis()));
  Heltec.display->display();
  delay(1000);

  Heltec.display->clear();
  Heltec.display->setTextAlignment(TEXT_ALIGN_RIGHT);
  Heltec.display->drawString(10, 128, "Bonjour");
  Heltec.display->display();
  delay(1000);
}

ça devrait alterner à l'écran un nombre ( valeur de millis ) et le message bonjour

Merci d'avoir répondu c'est sympa, je viens d'essayer et ça fait comme avec un de mes code que j'avais fait, ça marque "OLED initial done" pendent 1 seconde et c'est tout :confused:
je bloque un peu, si c'est aussi compliqué pour une simple phrase je vais avoir du mal a afficher mes température.
quelqu'un d'autre connait ce module ?

Ce n'est pas le même module exactement, mais tu peux essayer ce que j'ai fait ici.

Prends simplement le setup et laisse la loop vide, et regarde si ça affiche quelque chose.

Il faut bien sûr installer la bibliothèque.

Heltec comme TTGO , à la manie de produire des cartes à tout va en changeant souvent les versions
Quelle est la référence exacte, le lien , correspondant à la carte en main ?
S'agit-il de cette version: WiFi Kit 32 (Phaseout) – Heltec Automation

remarque : dans le test que j'ai proposé , remplacer les valeurs 128 des deux drawString par 10, il se peut qu'avec 128 l'écriture se fasse...en dehors de l'acran

Oui c'est exactement le modèle là, demain je rentre tôt et j'essaye pour voir et je vous redit.
il y a tellement de référence et de façon de faire que ça devient assez compliqué quand on débute :confused:

Bonjour,

Je ne sais pas si tu as résolu ton problème mais j'ai la même chose en ce moment.

Déjà première chose tu as un "reboot" de ta carte si le message "OLED initial done" s'affiche et s'efface. Utilise Serial pour visualiser d'où vient ton problème qui fait planter ton programme.

Ensuite malgré la résolution de ce bug, j'avais encore un problème. Cela vient de l'ordre des pixels dans la méthode drawString. Il faut d'abord indiquer la colonne et ensuite la ligne. Sinon ça sort de l'écran et tu ne comprends pas pourquoi rien ne s'affiche sur l'écran.

#include "Arduino.h"
#include "heltec.h"

void setup() {
  Heltec.begin(true /*DisplayEnable Enable*/, false /*LoRa Disable*/, true /*Serial Enable*/);
  Heltec.display->flipScreenVertically();
  Heltec.display->setFont(ArialMT_Plain_10);
}

void loop() {

  Heltec.display->clear();
  Heltec.display->setTextAlignment(TEXT_ALIGN_RIGHT);
  Heltec.display->drawString(128, 0, String(millis()));
  Heltec.display->display();
  delay(1000);

  Heltec.display->clear();
  Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
  Heltec.display->drawString(0, 0, "Bonjour");
  Heltec.display->display();
  delay(1000);
}

Je l'ai essayé avec une Heltec Wifi kit 32 et une Heltec Wifi lora 32. Le programme fonctionne dans les deux cas.