Luka Code

Code ya Arduino mpe Video mpo na SSD1306 OLED 128 x 32 Display na I2C

Code ya Arduino mpe Video mpo na SSD1306 OLED 128 x 32 Display na I2C

Na boyekoli oyo, tokotalela ndenge ya kosalela SSD1306 OLED 128 x 32 display na I2C communication na Arduino. Ntina ezali ete tomonisa biloko ndenge na ndenge lokola maloba, rectangles, mpe valeurs dynamiques lokola voltage mpe température na écran. Configuration oyo ezali malamu mpo na ba projets oyo esengeli display moke mpe efficace.

SSD1306 OLED 128x32

Tokotambola na ba composants hardware oyo esengeli, ba instructions ya câblage, mpe code ya Arduino mpo na kosala ete nyonso esala. Mpo na guide visuel, tala vidéo oyo ezali elongo na tutoriel oyo (na vidéo na 00:00).

Hardware Explication

Ba composants ya liboso mpo na projet oyo ezali SSD1306 OLED display, oyo ezali display ya faible consommation ya courant oyo esalelaka I2C communication mpo na connexion pete. Display oyo ezali na résolution ya 128 x 32 pixels, oyo esengeli mpo na komonisa maloba mpe graphiques ya pete.

Mpo na kokamba display, tokosalela Arduino board, oyo ekotinda ba commandes mpe données na nzela ya I2C. Arduino esalaka logique ya komonisa information na kosalela ba bibliothèques lokola Adafruit_GFX mpe Adafruit_SSD1306. Ba bibliothèques oyo bapɛtolaka processus ya communication mpe bapesaka possibilité ya kotya ba formes mpe maloba na pete.

Détails ya Datasheet

FabricantAdafruit
Numéro ya pièceSSD1306
Tension ya logique/IO3.3 - 5 V
Tension ya alimentation3.3 - 5 V
Consommation ya courant~20 mA (typ.)
Résolution ya display128 x 32 pixels
InterfaceI2C
Dimensions128 x 32 mm
Notes / variantesEzali na ba tailles mpe interfaces ndenge na ndenge
  • Tala adresse ya I2C, mingi mpe ezali 0x3C mpo na ba OLED.
  • Kokamba ete alimentation ezala malamu mpo na koboya kobebisa.
  • Salela ba résistances ya pull-up mpo na ba lignes SDA mpe SCL soki esengeli.
  • Kokamba ete ba fils bazala mokuse mpo na kokitisa bruit na signal ya I2C.
  • Bokanisa na dispersion ya chaleur soki ozali na ba modules ebele.

Instructions ya Câblage

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

Mpo na kokɔta na SSD1306 OLED display, yamba kokɔta na pin ya VCC ya display na sortie ya 5V na Arduino. Sima, kokɔta na pin ya GND na moko ya ba pins ya terre ya Arduino. Mpo na communication ya I2C, kokɔta na pin ya SDA ya display na pin ya SDA na Arduino, oyo ezali A4 mpo na UNO. Bongo, kokɔta na pin ya SCL ya display na pin ya SCL na Arduino, oyo ezali A5 mpo na UNO. Soki ozali kosalela modèle mosusu ya Arduino, tala na carte ya pins ya SDA mpe SCL.

Mpo na ba composants ya kobakisa, soki ozali na LED oyo olingi kokamba, kokɔta yango na pin 9 na nzela ya résistance ya 330 ohms. Kokamba ete esuká mosusu ya résistance ekɔta na anode ya LED, mpe cathode esengeli kokɔta na terre. Configuration oyo ekopesa possibilité ete LED epelaka tango pin 9 ezali activé.

Ba Exemples ya Code & Explication

Na code ya Arduino, tobandi na kosalela ba bibliothèques oyo esengeli mpo na OLED display. Identifiant ya liboso ezali display, oyo ezali instance ya classe Adafruit_SSD1306. Display ebandisami na fonction setup(), epai tokombo mpe tokolongola display mpo na komibongisa mpo na kotya biloko.

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

Na fonction loop(), totindaka variable ya string vString mpo na kosimba valeur ya voltage, oyo ebongwanaka dynamiquement. Fonction robojaxText() esalelamaka mpo na komonisa maloba na écran na ba coordonnées oyo topesaki.

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); 
}

Fonction robojaxText() ezali ya ntina mingi mpo na kotya mpe komonisa maloba. Ezali kozwa paramètres mpo na texte, ba coordonnées x mpe y, taille ya texte, mpe booléen mpo na koyeba soki display esengeli kobongwama mbala moko.

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();
  }
}

Fonction oyo etyaka taille ya texte, couleur, mpe position ya curseur liboso ya koprinta texte. Kobosana te kotala vidéo mpo na explication ya mobimba ya code (na vidéo na 10:00).

Démonstration / Nini Okoki Kozela

Tango code ekotiamaki na Arduino, OLED display esengeli komonisa voltage, température, mpe capacité dynamiquement kobongwama na tango nyonso ya secondes mibale. Okoki mpe komona rectangle oyo ezipami na zingazinga ya ba éléments ya maloba. Soki display emonisi eloko te, kamba ete ba connexions ezali malamu mpe adresse ya I2C ekokani na oyo ekomami na code.

Ba Timestamps ya Vidéo

  • 00:00 - Introduction na projet
  • 02:00 - Instructions ya câblage
  • 05:00 - Explication ya code
  • 10:00 - Démonstration ya résultat

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);
}

Nko o na nki.

Mokili na bisika

Fichiers📁

Fiche technique (pdf)

  • SSD1306 display datasheet
    SSD1306 is a single-chip CMOS OLED/PLED driver with controller for organic / polymer light emitting diode dot-matrix graphic display system. It consists of 128 segments and 64commons. This IC is designed for Common Cathode type OLED panel. The SSD1306 embeds with contrast control, display RAM and oscillator, which reduces the number of external components and power consumption. It has 256-step brightness control. Data/Commands are sent from general MCU through the hardware selectable 6800/8000 series compatible Parallel Interface, I2C interface or Serial Peripheral Interface. It is suitable for many compact portable applications, such as mobile phone sub-display, MP3 player and calculator, etc.
    SSD1306_display_datasheet.pdf 1.79 MB

Fritzing File

  • SSD1306 128x32 OLED Wiring
    Fritzing wiring diagram for an SSD1306 128x32 OLED display, showing connections to a microcontroller (likely Arduino). Useful for breadboard prototyping and verifying I2C or SPI wiring.
    SSD1306_128x32_wiring.fzz

Wiring diagram

  • SSD1306 128x32 OLED Wiring
    Fritzing wiring diagram for an SSD1306 128x32 OLED display, showing connections to a microcontroller (likely Arduino). Useful for breadboard prototyping and verifying I2C or SPI wiring.
    SSD1306_128x32_wiring.fzz