ESP32通过软件模拟SPI或硬件SPI驱动7P SPI OLED屏幕显示

电子说

1.4w人已加入

描述

OLED屏幕简介

OLED,即有机发光二极管(Organic Light Emitting Diode)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被称为是第三代显示技术。LCD 都需要背光,而 OLED 不需要,因为它是自发光的。这样同样的显示 OLED 效果要来得好一些。

本实验用到的屏幕是7引脚的 0.96 寸的 SSD1306 芯片驱动的 OLED 屏幕。他的分辨率是 128*64,意思就是横向有 128 个像素点,纵向有 64 个。坐标原点在左上角,向右是X轴,向下是Y轴。
ESP32

OLED 显示屏模块接口定义:
GND:电源地。
VCC:电源正(3.3~5V)。
D0:OLED 的 D0 脚,在 SPI 通信中为时钟管脚SCK。
D1:OLED 的 D1 脚,在 SPI 通信中为数据管脚MOSI。
RES:OLED 的 RES 脚,用来复位(低电平复位)。
DC:数据和命令控制管脚。
CS:片选管脚。

OLED屏幕与ESP32开发板软件模拟SPI接线

ESP32

OLEDESP32开发板
GNDGND
VCC3.3V
D018
D113
RES15
DC2
CS4

ESP32软件模拟SPI的Arduino驱动程序

安装Adafruit_GFX、Adafruit_SSD1306驱动库
ESP32ESP32

#include < SPI.h >
#include < Adafruit_GFX.h >
#include < Adafruit_SSD1306.h >
#define SCREEN_WIDTH 128 // OLED 显示屏宽度
#define SCREEN_HEIGHT 64 // OLED 显示屏高度

// 软件SPI总线
#define OLED_MOSI 13
#define OLED_CLK 18
#define OLED_DC 2
#define OLED_CS 4
#define OLED_RESET 15
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT,
                     OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

void setup()
{
 oled.begin();
 oled.clearDisplay();                          // 清除显示
 oled.drawFastHLine(32, 5, 48, SSD1306_WHITE); // 绘制水平线
 oled.drawLine(32, 5, 48, 30, SSD1306_WHITE);  // 绘制线
 oled.drawRect(5, 5, 10, 25, SSD1306_WHITE);   // 绘制矩形
 oled.fillRect(75, 5, 10, 30, SSD1306_WHITE);  // 绘制实心矩形
 oled.setCursor(5, 50);                        // 设置光标位置
 oled.setTextSize(1);                          // 设置字体大小
 oled.setTextColor(WHITE);                     // 设置文本颜色
 oled.println("Hello, world!");                // 显示文字
 oled.display();                               // 显示内容
}

void loop()
{
}

OLED屏幕与ESP32开发板硬件SPI接线

ESP32

OLEDESP32开发板
GNDGND
VCC3.3V
D018
D123
RES15
DC2
CS4

ESP32硬件SPI的Arduino驱动程序

打开主程序中SPI.h头文件定位到pins_arduino.h头文件,可查看到硬件ESP32硬件SPI默认引脚号为:
ESP32

#include < SPI.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
#define OLED_DC     2
#define OLED_CS     4
#define OLED_RESET  15
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT,
 &SPI, OLED_DC, OLED_RESET, OLED_CS);

void setup()
{
 oled.begin();
 oled.clearDisplay();                          // 清除显示
 oled.drawFastHLine(32, 5, 48, SSD1306_WHITE); // 绘制水平线
 oled.drawLine(32, 5, 48, 30, SSD1306_WHITE);  // 绘制线
 oled.drawRect(5, 5, 10, 25, SSD1306_WHITE);   // 绘制矩形
 oled.fillRect(75, 5, 10, 30, SSD1306_WHITE);  // 绘制实心矩形
 oled.setCursor(5, 50);                        // 设置光标位置
 oled.setTextSize(1);                          // 设置字体大小
 oled.setTextColor(WHITE);                     // 设置文本颜色
 oled.println("Hello, world!");                // 显示文字
 oled.display();                               // 显示内容
}

void loop()
{
}

实验现象

ESP32

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分