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.

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
| Fabricant | Adafruit |
|---|---|
| Numéro de pièce | SSD1306 |
| Tension logique/E/S | 3.3 - 5 V |
| Tension d'alimentation | 3.3 - 5 V |
| Consommation actuelle | ~20 mA (typique) |
| Résolution d'affichage | 128 x 32 pixels |
| Interface | I2C |
| Dimensions | 128 x 32 mm |
| Notes / variantes | Disponible 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

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.

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
/*********************************************************************
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
-
AmazonAcheter OLED 128x32 sur Amazonamzn.to
-
AliExpressAchetez SSD1306 OLED 128x32 sur AliExpresss.click.aliexpress.com
Ressources et références
-
ExterneBibliothèque Adafruit-GFX (de GitHub)github.com
-
ExterneBibliothèque SSD1306 (de GitHub)github.com
Fichiers📁
Aucun fichier disponible.