首页 > 其他分享 >【esp32 学习笔记】 入门使用u8g2库(以OLED驱动芯片SSD1306为例)

【esp32 学习笔记】 入门使用u8g2库(以OLED驱动芯片SSD1306为例)

时间:2024-06-13 17:48:02浏览次数:20  
标签:u8g2 U8g2 引脚 esp32 为例 U8G2 I2C SSD1306

一、常用API

U8g2库提供了丰富的API,用于控制各种显示器并在屏幕上绘制文本、图形等元素。以下是U8g2库中一些常用的API:

1. 初始化-------U8G2

U8G2(display, rotation, [,reset [, clock, data, cs, dc, reset, cs1, cs2, cs3]])

 

初始化U8g2对象,其中display表示所使用的显示器型号,rotation表示显示器的旋转方向,其他参数是可选的,包括复位引脚、时钟引脚、数据引脚等。

2. 字体设置

u8g2.setFont(font)

 设置当前使用的字体,font是一个字体对象,例如:u8g2_font_ncenB14_tr。

3. 显示文本

drawStr(x, y, str)
u8g2.drawStr(x, y, str)

在指定位置(x, y)上绘制字符串str。

4. 绘制图像

drawXBM(x, y, width, height, bitmap)
u8g2.drawXBM(x, y, width, height, bitmap)

 

在指定位置(x, y)上绘制X BitMap(XBM)格式的图像,width和height是图像的宽度和高度,bitmap是存储图像数据的数组。

5. 画线

drawLine(x1, y1, x2, y2)
u8g2.drawLine(x1, y1, x2, y2)

 

在屏幕上绘制一条直线,起始点为(x1, y1),终止点为(x2, y2)。

6. 画矩形

drawFrame(x, y, width, height)
u8g2.drawFrame(x, y, width, height)

在指定位置(x, y)上绘制一个矩形,width和height分别为矩形的宽度和高度。

7. 清屏

clearBuffer()
u8g2.clearBuffer()

清空绘图缓冲区,但不清空屏幕。

8. 刷新显示

sendBuffer()
u8g2.sendBuffer()

将绘图缓冲区的内容发送到屏幕,刷新显示。

9. 滚动

firstPage(), nextPage()
u8g2.firstPage();
  do {
    // 在这里添加你的显示内容
    u8g2.setFont(u8g2_font_ncenB08_tr); // 设置字体
    u8g2.drawStr(0, 10, "Hello, U8g2!"); // 在指定位置绘制文本
  } while (u8g2.nextPage());

 

firstPage用于开始绘制多页内容,nextPage用于切换到下一页,这两个函数通常一起使用。

以上仅是U8g2库中一些常用的API,实际上库提供了更多的函数和选项,以满足不同场景下的需求。在使用时,可以参考U8g2库的文档和示例代码,深入了解每个函数的参数和用法。

 

二、使用 u8g2 的流程 & 简单例程

步骤1:安装U8g2库

在Arduino IDE中,打开“工具”菜单,选择“管理库”,搜索U8g2并安装。

步骤2:包含U8g2头文件

在你的Arduino项目中包含U8g2库的头文件:#include <U8g2lib.h>

步骤3:初始化显示器

选择你使用的显示器类型,并进行初始化。例如,如果你使用的是SSD1306 OLED屏,初始化代码如下:

U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

 

注意:你会看到 U8G2_SSD1306_128X64_NONAME_F_HW_I2C 的构造函数中没有明确指定SDA和SCL引脚,这是因为U8g2库默认使用了硬件I2C,并且根据不同的硬件平台,会自动使用默认的I2C引脚。例如,ESP32上的默认硬件I2C引脚为SDA:21,SCL:22。

如果你有特殊要求需要使用其他引脚,你可以在构造函数中指定具体的引脚,例如:

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 22, /* data=*/ 21);

 

在这个例子中,clock 对应SCL引脚,data 对应SDA引脚。

步骤4:使用U8g2库函数进行屏幕操作

通过U8g2库的函数,你可以在显示器上绘制文本、图形等。例如,显示“Hello, Arduino!”的代码如下:

u8g2.setFont(u8g2_font_ncenB14_tr);
u8g2.drawStr(0, 20, "Hello, Arduino!");

 

步骤5:刷新显示

最后,使用下面的代码刷新显示:

u8g2.sendBuffer();

 

完整简单例程如下:

#include <U8g2lib.h>
// 使用 U8g2库 创建 OLED 对象
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
//如果不使用默认的 SCL、SDA,请使用如下函数
//U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 22, /* data=*/ 21);

void setup() {
  // 初始化 OLED 对象
  u8g2.begin();
}

void loop() {
  // 清空显示屏内容
  u8g2.clearBuffer();

  // 添加文本
  u8g2.setFont(u8g2_font_ncenB08_tr);
  u8g2.drawStr(0, 10, "Hello, ESP32!");

  // 延时一段时间
  delay(1000);
}

 

标签:u8g2,U8g2,引脚,esp32,为例,U8G2,I2C,SSD1306
From: https://www.cnblogs.com/FBsharl/p/18246366

相关文章

  • 以 ZGC 为例,谈一谈 JVM 是如何实现 Reference 语义的
    本文基于OpenJDK17进行讨论1.Reference相关概念及其应用场景总览Reference(引用)是JVM中非常核心且重要的一个概念,垃圾回收器判断一个对象存活与否都是围绕着这个Reference来的,JVM将Reference又细分为几种具体的引用类型,它们分别是:StrongReference,SoftReference,Weak......
  • 用ESP32(ESP32-CAM)(Micropython)、水位传感器、继电器、水泵 做根据水位自动加水的设
    基本流程水位传感器放在水缸内上方位置,水位到达水位传感器所在的位置时,水位传感器触发,并输出信号给到ESP32(ESP32CAM)。然后ESP32(ESP32CAM)控制继电器闭合,水泵启动并工作60S。之后还是根据传感器信号,决定继电器是闭合还是断开,一直循环下去。main.py点击查看main.pyfrom......
  • 【esp32 学习笔记】让SD卡发光发热~
    原理图:图 SD卡部分图MCU中与SD卡相关的接口连接关系如下:[ESP32IO26–CSMICROSD][ESP32IO23–MOSI(DI)MICROSD][ESP32IO19–MISO(DO)MICROSD][ESP32IO18–SCKMICROSD][ESP32GND–GNDMICROSD][3.3V–VCCMICROSD] 软件:我们将使用SD卡库用于沟......
  • ESP32学习笔记:NVS分区永久保存数据
    程序示例:/*ESP32startupcounterexamplewithPreferenceslibrary.ThissimpleexampledemonstratesusingthePreferenceslibrarytostorehowmanytimestheESP32modulehasbooted.ThePreferenceslibraryisawrapperaroundtheNon-volatilestorage......
  • 以sqlilabs靶场为例,讲解SQL注入攻击原理【54-65关】
    【Less-54】与前面的题目不同是,这里只能提交10次,一旦提交超过十次,数据会重新刷新,所有的步骤需要重来一次。解题步骤:根据测试,使用的是单引号闭合。#判断字段的数量?id=1'orderby3--aaa#获取数据库的名字?id=-1'unionselect1,2,database()--aa#获取数据......
  • 【esp32 项目】使用I2C
    原理图:图I2C接口的RTC芯片图单片机I2C部分引脚图 软件启动I2C启动Wire库并作为主机或者从机加入总线,这个函数调用一次即可,参数为7位从机地址,不带参数就以主机的形式加入总线。Wire.begin();Wire.begin(address);主设备从从设备请求字节由主设备向从设备请求字节,之......
  • 【esp32 项目】使用I2C第一篇——I2C的科普
    https://www.eepw.com.cn/zhuanlan/315431.html 天我们来玩儿I2C。I2C概述I2C全称是Inter-IntegratedCircuit,是飞利浦半导体公司(06年迁移到NXP了)在1982年发明的,是使用非常广泛的一种通信协议,很多传感器、存储芯片、OLED等,都是在使用I2C。标准输出模式下能达到100kbps的传输......
  • 【esp32 项目】使用esp32的wifi
    原文:《老宇哥带你玩转ESP32:13终于到WiFi功能的使用了》链接:https://www.eepw.com.cn/zhuanlan/315164.html 今天我们来说说ESP32的WiFi。ESP32的WiFi我们之所以使用ESP32做一些小项目,最重要的就是看中了ESP32的WiFi功能,ESP32相当于一个强大的单片机+无线WiFi+蓝牙多合一......
  • 【esp32 项目】中断读取按键
    原理图:图 按键部分图 单片机部分程序:KEY_USR 引脚配置成上拉输入在Arduino中,配置一个IO为上拉输入可以使用pinMode()函数和digitalWrite()函数。pinMode()函数用于设置引脚模式,而digitalWrite()函数用于设置上拉电阻。以下是一个示例代码,展示如何将Arduino的数字引脚3配......
  • 【YOLOv5进阶】——修改网络结构(以C2f模块为例)
    一、站在巨人的肩膀上这里我们借鉴YOLOv8源码:上期说到,对于网络模块定义详情在common.py这个文件,如Conv、CrossConv、C3f等。本期要修改的需要参考YOLOv8里的C2f模块,它定义在YOLOv8的module文件夹的block.py文件里(与common.py一样),源码链接如下:YOLOv8源码https://github.com/u......