U8g2 是一个功能强大、使用便捷的开源图形库,它支持多种常见的单色 OLED、LCD 和字符型显示器,并提供了丰富的绘图和文字显示功能。U8g2 的设计理念是: 在兼顾性能的前提下,尽可能简化使用,让开发者能够快速上手,轻松实现各种显示效果。
U8g2 的优势
• 跨平台兼容性: U8g2 支持多种平台,包括 Arduino、ESP32、STM32等。
• 广泛的显示器支持: U8g2 支持超过 40 种常见的单色显示器,包括 SSD1306、SSD1318、SH1106、T6963、PCD8544 等等。
• 强大的绘图功能: U8g2 提供了绘制线条、矩形、圆形、椭圆、三角形、填充图形等功能,满足各种图形显示需求。
• 丰富的字体支持: U8g2 自带多种字体,并允许用户自定义字体,满足不同显示场景的文字排版需求。
• 简单易用: U8g2 提供简洁的 API,让开发者能够快速上手,轻松使用其功能。
U8g2 的核心概念
U8g2 提供两种库:U8g2 和 U8x8。
U8g2
• 包含完整的图形绘制功能。
• 支持多种字体,且对字体高度几乎没有限制。
• 需要在微控制器中预留一定内存来渲染显示内容。
U8x8
• 仅支持字符输出。
• 只能使用 8x8 像素网格内的字体。
• 直接将数据写入显示器,无需在微控制器中预留内存。
U8g2 入门指南
1. 安装 U8g2 库
使用 Arduino IDE 的库管理器搜索并安装 "U8g2" 库,即可使用 U8g2 的全部功能。
2. 初始化显示器
在程序中,首先需要初始化显示器。以下代码示例以 SSD1306 显示器为例:
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA, /* cs=*/ U8X8_PIN_NONE);
void setup() {
u8g2.begin();
}
3. 绘制图形
U8g2 提供多种图形绘制函数,例如:
•
drawLine()
:绘制直线•
drawBox()
:绘制矩形•
drawCircle()
:绘制圆形•
drawTriangle()
:绘制三角形•
fillRect()
:填充矩形
例如,以下代码绘制一条水平线:
u8g2.drawLine(10, 20, 110, 20);
4. 显示文字
U8g2 支持多种字体,您可以使用 setFont()
函数选择合适的字体,然后使用 drawString()
函数显示文字。
例如,以下代码在显示器中央显示 "Hello, World!":
u8g2.setFont(u8g2_font_open_sans_10_tr);
u8g2.drawString("Hello, World!", 32, 32);
5. 更新显示
在绘制完图形或文字后,需要调用 sendBuffer()
函数将缓冲区内容更新到显示器。
u8g2.sendBuffer();
案例:模拟温度计
以下示例使用 U8g2 库实现一个简单的模拟温度计:
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA, /* cs=*/ U8X8_PIN_NONE);
int temperature =25;
void setup() {
u8g2.begin();
u8g2.setFont(u8g2_font_open_sans_10_tr);
}
void loop() {
u8g2.clearBuffer();// 清除缓冲区
u8g2.drawFrame(10,10,100,50);// 绘制外框
u8g2.drawLine(10,60,10,10+ temperature *2);// 绘制温度指示线
u8g2.drawString("温度:",10,70);
u8g2.setCursor(60,70);
u8g2.print(temperature);
u8g2.print("℃");
u8g2.sendBuffer();// 更新显示
delay(1000);
}
结语
U8g2 图形库的强大功能和易用性,让嵌入式开发更加便捷。使用 U8g2,开发者可以轻松地在各种单色显示器上实现丰富多彩的显示效果,为物联网应用增添生机。
项目地址:https://github.com/olikraus/u8g2