OLED显示器与Arduino接口

了解OLED显示器如何通过生动的视觉效果改善您的项目。无论您是初学者还是专家,都可以找到使用OLED显示器的宝贵技巧。

项目介绍

我们大多数人都熟悉 16×2 点阵 LCD $ 显示 $,它在大多数项目中用于向用户显示一些信息。然而,这些 LCD 显示器在它们的功能上有很多限制。在本教程中,我们将了解$ OLED $显示器以及如何将它们与Arduino一起使用。市场上有许多类型的OLED显示器,并且有很多方法可以使它们工作。在本教程中,我们将讨论其分类以及最适合您的项目的分类。

I2C OLED显示模块引脚排列

该OLED模块利用I2C与微控制器进行通信。您还可以在同一 PCB 中找到具有 I2C 或 SPI 接口的类似显示器,甚至两者兼而有之。我们使用的模块总共有 4 个引脚。I2C OLED显示模块的引脚排列如下所示-

模块的 GND 接地连接。连接到 Arduino.VCC 的 GND 引脚 为模块供电。连接到Arduino.SCL串行时钟引脚的5V引脚。用于为I2C Communication.SDA串行数据引脚提供时钟脉冲。用于通过 I2C 通信传输数据。

I2C OLED模块零件

下图显示了I2C OLED显示模块PCB上的组件。

XC6206P332 稳压器将输入电压降压至 3.3V。该稳压器的加入使我们能够将OLED模块连接到5.5V微控制器或电路。我们还可以通过改变地址选择电阻的位置来设置OLED模块I2C地址。I2C 默认地址为 0x78(7 位为 0x3C),可以更改为 0x7A(7 位为 0x3D)。

OLED模块接口连接图

下图显示了如何将I2C OLED模块与Arduino板连接。

连接非常简单,将GND引脚连接到Arduino的GND引脚,将VCC连接到5V引脚。SCL 连接到 A5,SDA 连接到 Arduino 的 A4 引脚。

具有基本文本和图形功能的Arduino代码

连接准备就绪后,您可以开始对Arduino进行编程。无论OLED显示器使用I2C还是SPI接口,代码几乎都是一样的。让我们从安装必要的库开始。在本教程中,我们需要安装两个 Arduino 库,$ Adafruit SSD1306 $ $ Adafruit GFX $ 库。安装它们的最简单方法是使用 Arduino IDE 库管理器,只需搜索这些库并安装它们即可。成功安装库后,将以下代码复制并粘贴到 Arduino IDE。根据您使用的是 I2C 还是 SPI 接口进行更改,然后编译并将其上传到 Arduino。有关更详细的说明,请查看 $ 与 Arduino 的接口 OLED 显示器 $

Arduino 代码

#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels

#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for SSD1306 display connected using I2C

#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)

#define SCREEN_ADDRESS 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Declaration for SSD1306 display connected using software SPI:

//#define OLED_MOSI   9

//#define OLED_CLK   10

//#define OLED_DC    11

//#define OLED_CS    12

//#define OLED_RESET 13

//Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
void setup()

{

 Serial.begin(9600);

  // initialize the OLED object

 if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {

   Serial.println(F("SSD1306 allocation failed"));

   for(;;); // Don't proceed, loop forever

 }
// Uncomment this if you are using SPI

 //if(!display.begin(SSD1306_SWITCHCAPVCC)) {

 //  Serial.println(F("SSD1306 allocation failed"));

 //  for(;;); // Don't proceed, loop forever

 //}
// Clear the buffer.
display.clearDisplay();

 // Display Text

 display.setTextSize(1);

 display.setTextColor(WHITE);

 display.setCursor(0, 28);

 display.println("Hello world!");

 display.display();

 delay(2000);

 display.clearDisplay();
// Display Inverted Text

 display.setTextColor(BLACK, WHITE); // 'inverted' text

 display.setCursor(0, 28);

 display.println("Hello world!");

 display.display();

 delay(2000);

 display.clearDisplay();
// Changing Font Size

 display.setTextColor(WHITE);

 display.setCursor(0, 24);

 display.setTextSize(2);

 display.println("Hello!");

 display.display();

 delay(2000);

 display.clearDisplay();) {

}
// Display Numbers

 display.setTextSize(1);

 display.setCursor(0, 28);

 display.println(123456789);

 display.display();

 delay(2000);

 display.clearDisplay();
// Specifying Base For Numbers

 display.setCursor(0, 28);

 display.print("0x"); display.print(0xFF, HEX);

 display.print("(HEX) = ");

 display.print(0xFF, DEC);

 display.println("(DEC)");

 display.display();

 delay(2000);

 display.clearDisplay();
// Display ASCII Characters

 display.setCursor(0, 24);

 display.setTextSize(2);

 display.write(1);

 display.display();

 delay(2000);

 display.clearDisplay();
// Scroll full screen

 display.setCursor(0, 0);

 display.setTextSize(1);

 display.println("Full");

 display.println("screen");

 display.println("scrolling!");

 display.display();

 display.startscrollright(0x00, 0x07);

 delay(4500);

 display.stopscroll();

 delay(1000);

 display.startscrollleft(0x00, 0x07);

 delay(4500);

 display.stopscroll();

 delay(1000);

 display.startscrolldiagright(0x00, 0x07);

 delay(4500);

 display.startscrolldiagleft(0x00, 0x07);

 delay(4500);

 display.stopscroll();

 display.clearDisplay();
//draw rectangle

 display.setTextSize(1);

 display.setTextColor(WHITE);

 display.setCursor(0, 0);

 display.println("Rectangle");

 display.drawRect(0, 15, 60, 40, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();
//draw filled rectangle

 display.setCursor(0, 0);

 display.println("Filled Rectangle");

 display.fillRect(0, 15, 60, 40, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();
//draw rectangle with rounded corners

 display.setCursor(0, 0);

 display.println("Round Rectangle");

 display.drawRoundRect(0, 15, 60, 40, 8, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();
//draw circle

 display.setCursor(0, 0);

 display.println("Circle");

 display.drawCircle(20, 35, 20, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();
//draw filled circle

 display.setCursor(0, 0);

 display.println("Filled Circle");

 display.fillCircle(20, 35, 20, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();
//draw triangle

 display.setCursor(0, 0);

 display.println("Triangle");

 display.drawTriangle(30, 15, 0, 60, 60, 60, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();
//draw filled triangle

 display.setCursor(0, 0);

 display.println("Filled Triangle");

 display.fillTriangle(30, 15, 0, 60, 60, 60, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();

}
#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels

#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for SSD1306 display connected using I2C

#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)

#define SCREEN_ADDRESS 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Declaration for SSD1306 display connected using software SPI:

//#define OLED_MOSI   9

//#define OLED_CLK   10

//#define OLED_DC    11

//#define OLED_CS    12

//#define OLED_RESET 13

//Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
void setup()

{

 Serial.begin(9600);

  // initialize the OLED object

 if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {

   Serial.println(F("SSD1306 allocation failed"));

   for(;;); // Don't proceed, loop forever

 }
// Uncomment this if you are using SPI

 //if(!display.begin(SSD1306_SWITCHCAPVCC)) {

 //  Serial.println(F("SSD1306 allocation failed"));

 //  for(;;); // Don't proceed, loop forever

 //}
// Clear the buffer.
display.clearDisplay();

 // Display Text

 display.setTextSize(1);

 display.setTextColor(WHITE);

 display.setCursor(0, 28);

 display.println("Hello world!");

 display.display();

 delay(2000);

 display.clearDisplay();
// Display Inverted Text

 display.setTextColor(BLACK, WHITE); // 'inverted' text

 display.setCursor(0, 28);

 display.println("Hello world!");

 display.display();

 delay(2000);

 display.clearDisplay();
// Changing Font Size

 display.setTextColor(WHITE);

 display.setCursor(0, 24);

 display.setTextSize(2);

 display.println("Hello!");

 display.display();

 delay(2000);

 display.clearDisplay();) {

}
// Display Numbers

 display.setTextSize(1);

 display.setCursor(0, 28);

 display.println(123456789);

 display.display();

 delay(2000);

 display.clearDisplay();
// Specifying Base For Numbers

 display.setCursor(0, 28);

 display.print("0x"); display.print(0xFF, HEX);

 display.print("(HEX) = ");

 display.print(0xFF, DEC);

 display.println("(DEC)");

 display.display();

 delay(2000);

 display.clearDisplay();
// Display ASCII Characters

 display.setCursor(0, 24);

 display.setTextSize(2);

 display.write(1);

 display.display();

 delay(2000);

 display.clearDisplay();
// Scroll full screen

 display.setCursor(0, 0);

 display.setTextSize(1);

 display.println("Full");

 display.println("screen");

 display.println("scrolling!");

 display.display();

 display.startscrollright(0x00, 0x07);

 delay(4500);

 display.stopscroll();

 delay(1000);

 display.startscrollleft(0x00, 0x07);

 delay(4500);

 display.stopscroll();

 delay(1000);

 display.startscrolldiagright(0x00, 0x07);

 delay(4500);

 display.startscrolldiagleft(0x00, 0x07);

 delay(4500);

 display.stopscroll();

 display.clearDisplay();
//draw rectangle

 display.setTextSize(1);

 display.setTextColor(WHITE);

 display.setCursor(0, 0);

 display.println("Rectangle");

 display.drawRect(0, 15, 60, 40, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();
//draw filled rectangle

 display.setCursor(0, 0);

 display.println("Filled Rectangle");

 display.fillRect(0, 15, 60, 40, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();
//draw rectangle with rounded corners

 display.setCursor(0, 0);

 display.println("Round Rectangle");

 display.drawRoundRect(0, 15, 60, 40, 8, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();
//draw circle

 display.setCursor(0, 0);

 display.println("Circle");

 display.drawCircle(20, 35, 20, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();
//draw filled circle

 display.setCursor(0, 0);

 display.println("Filled Circle");

 display.fillCircle(20, 35, 20, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();
//draw triangle

 display.setCursor(0, 0);

 display.println("Triangle");

 display.drawTriangle(30, 15, 0, 60, 60, 60, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();
//draw filled triangle

 display.setCursor(0, 0);

 display.println("Filled Triangle");

 display.fillTriangle(30, 15, 0, 60, 60, 60, WHITE);

 display.display();

 delay(2000);

 display.clearDisplay();

}

Similar Posts

Leave a Reply