oled I2C prb

Bonjour
Je vous demande de l'aide car j'ai une ecran oled mais je n'arrive pas a l'utilser
donc si vous pouvez m'aider j'en serai ravis

Un peu maigre comme info pour t'aider tu ne crois pas?

Oui peut-être donc pour être complet je veux récupéré la temperature de ma piscine avec un ds18b20 et l'afficher sur un ecran oled I2C 128x64 et j'ai mis un shield ethernet pour mettre la temperature sur un site web mais j'ai beaucoups tester mais je n'arrive pas a faire fonctionner l'ecran oled

encore un effort ....pour être complet !!

la Regle du forum qu'il est important de suivre précise l'ensemble des informations à fournir impérativement

cela évite à tous de perdre du temps à 'tirer les vers du nez'

-référence de l'écran utilisé ?
-détails du montage effectué ?
-librairies utilisées ?
-programme utilisé pour tester l'écran ?
-quels sont les eventuels messages d'erreurs ?
-etc......

Avec le flou actuel de la demande la liste des causes probables de non fonctionnement est longue !!

A lire

Donc je reprends

écran https://www.banggood.com/1_3-Inch-4Pin-White-OLED-LCD-Display-12864-IIC-I2C-Interface-Module-For-Arduino-p-1067874.html?rmmds=myorder&cur_warehouse=UK

sonde Ds18b20 waterproof digital temperature temp sensor probe 1m 2m 3m 5m 10m 15m Sale - Banggood.com

shield https://www.banggood.com/Ethernet-Shield-Module-W5100-Micro-SD-Card-Slot-For-Arduino-UNO-MEGA-p-908461.html?rmmds=myorder&cur_warehouse=CN

sonde avec une résistance qui fonctione le shield voici mon code

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SoftwareSerial.h>
#include <Wire.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };   //physical mac address
byte ip[] = { 192, 168, 0, 86 };                      // ip in lan (that's what you need to use in your browser. ("192.168.1.178")
byte gateway[] = { 192, 168, 1, 1 };                   // internet access via router
byte subnet[] = { 255, 255, 255, 0 };                  //subnet mask
EthernetServer server(80);                             //server port     
String readString;

 
#define pin_ds 5//Pin jaune de la sonde

//Création d'une instance oneWire pour communiquer avec la sonde
OneWire oneWire(pin_ds);
 
//On passe cette instance dans dallas
DallasTemperature sensor(&oneWire);
 
float temp_water = 0.0;

void setup() {
  /*SerialB.begin(38400);
  sensor.begin();*/
  
  Serial.begin(115200);

  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());

  sensor.requestTemperatures();
  temp_water = sensor.getTempCByIndex(0);

  
}

void loop() {


//Gestion Web
EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {   
      if (client.available()) {
        char c = client.read();
     
        //read char by char HTTP request
        if (readString.length() < 100) {
          //store characters to string
          readString += c;
          //Serial.print(c);
         }

         //if HTTP request has ended
         if (c == '\n') { 
            sensor.requestTemperatures();
            temp_water = sensor.getTempCByIndex(0);  
            Serial.println(temp_water);       
           Serial.println(readString); //print to serial monitor for debuging
     
           client.println("HTTP/1.1 200 OK"); //send new page
           client.println("Content-Type: text/html");
           client.println();     
           client.println("<HTML>");
           client.println("<HEAD>");
           client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
           client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
//           client.println("<meta http-equiv="refresh" content="20">");
           client.println("<link rel='stylesheet' type='text/css' href='https://randomnerdtutorials.com/ethernetcss.css' />");
           client.println("<TITLE>Temp Pool</TITLE>");
           client.println("</HEAD>");
           client.println("<BODY>");

           client.println(temp_water);
           client.print("C");
           client.println("</BODY>");
           client.println("</HTML>");
     
           delay(1);
           //stopping client
           client.stop();
           //controls the Arduino if you press the buttons
           
           
           
            //clearing string for next read
            readString="";  



         }
       }
    }
  }
}

le code que j’ai tester

#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("Appareil I2C trouve a cette adresse 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Erreur inconnue a cette address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("Aucun appareil I2C trouve\n");
  else
    Serial.println("Fin\n");
 
  delay(5000);           // wait 5 seconds for next scan
}

l’écran et sur le A5 et A4

le code que j’ai tester viens de ceux site Test d’un écran OLED 128×64 I²C – OuiLogique.com

Prendre morceaux par morceaux
Tester l'écran seul , sans shield Ethernet,sans DS18B20

Un code scanner I2C a été lançé
Trouve-t-il l'écran ?
Si oui à quelle adresse ?

Exemple de tutoriel

OUI il le trouve voici :
Scanning...
Appareil I2C trouve a cette adresse 0x3C !
Fin

adresse trouvée ? OK
Bien vérifier que cette valeur figure dans le display.begin()

Exemple de tutoriel

installation des librairies (Adafruit OU Sparkfun, au choix) , paramétrage, code de test....

Merci a toi
j'ai déjà utiliser le site et les code mais rien a faire l'ecran est toujour noir j'ai brancher correctement comme indique dans l'image mais rien a faire je ne comprends pas ?

Il manque le code ou tu essaye de faire marcher l'écran. Sans ça difficile de t'aider.

#include <Wire.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display( OLED_RESET );

#if( SSD1306_LCDHEIGHT != 64 )
#error( "Height incorrect, please fix Adafruit_SSD1306.h!" );
#endif

void setup()
{
  // Initialise la communication I²C à l’adresse 0x3C.
  display.begin( SSD1306_SWITCHCAPVCC, 0x3C );
  display.clearDisplay();

  // Affiche des textes
  afficheTextes();
}

void loop()
{

}

void afficheTextes( void )
{
  display.setTextSize( 2 );
  display.setTextColor( WHITE );
  display.clearDisplay();

  display.setCursor( 4, 0 );
  display.println( "ouilogique" );

  display.setCursor( 4, 16 );
  display.println( "ouilogique" );

  display.setTextSize( 1 );

  display.setCursor( 35, 32 );
  display.println( "ouilogique" );

  display.setCursor( 35, 40 );
  display.println( "ouilogique" );

  display.setCursor( 35, 48 );
  display.println( "ouilogique" );

  cadreEcran();
  display.display();
}

void cadreEcran( void )
{
  display.drawRect( 0, 0, display.width()-2, display.height()-2, WHITE );
}

Voila le code utiliser :slight_smile:

Curieux, il manque la librairie GFX et ça compile?

Euh oui j’ai essaye avec le gfx rien et j’ai vu un ancien poste qui traiter du même problème et toujours rien donc je ne comprends pas

Je ne vois pas d'erreurs!!

Essaye au lieu de ça ( c'est un constructeur "DEPRECATED")

Adafruit_SSD1306 display( OLED_RESET );

Mettre ça

Adafruit_SSD1306 display(128, 64);

Autant carrément reprendre le début de code de l’exemple donné avec la bibliothèque :

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Le plus simple : commencer par essayer l'exemple ssd1306_128x64_i2c.ino

Si cela peut aider : un projet utilisant un OLED I2C 0.96

Le code.

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

// setup :
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

Avec cet écran : aliexpress.com

Bonjour hbachetti,

Pourquoi "#define OLED_RESET 4" alors que la carte n'a pas de pin reset?

Simplement repris de l'exemple. Cela ne sert à rien en effet.

L'idéal serait : Adafruit_SSD1306 display(-1); pour que la méthode begin() ignore cette broche.