一、简介:
LED驱动芯片:SSD1306
开发平台: vscode+platformIO
开发板:ESP32 Divkit v1
目前Arduino平台上使用最广泛的OLED库: U8G2
github地址: https://github.com/olikraus/u8g2/
设置和参考手册:https://github.com/olikraus/u8g2/wiki
U8g2:单色显示器库,版本2
U8g2是用于嵌入式设备的单色图形库。U8g2支持单色OLED和LCD,包括以下控制器:SSD1305,SSD1306,SSD1309,SSD1322,SSD1325,SSD1327,SSD1329,SSD1606,SSD1607,SH1106,SH1107,SH1108,SH1122,T6963,RA8835,LC7981,PCD8544,PCF8812,HX12 ,UC1601,UC1604,UC1608,UC1610,UC1611,UC1701,ST7565,ST7567,ST7588,ST75256,NT7534,IST3020,ST7920,LD7032,KS0108,SED1520,SBN1661,IL3820,MAX7219(完整列表请参见此处)。
为什么要运用U8g2库?
-
U8g2库平台支持性好,基本上支持绝大部分Arduino开发板;
-
U8g2库显示控制器支持性好,基本上市面上的OLED都完美支持;
-
U8g2库 API众多,特别支持了中文,支持了不同字体,这是一个对于开发者俩说不小的福利。
使用U8g2库进行OLED的显示十分简单,首先要包含两个库,U8g2lib和Wire,后者是IIC通信需要用。
对于IIC接口的OLED,需要在程序中指定一下引脚的接口定义,如果是SPI接口,可以参考U8g2库自带例程中SPI接口是使用方法。
二、工程创建:
-
- 新建工程:

-
- 导入u8g2库


3.添加头文件和引脚定义

三、相关API:

初始化:
在Ardunio的setup中进行u8g2的初始化。
#include <U8g2lib.h>
#include <Wire.h>
#define SCL 5
#define SDA 4
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /*clock=*/SCL, /*data=*/SDA, /*reset=*/U8X8_PIN_NONE);
void setup()
{
u8g2.begin();
}
1. u8g2.begin() —— 构造U8G2
初始化显示器, 清屏, 唤醒屏幕
/**
* 初始化U8g2库
* @Note 关联方法 initDisplay clearDisplay setPowerSave
*/
bool U8G2::begin(void)
2. u8g2.beginSimple() —— 构造U8G2
只是初始化显示器, 并不清屏, 也不唤醒屏幕
3. u8g2.initDisplay() —— 初始化显示控制器
/**
* 初始化显示控制器
*/
void U8G2::initDisplay(void)
4. u8g2.clearDisplay() —— 清除屏幕内容
/**
* 清除屏幕
*/
void U8G2::clearDisplay(void)
5. u8g2.setPowerSave() —— 是否开启省电模式
/**
* 清除显示缓冲区
* @param is_enable
* 1 表示启用显示器的省电模式,屏幕上看不到任何东西
* 0 表示禁用省电模式
*/
void U8G2::setPowerSave(uint8_t is_enable)
6. u8g2.clear() —— 清除操作
/**
* 清除屏幕显示,清除缓冲区,光标回到左上角原点位置(0,0)
* @Note 关联方法 home clearDisplay clearBuffer
*/
void U8G2::clear(void)
7. u8g2.clearBuffer() —— 清除缓冲区
/**
* 清除内存中数据缓冲区
*/
void U8G2::clearBuffer(void)
8. u8g2.disableUTF8Print() —— 禁用 UTF8打印
/**
* 禁用Arduino平台下支持输出UTF8字符集,默认是开启
*/
void U8G2::disableUTF8Print(void)
9. u8g2.enableUTF8Print() —— 启用 UTF8打印
/**
* 开启Arduino平台下支持输出UTF8字符集
*/
void U8G2::enableUTF8Print(void)
开启UTF-8后,我们可以使用其UTF-8字库
#include <Arduino.h>
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE, /* clock=*/22, /* data=*/21); // ESP32 Thing, HW I2C with pin remapping
void setup(void)
{
u8g2.begin();
u8g2.enableUTF8Print(); // enable UTF8 support for the Arduino print() function
}
void loop(void)
{
u8g2.setFont(u8g2_font_unifont_t_chinese2); // use chinese2
u8g2.firstPage();
do
{
u8g2.setCursor(0, 20);
u8g2.print("helloworld"); // Chinese "Hello World"
u8g2.setCursor(0, 40);
u8g2.print("你好世界"); // Chinese "Hello World"
} while (u8g2.nextPage());
delay(1000);
}
10. u8g2.home() —— 重置显示光标的位置
/**
* 重置显示光标的位置,回到原点(0,0)
* @Note 关联方法 print clear
*/
void U8G2::home(void)
11.loop中的通用写法:
在Ardunio的loop中编写自己想要的代码逻辑,温馨提醒,在U8g2库在loop中的通用写法是使用do{}while()的形式:
u8g2.firstPage();
do
{
//自己的的逻辑
} while (u8g2.nextPage());
delay(1000);
U8g2绘制函数 :基础设置
setFont(font) 设置字体
-
font:u8g2的字体,比较常用的有u8g2_font_unifont_t_symbols(通常使用这个)和u8g2_font_wqy12_t_gb2312b(用于显示汉字)等
setFontMode(num) 设置字体背景颜色模式
-
num:启用(1)透明模式
-
num:禁用(0)透明模式
setDrawColor(color) 设置所有绘图函数的位值
-
color:0(显示RAM中的清晰像素值)
-
color:1(设置像素值)
-
color:2(异或模式)
drawPixel(x,y) 画像素点
-
x、y:像素点的坐标
例如我们可以显示所有的点: