esp笔记(7)单色OLED(SSD1306) 显示与 u8g2 库的使用

本文开发环境:

  • MCU型号:ESP8266
  • IDE环境 : Arduino IDE 1.8.9
  • 0.96寸 OELD模块

本文内容:

  1. esp8266 使用 u8g2图形库 驱动 OELD 显示字符和图标
  2. 自定义软件IIC的接口

文章目录

  • 一、简介
  • 二、u8g2 图形库
    • 1. u8g2 图形库的安装
    • 2. 运行一个示例
      • 2.1 接线
      • 2.2 打开一个示例
    • 3. 修改接线引脚

一、简介

使用ESP8266模块(LoLin)驱动0.96寸OLED:

二、u8g2 图形库

u8g2 是一个强大的图形库,支持多种控制器,当然包括本文所用 oled模块的驱动IC (SSD1306),图形库通过提供API函数的方法,使用户可以非常方便的显示各种各样图标,字符甚至动效等。详见 u8g2 wiki。在 wiki 中,我们可以看到该库提供的控制器:
esp笔记(7)单色OLED(SSD1306) 显示与 u8g2 库的使用_第1张图片

1. u8g2 图形库的安装

在使用功 u8g2 库之前,需要在Arduino IDE(以下简称IDE)中安装 u8g2 图形库,该库和其他库的安装相同:

  • 在 IDE 中按住:Ctrl + Shift + I 打开库管理器:
    esp笔记(7)单色OLED(SSD1306) 显示与 u8g2 库的使用_第2张图片
  • 在库管理中搜索 u8g2 并点击右下角 “安装” :
    esp笔记(7)单色OLED(SSD1306) 显示与 u8g2 库的使用_第3张图片
    (本文已经安装最新版本,固右下角不显示安装按钮)
  • 测试库的安装
    在 IDE 编辑窗口中,输入以下简单的测试程序,并编译,通过即表示安装已经成功:
#include 
#include      //引用 u8g2 图形库

void setup(void) 
{
}

void loop(void) 
{
}

2. 运行一个示例

本小结首先通过一个简单的示例,让OLED显示一个“HELLO WORLD!”字符串

2.1 接线

MCU OLED
D1 SCL
D2 SDA

esp笔记(7)单色OLED(SSD1306) 显示与 u8g2 库的使用_第4张图片

2.2 打开一个示例

当我们安装好u8g2库以后,在【文件】-【示例】-【第三方库】中,就可以找到 u8g2 官方给我们提供的各种 demo:
esp笔记(7)单色OLED(SSD1306) 显示与 u8g2 库的使用_第5张图片
我们在 full_buffer 目录中,选择一个简单的程序:HelloWorld :
esp笔记(7)单色OLED(SSD1306) 显示与 u8g2 库的使用_第6张图片
如果我们直接编译的话,将会报错,原因是我们没有u8g2这个对象,之所以示例程序没有给我们创建,是因为它无法预知我们使用的是什么oled驱动器,接线方式如何,所以需要用户自己实例化一个u8g2对象,方法只需要在上文注释掉的内容中,找到合适的代码,取消注释即可,本文使用的oled控制器为SSD1306,IIC驱动,并使用默认的IIC口,无Reset引脚,故选择取消以下这一行的注释:
esp笔记(7)单色OLED(SSD1306) 显示与 u8g2 库的使用_第7张图片
如上图所示,打开注释以后,既可编译,编译完成即可下载(由于官方的示例是只读的,所以需要另存为一份,或者是整体复制出来):

在运行一个示例以后,其他示例的方法是一致的,本文简介运行的示例为:Weather
esp笔记(7)单色OLED(SSD1306) 显示与 u8g2 库的使用_第8张图片

3. 修改接线引脚

上文我们直接将SCL和SDA和MCU的D1,D2连接,若我们想要使用其他的IO口来驱动OLED,只需要在实例化对象的时候,输入对应的SCL,和SDA脚即可。
比如,我们想要SDA接开发板上的D5,SCL接开发板上的D6,这个时候我们可以通过原理图查看,D5,D6对应的GPIO口编号:
esp笔记(7)单色OLED(SSD1306) 显示与 u8g2 库的使用_第9张图片
这样,SDA接D5,对应接的是GPIO14,SCL接的是D6,对应接的是GPIO12我们就可以编写如下程序:

#include 
#include 

#ifdef U8X8_HAVE_HW_SPI
#include 
#endif
#ifdef U8X8_HAVE_HW_I2C
#include 
#endif



U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 12, /* data=*/ 14, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display

void setup(void) {
  u8g2.begin();
}

void loop(void) {
  u8g2.clearBuffer();         // clear the internal memory
  u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
  u8g2.drawStr(0,10,"Hello SSD1306!");  // write something to the internal memory
  u8g2.sendBuffer();          // transfer internal memory to the display
  delay(1000);  
}

运行如下:

你可能感兴趣的:(esp8266,OLED)