Arduino-kode en video vir SSD1306 OLED 128 x 32-skerm met I2C
In hierdie tutoriaal gaan ons ondersoek hoe om die SSD1306 OLED 128 x 32-skerm met I2C-kommunikasie op 'n Arduino te gebruik. Die doel is om verskeie elemente soos teks, reghoeke en dinamiese waardes soos spanning en temperatuur op die skerm te vertoon. Hierdie opstelling is ideaal vir projekte wat 'n kompakte en doeltreffende vertoonoplossing vereis.

Ons sal deur die nodige hardeware-komponente, bedradingsinstruksies en die Arduino-kode stap om alles aan die gang te kry. Vir 'n visuele gids, maak seker dat jy die video wat hierdie tutoriaal vergesel, kyk (in video by 00:00).
Hardeware Verduidelik
Die sleutelkomponente vir hierdie projek sluit die SSD1306 OLED-skerm in, wat 'n lae-krag-skerm is wat I2C-kommunikasie gebruik vir maklike koppeling. Die skerm het 'n resolusie van 128 x 32 pixels, wat dit geskik maak vir die vertoon van teks en eenvoudige grafika.
Om die skerm te beheer, sal ons die Arduino-bord gebruik, wat opdragte en data via I2C sal stuur. Die Arduino hanteer die logika van die vertoon van inligting deur biblioteke soos Adafruit_GFX en Adafruit_SSD1306 te gebruik. Hierdie biblioteke vereenvoudig die kommunikasieproses en maak dit maklik om vorms en teks te teken.
Datablad Besonderhede
| Vervaardiger | Adafruit |
|---|---|
| Deelnommer | SSD1306 |
| Logika/IO-spanning | 3.3 - 5 V |
| Toevoerspanning | 3.3 - 5 V |
| Stroomverbruik | ~20 mA (tip.) |
| Vertoonresolusie | 128 x 32 pixels |
| Koppelvlak | I2C |
| Afmetings | 128 x 32 mm |
| Notas / variante | Beskikbaar in verskeie groottes en koppelvlakke |
- Kontroleer die I2C-adres, gewoonlik 0x3C vir OLED's.
- Verseker behoorlike kragtoevoer om skade te vermy.
- Gebruik optrekweerstande vir SDA- en SCL-lyne indien nodig.
- Hou bedrading kort om geraas in die I2C-sein te verminder.
- Oorweeg hitte-afvoer as jy veelvuldige modules van krag voorsien.
Bedradingsinstruksies

Om die SSD1306 OLED-skerm te bedraad, verbind eers die VCC-pen van die skerm aan die 5V-uitset op die Arduino. Verbind volgende die GND-pen aan een van die Arduino se grondpennetjies. Vir die I2C-kommunikasie, verbind die SDA-pen van die skerm aan die SDA-pen op die Arduino, wat A4 vir die UNO is. Verbind dan die SCL-pen van die skerm aan die SCL-pen op die Arduino, wat A5 vir die UNO is. As jy 'n ander Arduino-model gebruik, verwys na die spesifieke penkartering vir SDA en SCL.
Vir bykomende komponente, as jy 'n LED het wat jy wil beheer, verbind dit aan pen 9 deur 'n 330-ohm-weerstand. Maak seker dat jy die ander punt van die weerstand aan die anode van die LED verbind, terwyl die katode na grond moet gaan. Hierdie opstelling sal die LED laat brand wanneer pen 9 geaktiveer word.
Kode Voorbeelde & Deurloop
In die Arduino-kode begin ons deur die nodige biblioteke vir die OLED-skerm in te sluit. 'n Sleutelidentifiseerder is display, wat 'n instansie van die Adafruit_SSD1306-klas is. Die skerm word in die setup()-funksie geïnisialiseer, waar ons ook die skerm skoonmaak om vir teken voor te berei.

void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
display.clearDisplay();
}
In die loop()-funksie definieer ons 'n stringveranderlike vString om die spanningswaarde te hou, wat dinamies bygewerk word. Die robojaxText()-funksie word gebruik om teks op die skerm by gespesifiseerde koördinate te vertoon.
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);
}
Die robojaxText()-funksie is noodsaaklik vir die posisionering en vertoon van teks. Dit neem parameters vir die teksstring, x- en y-koördinate, teksgrootte en 'n booleaan om te bepaal of die skerm onmiddellik bygewerk moet word.
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();
}
}
Hierdie funksie stel die teksgrootte, kleur en wyserposisie voordat die teks gedruk word. Onthou om die video te kyk vir 'n volledige deurloop van die kode (in video by 10:00).
Demonstrasie / Wat om te Verwags
Wanneer die kode na die Arduino opgelaai word, moet die OLED-skerm die spanning, temperatuur en kapasiteitswaardes dinamies elke twee sekondes wys. Jy moet ook 'n reghoek rondom die teks-elemente sien. As die skerm niks wys nie, maak seker dat die verbindings korrek is en dat die I2C-adres ooreenstem met die een wat in die kode gespesifiseer is.
Video Tydstempels
- 00:00 - Inleiding tot die projek
- 02:00 - Bedradingsinstruksies
- 05:00 - Kode deurloop
- 10:00 - Demonstrasie van die uitset
/*********************************************************************
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);
}
Goedere wat jy dalk nodig het
-
AmazonPurchase OLED 128x32 from Amazonamzn.to
-
AliExpressPurchase SSD1306 OLED 128x32 from AliExpresss.click.aliexpress.com
Hulpbronne en verwysings
-
BuitenburgAdafruit-GFX library (from GitHub)github.com
-
BuitenburgSSD1306 library (from GitHub)github.com
Lêers📁
Datasheet (pdf)
-
SSD1306 display datasheetSSD1306 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.pdf1.79 MB
Fritzing-lêer
-
SSD1306 128x32 OLED WiringFritzing 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 WiringFritzing 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