ESP32 OLED 中文显示示例程序

示例功能:以下例程使用U8G2开源图形库来驱动0.96寸的OLED(SSD1306),U8G2 是一个开源的嵌入式图形库,专为单色OLED/LCD屏幕设计,支持超过250种不同的显示控制器(包括SSD1306、SH1106等)。它的核心优势在于: 跨平台兼容:支持Arduino、ESP32、STM32、Raspberry Pi等多种硬件。 丰富的图形功能:内置文本、几何图形、位图绘制功能,支持自定义字体。 多语言支持:通过Unicode可显示中文、日文、韩文等复杂字符。 低内存占用:优化了缓冲区管理,适合资源有限的嵌入式设备
硬件接线:
OLED引脚 ESP32-S3引脚 VCC 3.3V GND GND SCL GPIO5 SDA GPIO4

预安装库:U8g2
简单范例
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, 5, 4, U8X8_PIN_NONE);
void setup(){
u8g2.setI2CAddress(0x3C*2);
u8g2.begin();
u8g2.enableUTF8Print();
}
void loop(){
u8g2.firstPage();
do
{
u8g2.setFont(u8g2_font_timR08_tf);
u8g2.setFontPosTop();
u8g2.setCursor(0,20);
u8g2.print("123456789");
}while(u8g2.nextPage());
}
程序概述
该程序使用 U8g2 库控制 ESP32 和 OLED 显示屏,通过 I2C 连接来显示中文字符。程序中分别展示了小字体、中字体和大字体的中文文本。
硬件连接
- SDA (数据线):连接到 ESP32 的 GPIO4
- SCL (时钟线):连接到 ESP32 的 GPIO5
- OLED 显示屏 I2C 地址:0x3C
原理
程序通过 U8G2_SSD1306_128X64_NONAME_F_SW_I2C
类控制 128x64 的 OLED 屏幕,并利用 I2C 通信协议与屏幕进行数据交换。使用 U8g2
库的函数来设置字体和在不同位置显示中文文本。
主要函数说明
u8g2.begin()
初始化 OLED 显示屏,确保通信准备好。
u8g2.setI2CAddress(0x3C * 2)
设置 OLED 显示屏的 I2C 地址,通常为 0x3C 或 0x3D。
u8g2.setFont()
选择不同的字体以显示文本。这里使用了支持中文的字体文件,如 u8g2_font_wqy12_t_gb2312
。
u8g2.setCursor(x, y)
设置光标的位置,用于指定文本显示的起始位置。
u8g2.print()
将文本输出到当前光标位置。
u8g2.firstPage()
和 u8g2.nextPage()
这两个函数用于分页显示,确保文本显示在 OLED 屏幕上的不同页面之间。
如何运行
- 将 OLED 显示屏连接到 ESP32,确保 SDA 和 SCL 接口连接正确。
- 在 Arduino IDE 中编写和上传程序。
- 启动串口监视器,确保程序运行并能够正确显示中文文本。
注意事项
- 确保使用的字体库支持中文字符。
- 如果需要更大字体,可以自行生成或者查找其他支持更大字体的库。
ESP32 OLED 中文显示示例程序
程序概述
该程序使用 U8g2 库控制 ESP32 和 OLED 显示屏,通过 I2C 连接来显示中文字符。程序中分别展示了小字体、中字体和大字体的中文文本。
硬件连接
- SDA (数据线):连接到 ESP32 的 GPIO4
- SCL (时钟线):连接到 ESP32 的 GPIO5
- OLED 显示屏 I2C 地址:0x3C
原理
程序通过 U8G2_SSD1306_128X64_NONAME_F_SW_I2C
类控制 128x64 的 OLED 屏幕,并利用 I2C 通信协议与屏幕进行数据交换。使用 U8g2
库的函数来设置字体和在不同位置显示中文文本。
程序代码
以下是完整的程序代码,用于在 OLED 显示屏上显示三行中文文本:
#include <U8g2lib.h>
#include <Wire.h>
// 使用软件 I2C 构造函数,指定 SCL 为 GPIO5,SDA 为 GPIO4,复位引脚未使用
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, 5, 4, U8X8_PIN_NONE);
void setup(){
Serial.begin(115200);
// 设置OLED显示屏的I2C地址(0x3C左移一位)
u8g2.setI2CAddress(0x3C * 2);
u8g2.begin();
u8g2.enableUTF8Print(); // 启用UTF8支持
}
void loop(){
u8g2.firstPage();
do {
// 第一行:小字体(支持中文)
u8g2.setFont(u8g2_font_wqy12_t_gb2312);
u8g2.setFontPosTop();
u8g2.setCursor(0, 4);
u8g2.print("第一行: 小字");
// 第二行:中字体(支持中文)
u8g2.setFont(u8g2_font_wqy14_t_gb2312);
u8g2.setCursor(0, 24);
u8g2.print("第二行: 中字");
// 第三行:暂时使用 u8g2_font_wqy16_t_gb2312 作为大字体的替代,
// 如果需要更大字体,则需自行生成或查找支持更大字号的中文字体
u8g2.setFont(u8g2_font_wqy16_t_gb2312);
u8g2.setCursor(0, 44);
u8g2.print("第三行: 大字");
} while(u8g2.nextPage());
delay(2000);
}