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

4 篇文章 2 订阅

本文开发环境:

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

本文内容:

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

一、简介

使用ESP8266模块(LoLin)驱动0.96寸OLED:
在这里插入图片描述

二、u8g2 图形库

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

1. u8g2 图形库的安装

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

  • 在 IDE 中按住:Ctrl + Shift + I 打开库管理器:
    在这里插入图片描述
  • 在库管理中搜索 u8g2 并点击右下角 “安装” :
    在这里插入图片描述
    (本文已经安装最新版本,固右下角不显示安装按钮)
  • 测试库的安装
    在 IDE 编辑窗口中,输入以下简单的测试程序,并编译,通过即表示安装已经成功:
#include <Arduino.h>
#include <U8g2lib.h>     //引用 u8g2 图形库

void setup(void) 
{
}

void loop(void) 
{
}

2. 运行一个示例

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

2.1 接线

MCUOLED
D1SCL
D2SDA

在这里插入图片描述

2.2 打开一个示例

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

在运行一个示例以后,其他示例的方法是一致的,本文简介运行的示例为:Weather
在这里插入图片描述

重要提示
注意,这里是 page_buffer 中的 Weather 而不是 full_buffer 中的Weather ,在 1.8.13 测试中,full_buffer 的例子是无法正常运行的,原因应该是显存方式不同:
/*
U8g2lib Example Overview:
Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption
Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards.
U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.
This is a page buffer example.
*/
从上文提示可获取到的信息,Frame Buffer 的例子可能不合适所有的arduino板子,因为他需要更大的内存空间来保证更快的速度。

3. 修改接线引脚

上文我们直接将SCL和SDA和MCU的D1,D2连接,若我们想要使用其他的IO口来驱动OLED,只需要在实例化对象的时候,输入对应的SCL,和SDA脚即可。
比如,我们想要SDA接开发板上的D5,SCL接开发板上的D6,这个时候我们可以通过原理图查看,D5,D6对应的GPIO口编号:
在这里插入图片描述
这样,SDA接D5,对应接的是GPIO14,SCL接的是D6,对应接的是GPIO12我们就可以编写如下程序:

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#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);  
}

运行如下:
在这里插入图片描述

  • 10
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值