OLED显示器与Arduino接口
Quote from Matoo robot on 2024年7月12日, pm4:42了解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(); }
了解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();
}