使用u8g2库驱动oled显示屏幕

本文介绍了用于嵌入式设备的单色图形库u8g2,它适用于多种平台和显示屏,提供通用API,支持两种模式。还阐述了采用ESP32使用u8g2库以IIC方式驱动oled屏幕的实验,包括项目创建、添加库、库的使用,以及实现oled全局刷新和按键切换页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

u8g2库介绍

U8g2库是主要用于嵌入式设备的单色图形库,适用于Arduino、STM32、ESP8266等多种平台。它支持多种单色OLED和LCD显示屏,包括SSD1306、SSD1322、SSD1325、SSD1327、SSD1329、SSD1606、SSD1607等不同的显示控制器。

U8g2提供了一套通用的API,使得用户能够在不同类型的显示屏上创建图形界面。它具有简单的API和强大的文本与图形支持功能,即使初学者也能迅速上手。

U8g2支持无缓冲模式和完整缓冲模式,前者在有限的RAM中运行复杂的图形任务,但显示更新可能更慢;后者在RAM中存储整个屏幕的图像,使得显示更新更快,但需要更多RAM。

实验介绍

采用ESP32使用u8g2库采用IIC方式驱动oled屏幕,不同按键显示不同内容

硬件

ESP32开发板、按键、杜邦线

软件

vscode+platformio、arduino框架

实验过程

项目创建

在这里插入图片描述

1.Name:填写自定义的项目名称
2.Board:Espressif Esp32 Dev module 选择合适开发版(第一次会很慢,可以科学上网)
3.Framework:Arduino开发框架
4.Location:勾选(用户默认位置),取消勾选(用户自定义位置)

添加u8g2库

添加库

1.选择Libraries
2.在搜索框搜索需要添加的库(如u8g2)
3.点击搜索到的这个库,(可以看到下面支持的设备)

添加库
在这里插入图片描述

选择添加到对应的项目

在这里插入图片描述

添加成功后会显示添加的库

u8g2库的使用

在上一步中成功在项目中添加了u8g2库,我们知道u8g2库是一个功能庞大的库,
里面包含了不同型号,不同尺寸和不同协议(如spi,iic)的的显示屏

找到正确的型号尺寸,选择正确的协议才能成功的驱动屏幕

在main.cpp中添加#include<U8g2lib.h>库
在oled屏幕显示案例

#include <Arduino.h>
#include<U8g2lib.h>
#define clk 18
#define sda 23 
//构造对象
U8G2_SSD1306_128X64_NONAME_F_SW_I2C oled(U8G2_R0,clk,sda,U8X8_PIN_NONE);

void setup() {
//初始化oled对象
  oled.begin();
//开启中文字符
  oled.enableUTF8Print();
//设置字体  
  oled.setFont(u8g2_font_wqy12_t_chinese2);
}

void loop() {
	//清除缓存区
  oled.clearBuffer();
// 绘制字符
  oled.setCursor(0,15);
// 绘制内容
  oled.printf("hello,world!");
// 绘制汉字
  oled.setCursor(0,40);
// 绘制内容
  oled.printf("你好,这个世界");
// 发送缓存区到OLED
  oled.sendBuffer(); 
}


按住ctrl键点击#include<U8g2lib.h>,可以看到u8g2库中封装很多型号的api函数接口,我们如何使用它呢,首先要创建一个对象,不同的型号屏幕对于不同的类我们要如何选择呢,以我使用的屏幕为例,采用SSD1306,采用IIC通信,尺寸大小128*64,即可在#include<U8g2lib.h>中找对应的类
U8G2_SSD1306_128X64_NONAME_F_SW_I2C
U8G2_SSD1306_128X64_NONAME_1_SW_I2C
U8G2_SSD1306_128X64_NONAME_2_SW_I2C
U8G2_SSD1306_128X64_NONAME_F_HW_I2C
U8G2_SSD1306:驱动的芯片
128X64:芯片的尺寸大小
SW:software(软件IIC(可以使用任意GPIO模拟IIC))
HW:硬件IIC
F:全局刷新
1:只存储一页
2:只存储两页

通信描述
缓冲区大小功能描述
1微控制器RAM中仅存储一页显示存储器,使用firstPage () /nextPage ()循环在显示器上绘图。
2与1相同,在微控制器RAM中保留两个页面,这将1比快两倍。
F在微控制器RAM中保留完整显示帧缓冲区的副本。使用clearBuffer ()清除RAM,使用sendBuffer ()将微控制器RAM传输到显示器。}

使用全局刷新要在每次切换页面使用clearBuffer()清除和sendBuffer()将数据发送到oled上

oled.setCursor(0,15);//设置显示的位置,从屏幕的左上角为(0,0)坐标,切记不可超过屏幕的长度

oled全局刷新,按键切换

不同按键显示不同页面

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

#define key1 26
#define key2 27

#define scl 18
#define sda 23
void oled_show_1();
void oled_show_2();
//构造对象
U8G2_SSD1306_128X64_NONAME_F_SW_I2C oled(U8G2_R0,scl,sda,U8X8_PIN_NONE);
uint8_t count = 0;
void setup() {
//串口波特率初始化
  Serial.begin(9600);
//初始化oled对象
  oled.begin();
//开启中文字符
  oled.enableUTF8Print();
//设置字体  
  oled.setFont(u8g2_font_wqy12_t_chinese2);
// 按键引脚初始化
  pinMode(key1,INPUT_PULLUP);
  pinMode(key2,INPUT_PULLUP);
}

void loop() {
  if(digitalRead(key1)==0){
    delay(10);
    if(digitalRead(key1)==0){
      oled_show_1();
      while(digitalRead(key1)==0);
      Serial.printf("A");
    }
  }
  if(digitalRead(key2)==0){
    delay(10);
    if(digitalRead(key2)==0){
      oled_show_2();
      while(digitalRead(key2)==0);
      Serial.printf("B");
    }
  }
 
}
void oled_show_1(){
//清除缓存区
  oled.clearBuffer();
// 绘制字符
  oled.setCursor(0,15);
// 绘制内容
  oled.printf("hello,world!");
// 绘制汉字
  oled.setCursor(0,40);
// 绘制内容
  oled.printf("你好,这个世界");
// 发送缓存区到OLED
  oled.sendBuffer();
  delay(500);
  // Serial.printf("A");

}

void oled_show_2(){
  //清除缓存区
  oled.clearBuffer();
// 绘制字符
  oled.setCursor(0,15);
// 绘制内容
  oled.printf("hello !");
// 绘制汉字
  oled.setCursor(0,40);
// 绘制内容
  oled.printf("你好啊!");
// 发送缓存区到OLED
  oled.sendBuffer();
  delay(500);
  // Serial.printf("A");

}

按下不同按键,显示不同内容,实现页面切换

在这里插入图片描述

在这里插入图片描述

欢迎大家指教

### 回答1: Active Directory服务是种由微软公司开发的网络服务,它提供了种集中管理和控制网络资源的方式。它可以在中集中管理用户、计算机、应用程序和其他网络资源,从而提高了网络的安全性和可管理性。Active Directory服务还提供了些高级功能,如单点登录、组策略管理和名系统(DNS)集成等,使得网络管理员可以更加轻松地管理和维护网络。 ### 回答2: Active Directory服务(Active Directory Domain Services,简称AD DS)是微软公司的项用于管理和组织网络资源的目录服务。它是种基于LDAP(轻量级目录访问协议)的目录服务,可以让用户和管理员方便地管理和访问网络中的资源。 AD DS的主要功能包括用户身份认证、访问控制、组管理和资源管理等。通过AD DS,管理员可以集中管理和配置用户和计算机的访问权限,确保系统安全。同时,AD DS还提供了的集中管理功能,管理员可以通过控制器管理中的所有对象,并在中实施策略。 AD DS还支持单点登录功能,用户只需在登录到之后,即可自动访问到所属中的资源,而无需再次输入用户名和密码。这大大提高了用户的工作效率。 此外,AD DS还支持多架构,可以通过建立信任关系实现跨资源的访问和管理。管理员可以维护多个之间的信任关系,实现用户和资源的统管理。 总而言之,AD DS是种强大的目录服务,可以实现用户和资源的集中管理和访问控制,提高网络系统的稳定性和安全性。它是企业网络管理的重要组成部分,为企业提供了高效的身份认证和资源管理功能,增强了企业的生产力和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值