Arduino Uno 点亮OLED屏幕 (SH1106,4Pin,IIC) 显示中文
目录
实验效果
这次使用U8G2驱动OLED屏幕(芯片:SH1106)并且显示一些常见中文。
其实U8G2是一个强大的图形库,在很多屏幕都可以使用。 该库支持的中文受限于Arduino Uno的程序储存空间(32KB),所以本次实验只能显示一部分常见的中文,没法做到单独使用U8G2做到显示任意中文的程度。 如果想要支持更全的中文,则需要更换更大的程序储存空间的开发板。
元件说明
芯片:SH1106 分辨率:128 x 64 显示面积:29.42*14.7 mm 驱动电压:3.3-5V 工作温度:-40 至 70 接口类型:IIC
本次使用的是4针的IIC接口屏幕,该屏幕另外还有7针的支持SPI显示和8针的增加带字库功能的。
引脚说明
GND 为接地 VCC 为供电(需要供电3.3V-5V) SCL 为I2C时钟线 SDA 为I2C数据线
BOM表
名称 | 数量 |
---|---|
Arduino Uno | x1 |
OLED屏幕(SH1106,4Pin,IIC) | x1 |
面包板 | x1 |
跳线(杜邦线) | 若干 |
接线方式
Arduino Uno 引脚 | <-> | OLED 引脚 |
---|---|---|
GND | <-> | GND |
3.3V | <-> | VCC |
A5 | <-> | SCL |
A4 | <-> | SDA |
程序提点
安装U8G2图像库
安装方法很简单,在菜单栏依次打开: 菜单栏「工具」-> 「管理库」
在弹出的库管理窗口中的搜素对应的关键字,找到对应的库(注意要找对库名称和库作者),点击安装,等待安装完成即可。
U8G2图像库非常强大,支持市面上大多数的屏幕,在示例中,可以查看,只要选择对应型号即可。 在本示例中选择了SH1106芯片,分辨率是128X64,接线方式是I2C的OLED屏幕。
u8g2.enableUTF8Print();
如果需要显示中文,在setup()中就要声明。
程序代码
// by lingshunlab.com
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
// 定义u8g2实例
// 选择正确的屏幕芯片SH1106,分辨率128X64,接线方式I2C
U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
void setup() {
u8g2.begin(); // 初始化u8g2
u8g2.enableUTF8Print(); // 启动UTF8,需要显示中文,必须要开启
}
void loop() {
// 定义字体,该u8g2_font_unifont_t_chinese2字库只支持一些常见的中文
u8g2.setFont(u8g2_font_unifont_t_chinese2);
u8g2.setFontDirection(0);
u8g2.firstPage();
do { // 显示的内容
u8g2.setCursor(18, 20);
u8g2.print("Hello World!!");
u8g2.setCursor(28, 45);
u8g2.print("你好,世界!"); // Chinese "Hello World"
} while ( u8g2.nextPage() );
delay(1000);
}
上传成功,即可看到屏幕显示出中文了。
但也留意到该项目占用了87%的程序储存空间,也就是如果使用的是Arduino Uno的话,用了U8G2图形库的话,基本上Arduino Uno 就做不了其他复杂的事情。 所以,U8G2香是香,但需要更大程序储存空间,可以换成Arduino Mega2560,ESP32等等,用起来就爽多了。