Arduino基础入门学习——OLED显示屏的基本使用
一、前言
在我们的日常开发中,一般有这么几种方式对数据进行展示:串口打印、显示屏展示和数据上云平台展示,而本篇文章主要介绍第二种方式,即OLED显示屏的基本使用,从而对数据进行展示。
这里我给出我本篇博客的所写的代码、图片资源及取模软件,大家可以去我的gitee(码云)仓库直接下载(点击前往)。
二、准备工作
硬件:
- Arduino Uno开发板
- 四针脚OLED液晶显示屏模块一个
- 杜邦线若干和面包板一个
软件:
- Arduino IDE(没安装可看我的另一篇博客点击跳转)
- Adafruit_SSD1306芯片支持库(IDE内部自行下载安装即可)
- PCToLCD取模软件(这个我也为大家提前准备好了,点击百度云获取,下载解压出来就能用)
电路图:
三、基本使用
1. OLED显示基本字符 (数字+英文+基本标点符号)
对于数字、英文字母及基本符号的显示,相对来说是比较简单的,直接打印并显示即可。这里我直接给出代码,大家上面的准备工作完成后,直接烧录代码运行即可。
#include <Adafruit_SSD1306.h> //导入SSD1306芯片驱动
Adafruit_SSD1306 OLED(128, 64, &Wire, -1); //定义OLED对象,确定显示屏参数(128x64的显示屏)
void setup() {
OLED.begin(SSD1306_SWITCHCAPVCC, 0x3c); //启动OLED,0x30为OLED显示屏的i2c地址
OLED.setTextColor(WHITE); //设定文本颜色为白色
OLED.setTextSize(1); //设定字体显示大小
OLED.clearDisplay(); //清空显示屏
}
void loop() {
//设定光标位置(x,y)(即字符在OLED的左上角显示位置为第0行第0例的像素块)
OLED.setCursor(0, 0);
OLED.print("123123"); //打印
OLED.setCursor(0, 8);
OLED.print("Hello World!");
OLED.display(); // 输出在显示屏上展示
}
代码烧录完成后,可以在显示屏看到如下结果(如果黑屏,重新拔插一下usb插口即可):
2. OLED显示汉字
对于汉字的显示,OLED没有对应的字库,如果按照上面的基本字符打印输出,在显示屏会显示乱码,因此这种方法行不通。我们都知道OLED显示原理是让指定位置的像素块点亮或者不点亮然后进行排列从而显示我们的字符,因此我们借用取模工具让指定像素块点亮即可显示汉字,下载上面我给的百度云资源并解压,直接打开里面的运行程序。
首先按照我设定进行设置:
设定字体及大小:
输入我们要显示的字体并生成字模:
然后复制下面所生成的16进制代码,回到Arduino项目工程文件夹,这里新建一个.h文件(你也可以不用新建这个文件,采用直接粘贴你的代码中然后改写也可以,我是为了让代码不那么臃肿)
改写完后保存并回答我们的Arduino程序中,引入刚才的新建的头文件(也可以将上面改写完成后的内容直接粘贴到代码当中,就不用该步骤)。
然后可以开始我们的代码编写了。
#include <Adafruit_SSD1306.h> //导入SSD1306芯片驱动
#include "font.h"
Adafruit_SSD1306 OLED(128, 64, &Wire, -1); //定义OLED对象,确定显示屏参数(128x64的显示屏)
void setup() {
OLED.begin(SSD1306_SWITCHCAPVCC, 0x3c); //启动OLED,0x30为OLED显示屏的i2c地址
OLED.setTextColor(WHITE); //设定文本颜色为白色
OLED.setTextSize(1); //设定字体显示大小
OLED.clearDisplay(); //清空显示屏
}
void loop() {
// 绘制字符(x, y, 字体数组,字体宽度,字体高度,字体颜色)
OLED.drawBitmap(0, 0, ni, 16, 16, WHITE);
OLED.drawBitmap(16, 0, hao, 16, 16, WHITE);
OLED.drawBitmap(32, 0, shi, 16, 16, WHITE);
OLED.drawBitmap(48, 0, jie, 16, 16, WHITE);
OLED.display(); // 输出在显示屏上展示
}
代码下载完成运行后可以看到显示屏结果。
3. 显示图片
图片的显示跟汉字显示类似,也是取模,这里给大家介绍另外的取模工具,打开这个网站(点击跳转),可以进入到这个界面,我们选择我们要显示的图片,然后打开。
往下拉,输入画布尺寸,我们的显示屏是128x64像素的,然后让图片自适应画布,然后在下面就可以看到我们生成的图片预览了。
然后选定输出格式为Arduino code格式,以及变量名(我这里图片名为kun然后输入kun,最后生成的变量名会为kunkun)。
然后生成代码,ctrl+a全选下面的代码复制。
这里我直接粘贴进代码里面(你也可以粘贴至上面的font.h文件当中,然后按照汉字显示的方式进行展示),然后下面就是我的代码了。
#include <Adafruit_SSD1306.h> //导入SSD1306芯片驱动
Adafruit_SSD1306 OLED(128, 64, &Wire, -1); //定义OLED对象,确定显示屏参数(128x64的显示屏)
// 'kun', 128x64px
const unsigned char kunkun [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0xff, 0xfc, 0x00, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8, 0xff, 0xf8, 0x00, 0x7f, 0x80, 0x7f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf1, 0xfc, 0x7f, 0xf9, 0x1e, 0x7f, 0x0e, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf3, 0xfe, 0x3f, 0xf1, 0xfe, 0x7e, 0x1f, 0x1f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0x1c, 0x00, 0x00, 0x7c, 0x3f, 0x9f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0x80, 0x00, 0x00, 0x08, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xc0, 0xff, 0xfe, 0x00, 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xe7, 0xff, 0xff, 0xc1, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xc0, 0x00, 0x1f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xfe, 0x01, 0xfc, 0x07, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, 0x3f, 0xff, 0xc1, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xf0, 0xff, 0xff, 0xf0, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xe3, 0xff, 0xff, 0xfc, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xc7, 0x80, 0xff, 0xfe, 0x3c, 0x7f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0x8e, 0x00, 0x3f, 0x80, 0x1e, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0x9c, 0x3f, 0x1e, 0x00, 0x1f, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0x18, 0xff, 0x8c, 0x7f, 0x8f, 0x1f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0x31, 0xff, 0xc0, 0xff, 0xc7, 0x9f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf1, 0xfe, 0x63, 0xff, 0xe1, 0xff, 0xe7, 0x8f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf3, 0xfc, 0x67, 0xfc, 0x23, 0xf8, 0x63, 0xcf, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xe3, 0xfc, 0xe7, 0xf8, 0x13, 0xf0, 0x33, 0xcf, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xe7, 0xf8, 0xcf, 0xf8, 0x13, 0xf0, 0x31, 0xc7, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xc7, 0xf9