你是不是也遇到过这种事:单色OLED、小点阵LCD买回家,折腾半天库不兼容、字符宽度怪怪的、花里胡哨的图形连条直线都画不出来?别急,我最近刷到一个宝藏库——U8g2,真心好用,赶紧搬给你们!
为什么需要U8g2
日常做嵌入式项目,经常要在小小屏幕上显示文字、图形。可是市面上各种屏幕控制器(SSD1306、ST7565、KS0108……)各有各的指令集,光找示例就头大。
-
• 库不统一,切换硬件还得重写一大堆初始化
-
• 字库死板,16×16不够,24×24又占太多内存
-
• 有的库只能画点、字符,想要线条、圆形、倒影啥的画不出来
-
U8g2 是什么神器?
U8g2,全称 “Universal Graphics Library for Monochrome Displays, version 2”,专门给单色 OLED/LCD 量身定做,集成:
-
• 线/框/圆/三角等常用图形绘制
-
• 支持上百种像素级字体(从5×7到72pt都能用)
-
• Buffer 模式(Microcontroller 里先渲染,再一次写入屏幕)
-
• U8x8 子库:8×8 栅格纯字符模式,无缓冲,超省内存
Ta 支持哪些屏?
U8g2 支持超多控制器,常见的有:
|
控制器 |
应用场景 |
|
SSD1306 |
0.96″/1.3″ OLED |
|
SH1106 |
1.3″ OLED |
|
ST7565 |
小点阵LCD |
|
PCD8544 |
奔驰诺基亚 5110 |
|
MAX7219 |
点阵数码管 |
|
… |
… |
快速上手:Arduino 示例,仅供参考
下面演示一下,给 SSD1306 0.96″ OLED 画条直线、写段文字:
#include <U8g2lib.h>
// 硬件 SPI,CS:10, DC:9, RESET:8
U8G2_SSD1306_128X64_NONAME_F_HW_SPI u8g2(
U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
void setup() {
u8g2.begin();
}
void loop() {
u8g2.clearBuffer();// 清空缓存
u8g2.setFont(u8g2_font_ncenB08_tr);// 选择字体
u8g2.drawStr(0,10,"Hello U8g2!");// 画文字
u8g2.drawLine(0,12,127,12);// 画直线
u8g2.sendBuffer();// 刷新到屏幕
delay(1000);
}
它到底解决了啥痛点?
-
• 统一 API:屏幕换来换去,调用方式几乎不变
-
• 丰富字体:内置几十种 TTF 转成的点阵字库,随便挑
-
• 图形全家桶:画直线、矩形、圆弧、Bezier 曲线都能用
-
• 性能可选:FULL buffer(流畅) vs PAGE buffer(节省 RAM)
-
• 超省心:官方例程齐全,无需手撸底层指令
优缺点一览表
|
特性 |
优点 |
缺点 |
|
功能丰富 |
支持字体多、图形绘制全 |
全缓冲模式下要占用几 KB RAM |
|
兼容性 |
几百款控制器,Arduino/RPi/C 端都行 |
某些边缘控制器驱动需手动适配 |
|
易用性 |
一致的接口、示例代码完备 |
学习曲线:buffer/page 模式需理解 |
|
性能 |
页模式可省内存,流畅度也不错 |
页模式下闪屏、图形闪烁稍显明显 |
小结
U8g2 真的为单色屏带来了“开箱即用”的体验,无论你是要做仪表盘、信息展示牌还是搞创意像素 art,都能轻松胜任。只要你有几 KB RAM,就能花式炫图、拼字,甩开底层烦恼。
项目地址:https://github.com/olikraus/u8g2