Code de recherche

Code Arduino et vidéo pour écran OLED SSD1306 128 x 32 avec I2C

Code Arduino et vidéo pour écran OLED SSD1306 128 x 32 avec I2C

Dans ce tutoriel, nous allons explorer comment utiliser l'écran OLED SSD1306 128 x 32 avec communication I2C sur un Arduino. L'objectif est d'afficher divers éléments tels que du texte, des rectangles et des valeurs dynamiques comme la tension et la température sur l'écran. Cette configuration est idéale pour des projets nécessitant une solution d'affichage compacte et efficace.

SSD1306 OLED 128x32

Nous passerons en revue les composants matériels nécessaires, les instructions de câblage et le code Arduino pour tout mettre en marche. Pour un guide visuel, veillez à consulter la vidéo accompagnant ce tutoriel (dans la vidéo à 00:00).

Matériel expliqué

Les composants clés de ce projet comprennent l'écran OLED SSD1306, un écran à faible consommation qui utilise la communication I2C pour un interfaçage facile. L'écran offre une résolution de 128 x 32 pixels, ce qui le rend adapté à l'affichage de texte et de graphiques simples.

Pour contrôler l'affichage, nous utiliserons la carte Arduino, qui enverra des commandes et des données via I2C. L'Arduino gère la logique d'affichage des informations en utilisant des bibliothèques telles queAdafruit_GFXetAdafruit_SSD1306. Ces bibliothèques simplifient le processus de communication et permettent de dessiner facilement des formes et du texte.

Détails de la fiche technique

FabricantAdafruit
Numéro de pièceSSD1306
Tension logique/E/S3.3 - 5 V
Tension d'alimentation3.3 - 5 V
Consommation actuelle~20 mA (typique)
Résolution d'affichage128 x 32 pixels
InterfaceI2C
Dimensions128 x 32 mm
Notes / variantesDisponible en plusieurs tailles et interfaces
  • Vérifiez l'adresse I2C, généralement 0x3C pour les écrans OLED.
  • Assurez-vous que l'alimentation est adéquate pour éviter tout dommage.
  • Utilisez des résistances pull-up pour les lignes SDA et SCL si nécessaire.
  • Gardez le câblage court pour réduire le bruit sur le signal I2C.
  • Prenez en compte la dissipation thermique si vous alimentez plusieurs modules.

Instructions de câblage

Arduino wiring for SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32

Pour câbler l'écran OLED SSD1306, connectez d'abord la broche VCC de l'écran à la sortie 5V de l'Arduino. Ensuite, connectez la broche GND à l'une des broches de masse de l'Arduino. Pour la communication I2C, reliez la broche SDA de l'écran à la broche SDA de l'Arduino, qui est A4 pour l'UNO. Puis, reliez la broche SCL de l'écran à la broche SCL de l'Arduino, qui est A5 pour l'UNO. Si vous utilisez un autre modèle d'Arduino, consultez la correspondance des broches spécifique pour SDA et SCL.

Pour des composants supplémentaires, si vous avez une LED que vous souhaitez contrôler, connectez-la à la broche 9 via une résistance de 330 ohms. Assurez-vous de connecter l'autre extrémité de la résistance à l'anode de la LED, tandis que la cathode doit être reliée à la masse. Ce montage permettra à la LED de s'allumer lorsque la broche 9 est activée.

Exemples de code et tutoriel pas à pas

Dans le code Arduino, nous commençons par inclure les bibliothèques nécessaires pour l'affichage OLED. Un identifiant clé estdisplay, qui est une instance deAdafruit_SSD1306classe. L'affichage est initialisé dans lesetup()fonction, où nous effaçons également l'affichage pour préparer le dessin.

SSD1306 OLED 128x32
void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(2000);
  display.clearDisplay(); 
}

Dans leloop()fonction, nous définissons une variable de type chaînevStringpour contenir la valeur de la tension, qui est mise à jour dynamiquement. LerobojaxText()La fonction est utilisée pour afficher du texte à l'écran aux coordonnées spécifiées.

void loop() {
  String vString = String(count, 3);
  display.clearDisplay();
  robojaxText("Voltage:          ", 4, 3, 1, false);
  robojaxText(vString, 72, 3, 1, false);
  display.display();
  count += 0.173;
  delay(2000); 
}

LerobojaxText()Cette fonction est cruciale pour le positionnement et l'affichage du texte. Elle prend des paramètres pour la chaîne de texte, les coordonnées x et y, la taille du texte et un booléen pour déterminer si l'affichage doit être mis à jour immédiatement.

void robojaxText(String text, int x, int y, int size, boolean d) {
  display.setTextSize(size);
  display.setTextColor(WHITE);
  display.setCursor(x, y);
  display.println(text);
  if(d) {
    display.display();
  }
}

Cette fonction définit la taille du texte, la couleur et la position du curseur avant d'afficher le texte. N'oubliez pas de regarder la vidéo pour une explication complète du code (dans la vidéo à 10:00).

Démonstration / À quoi s'attendre

Lorsque le code est téléversé sur l'Arduino, l'affichage OLED devrait afficher les valeurs de tension, de température et de capacité se mettant à jour dynamiquement toutes les deux secondes. Vous devriez également voir un rectangle tracé autour des éléments de texte. Si l'affichage ne montre rien, assurez-vous que les connexions sont correctes et que l'adresse I2C correspond à celle spécifiée dans le code.

Horodatages vidéo

  • 00:00- Introduction au projet
  • 02:00- Instructions de câblage
  • 05:00- Revue du code
  • 10:00- Démonstration de la sortie

Images

SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32
Arduino wiring for SSD1306 OLED 128x32
83-Arduino code and video for SSD1306 OLED 128 x 32 display with I2C
Langue: C++
/*********************************************************************
This is an example for our monochrome OLEDs based on SSD1306 drivers.

This example is for a 128x32 size display using I2C.

If you get the error: Adafruit_GFX.h not found, download the Adafruit-GFX Library
https://github.com/adafruit/Adafruit-GFX-Library


Purchase this OLED module from Amazon: https://amzn.to/36zFvTb

Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information.
All text above, and the splash screen must be included in any redistribution.

 * Watch the video for this code to learn it fully.
  * Watch the video here: https://youtu.be/RjyulqVsz2o
 * This code is offered "as is" without any warranty.
 * Updated by Ahmad Shamshiri for Robojax.com video tutorial
 * on March 18, 2018 at 10:21 in Ajax, Ontario, Canada.
 * Please view other Robojax codes and videos at http://robojax.com/learn/arduino
 * If you are sharing this code, you must keep this copyright note.
 * 
*********************************************************************/

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

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
double count=0;

/*
 * PIN connection:
 * Pin connection see: https://www.arduino.cc/en/Reference/Wire
 * for UNO: SDA to A4, SCL to A5
 * for Mega2560: SDA to 20, SCL to 21
 * for Leonardo: SDA to 2, SCL to 3
 * for Due: SDA to 20, SCL to 21
 * VCC to 5V
 * GND to GND :-)
 */


// this is the Width and Height of Display which is 128 x 32
#define LOGO16_GLCD_HEIGHT 32
#define LOGO16_GLCD_WIDTH  128 


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

void setup()   {                
  Serial.begin(9600);

  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)
  display.display();
  delay(2000);
   // Clear the buffer.
  display.clearDisplay(); 
}


void loop() {
  String vString =  String(count, 3);// using a float and the 
  display.clearDisplay();
  robojaxText("Voltage:          ", 4, 3, 1, false);
  robojaxText(vString, 72, 3, 1, false);
  robojaxText("V", 110, 3, 1, false);
  robojaxText("Temperature: 32C", 4, 11, 1, false);
  robojaxText("Capacity:   92.86L", 4, 21, 1, false);
  //display.drawLine(1, 37, 100, 37, WHITE);
 display.drawRect(1, 1, 126,31, WHITE);
  //display.drawCircle(63,31, 31, WHITE);
   //display.startscrollright(0x00, 0x0F);
  display.display();
  count +=0.173;
   delay(2000); 
}


/*
 * robojaxText(String text, int x, int y,int size, boolean d)
 * text is the text string to be printed
 * x is the integer x position of text
 * y is the integer y position of text
 * size is the text size, 1, 2, 3 etc
 * d is either true or false.  If true, the display is updated.
 */
void robojaxText(String text, int x, int y,int size, boolean d) {

  display.setTextSize(size);
  display.setTextColor(WHITE);
  display.setCursor(x,y);
  display.println(text);
  if(d){
    display.display();
  }
  
  //delay(100);
}

Ce dont vous pourriez avoir besoin

Ressources et références

Fichiers📁

Aucun fichier disponible.