(一)简介
0.96寸OLED显示屏是一种小型的显示设备,常用于电子项目中。它采用IIC(I2C)通信协议进行数据传输,具有低功耗、高对比度的优点。该显示屏的分辨率为128x64,支持多种显示方式,如文字、图形等。其驱动芯片通常为SSD1306,可以灵活控制屏幕的亮度、对比度等参数。
屏幕参数
工作电压: 3.3V
工作电流: 9MA
模块尺寸: 27.3 x 27.8 MM
像素大小: 128(H) x 64(V)RGB
驱动芯片: SSD1306
通信协议: IIC
管脚数量: 4 Pin(2.54mm间距排针)
(二)库文件
U8G2库
项目地址:https://github.com/olikraus/u8g2
U8g2库是一个用于嵌入式设备的单色图形库,全称为“Universal 8bit Graphics Library version2”,由Oliver Kraus开发,专门为微控制器设计,用于驱动各种单色LCD和OLED显示屏。以下是对Arduino U8g2库的详细介绍,包括其主要函数:
一、U8g2库特点
- 跨平台性:U8g2可以在不同的微控制器平台上运行,如Arduino、STM32、ESP32/ESP8266等。
- 多种显示支持:支持多种单色显示设备,包括LCD和OLED。
- 字体支持:U8g2内置了多种字体,包括不同大小的字体和特殊字体(包括中文)。
- 易用性:U8g2的API设计简单易用,方便开发者快速上手。
- 低内存占用:U8g2在设计中考虑到了嵌入式设备的资源限制,尽量减少了内存的使用。
- 开源:U8g2是开源的,可以自由使用和修改。
二、U8g2库函数
U8g2库提供了丰富的API,用于控制各种显示器并在屏幕上绘制文本、图形等元素。以下是一些常用的函数:
- 初始化函数
- u8g2_Setup():根据具体的显示设备和配置,初始化U8g2对象。例如,u8g2_Setup_ssd1306_i2c_128x64_noname_f()用于初始化SSD1306 OLED显示屏。
- u8g2.begin() 或 u8g2.beginSimple():构造U8G2对象,并初始化显示控制器。
- 显示控制函数
- u8g2.initDisplay():初始化显示控制器,写入关键显示参数。
- u8g2.clearDisplay():清除屏幕内容。
- u8g2.setPowerSave():开启或关闭省电模式。
- u8g2.clearBuffer():清除缓冲区,但不清除屏幕。通常与u8g2.sendBuffer()配对使用,以刷新显示。
- 绘制函数
- u8g2.drawBox():绘制实心方形。
- u8g2.drawCircle():绘制空心圆。
- u8g2.drawDisc():绘制实心圆。
- u8g2.drawEllipse():绘制空心椭圆。
- u8g2.drawFilledEllipse():绘制实心椭圆。
- u8g2.drawFrame():绘制空心方形(矩形框)。
- u8g2.drawGlyph():绘制字体字集的符号。
- u8g2.drawHLine():绘制水平线。
- u8g2.drawLine():在两点之间绘制直线。
- u8g2.drawPixel():绘制像素点。
- u8g2.drawRBox():绘制圆角实心方形。
- u8g2.drawRFrame():绘制圆角空心方形。
- u8g2.drawStr():在指定位置绘制字符串。
- u8g2.drawTriangle():绘制实心三角形。
- u8g2.drawUTF8():绘制UTF8编码的字符(可显示汉字)。
- u8g2.drawVLine():绘制竖直线。
- u8g2.drawXBM()/drawXBMP():绘制XBM格式的图像。
- 显示配置函数
- u8g2.setFont():设置当前使用的字体。
- u8g2.setDisplayRotation():设置显示器的旋转角度。
- u8g2.setAutoPageClear():设置是否自动清除缓冲区。
- u8g2.setBitmapMode():设置位图模式。
- u8g2.setCursor():设置绘制光标位置。
- u8g2.setDrawColor():设置绘制颜色(对于单色显示屏,通常只支持黑白两种颜色)。
- 其他函数
- u8g2.disableUTF8Print():禁用UTF8打印功能。
- u8g2.enableUTF8Print():启用UTF8打印功能。
- u8g2.home():重置显示光标的位置到原点(0,0)。
- u8g2.firstPage()/u8g2.nextPage():用于分页绘制大型图像或图形时的控制函数。
- u8g2.sendBuffer():将缓冲区的内容发送到屏幕,以刷新显示。
- u8g2.getBufferPtr():获取缓存空间的地址。
- u8g2.getDisplayHeight()/u8g2.getDisplayWidth():获取显示器的高度和宽度。
(三)程序
①先引入标准的arduino库,还有u8g2库,wire库是iic通信库,配合u8g2用的
- #include <Arduino.h>
- #include <U8g2lib.h>
- #include <Wire.h>
②定义宏BOARD_I2C_SCL为A5,BOARD_I2C_SDA为A4
因为arduino uno内A5为SCL,A4为SDA
声明u8g2库,NONAME_F_SW_I2C为软件模拟,也可以用硬件模拟
U8G2_R0为不旋转屏幕
clock设置SCL引脚A5,data设置SDA引脚A4
复位功能为U8X8_PIN_NONE,不使用
- #define BOARD_I2C_SCL A5
- #define BOARD_I2C_SDA A4
- U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ BOARD_I2C_SCL, /* data=*/ BOARD_I2C_SDA, /* reset=*/ U8X8_PIN_NONE);
③初始化函数
设置波特率为115200,同时输出一条测试信息
u8g2开始初始化
u8g2设置u8g2_font_ncenB08_tr字体
(u8g2内置非常多字体,具体到GitHub查看)
- void setup() {
- Serial.begin(115200);
- Serial.println("Init u8g2 ....");
- u8g2.begin();
- u8g2.setFont(u8g2_font_ncenB08_tr); //设置字体
- delay(100);
- }
④循环函数
将屏幕的缓存区清空
在屏幕10,10的位置上,输出“good”,并将此数据上传到缓存区显示
- void loop() {
- u8g2.clearBuffer(); //清除缓存
- Serial.println("u8g2 showing chars ....");
- u8g2.setCursor (10, 10);
- u8g2.println("good");
- u8g2.sendBuffer();
- delay(1000);
- }
⑤实验现象
⑥完整代码
- #include <Arduino.h>
- #include <U8g2lib.h>
- #include <Wire.h>
- #define BOARD_I2C_SCL A5
- #define BOARD_I2C_SDA A4
- U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ BOARD_I2C_SCL, /* data=*/ BOARD_I2C_SDA, /* reset=*/ U8X8_PIN_NONE);
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(115200);
- Serial.println("Init u8g2 ....");
- u8g2.begin();
- u8g2.setFont(u8g2_font_ncenB08_tr); //设置字体
- delay(100);
- }
- void loop() {
- u8g2.clearBuffer(); //清除缓存
- Serial.println("u8g2 showing chars ....");
- u8g2.setCursor (10, 10);
- u8g2.println("good");
- u8g2.sendBuffer();
- delay(1000);
- }
-