Bincika Lambar

Lambar Arduino da Bidiyo don Nuni na SSD1306 OLED 128 x 32 tare da I2C

Lambar Arduino da Bidiyo don Nuni na SSD1306 OLED 128 x 32 tare da I2C

A cikin wannan koyawa, za mu bincika yadda ake amfani da nunin SSD1306 OLED 128 x 32 tare da sadarwar I2C akan Arduino. Manufar ita ce nuna abubuwa daban-daban kamar rubutu, rectangles, da ƙimomi masu canzawa kamar voltage da zazzabi akan allo. Wannan saitin ya dace da ayyukan da ke buƙatar ƙaramin nuni mai inganci.

SSD1306 OLED 128x32

Za mu bi ta hanyar abubuwan kayan aiki da ake buƙata, umarnin wayoyi, da lambar Arduino don samun komai yana aiki. Don jagorar gani, tabbatar da duba bidiyon da ke tare da wannan koyawa (a cikin bidiyo a 00:00).

Bayanin Kayan Aiki

Abubuwan da suka fi muhimmanci don wannan aikin sun haɗa da nunin SSD1306 OLED, wanda shine nuni mai ƙarancin wutar lantarki wanda ke amfani da sadarwar I2C don sauƙin haɗi. Nunin yana da ƙudurin 128 x 32 pixels, wanda ya dace da nuna rubutu da zane-zane masu sauƙi.

Don sarrafa nunin, za mu yi amfani da Arduino board, wanda zai aika umarni da bayanai ta hanyar I2C. Arduino yana sarrafa dabaru na nuna bayanai ta amfani da libraries kamar Adafruit_GFX da Adafruit_SSD1306. Waɗannan libraries suna sauƙaƙe tsarin sadarwa kuma suna ba da damar zana siffofi da rubutu cikin sauƙi.

Cikakkun Bayanai na Datasheet

ManufacturerAdafruit
Part numberSSD1306
Logic/IO voltage3.3 - 5 V
Supply voltage3.3 - 5 V
Current consumption~20 mA (typ.)
Display resolution128 x 32 pixels
InterfaceI2C
Dimensions128 x 32 mm
Notes / variantsAvailable in various sizes and interfaces
  • Duba adireshin I2C, yawanci 0x3C don OLEDs.
  • Tabbatar da samar da wutar lantarki mai kyau don guje wa lalacewa.
  • Yi amfani da pull-up resistors don layukan SDA da SCL idan an buƙata.
  • Ka sa wayoyi su kasance gajere don rage hayaniya a cikin siginar I2C.
  • Yi la'akari da zubar da zafi idan kuna kunna modules da yawa.

Umarnin Wayoyi

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

Don haɗa nunin SSD1306 OLED, da farko haɗa fil ɗin VCC na nunin zuwa fitarwar 5V akan Arduino. Na gaba, haɗa fil ɗin GND zuwa ɗaya daga cikin fil ɗin ƙasa na Arduino. Don sadarwar I2C, haɗa fil ɗin SDA na nunin zuwa fil ɗin SDA akan Arduino, wanda shine A4 don UNO. Sannan, haɗa fil ɗin SCL na nunin zuwa fil ɗin SCL akan Arduino, wanda shine A5 don UNO. Idan kuna amfani da wani nau'in Arduino daban, koma zuwa takamaiman taswirar fil don SDA da SCL.

Don ƙarin abubuwa, idan kuna da LED da kuke son sarrafawa, haɗa shi zuwa fil 9 ta hanyar resistor na 330-ohm. Tabbatar da haɗa ɗayan ƙarshen resistor zuwa anode na LED, yayin da cathode ya kamata ya tafi ƙasa. Wannan saitin zai ba da damar LED ya haskaka lokacin da fil 9 ya kunna.

Misalan Lamba & Bayani

A cikin lambar Arduino, muna farawa ta haɗa da libraries da ake buƙata don nunin OLED. Wani muhimmin mai ganowa shine display, wanda shine misali na ajin Adafruit_SSD1306. An fara nunin a cikin aikin setup(), inda kuma muke share nunin don shirya zane.

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

A cikin aikin loop(), muna ayyana maɓallin rubutu vString don riƙe ƙimar voltage, wanda ke canzawa koyaushe. Ana amfani da aikin robojaxText() don nuna rubutu akan allo a takamaiman coordinates.

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

Aikin robojaxText() yana da muhimmanci don sanya wuri da nuna rubutu. Yana ɗaukar sigogi don rubutun, x da y coordinates, girman rubutu, da boolean don tantance ko ya kamata a sabunta nunin nan da nan.

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

Wannan aikin yana saita girman rubutu, launi, da wurin cursor kafin buga rubutun. Ka tuna ka kalli bidiyon don cikakken bayani na lambar (a cikin bidiyo a 10:00).

Nuni / Abin da za Ka Yi Tsammani

Lokacin da aka ɗora lambar zuwa Arduino, nunin OLED ya kamata ya nuna voltage, zazzabi, da ƙimar capacity suna canzawa kowane daƙiƙa biyu. Ya kamata kuma ka ga rectangle da aka zana kewaye da abubuwan rubutu. Idan nunin bai nuna komai ba, tabbatar da cewa haɗin suna daidai kuma adireshin I2C ya dace da wanda aka ayyana a cikin lambar.

Lokutan Bidiyo

  • 00:00 - Gabatarwa ga aikin
  • 02:00 - Umarnin wayoyi
  • 05:00 - Bayanin lamba
  • 10:00 - Nuni na sakamako

Hotuna

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

Abin da zaka iya bukata

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Takardar bayanai (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

Fayil Fritzing

  • 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