Arduino Uno 点亮OLED屏幕 (SH1106,4Pin,IIC) 显示中文

实验效果

这次使用U8G2驱动OLED屏幕(芯片:SH1106)并且显示一些常见中文。

其实U8G2是一个强大的图形库,在很多屏幕都可以使用。 该库支持的中文受限于Arduino Uno的程序储存空间(32KB),所以本次实验只能显示一部分常见的中文,没法做到单独使用U8G2做到显示任意中文的程度。 如果想要支持更全的中文,则需要更换更大的程序储存空间的开发板。

元件说明

HTB1WftQNpXXXXXzaFXXq6xXFXXXn

芯片: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数据线

img

BOM表

名称 数量
Arduino Uno x1
OLED屏幕(SH1106,4Pin,IIC) x1
面包板 x1
跳线(杜邦线) 若干

接线方式

Arduino Uno 引脚 <-> OLED 引脚
GND <-> GND
3.3V <-> VCC
A5 <-> SCL
A4 <-> SDA

程序提点

安装U8G2图像库

安装方法很简单,在菜单栏依次打开: 菜单栏「工具」-> 「管理库」

在弹出的库管理窗口中的搜素对应的关键字,找到对应的库(注意要找对库名称和库作者),点击安装,等待安装完成即可。

arduino-use-oled-sh1106-iic-install-library_xn

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等等,用起来就爽多了。