使用Arduino驱动OLED显示屏:一个简单的指南

使用Arduino驱动SSD1306 OLED 显示屏工作

1、准备工作

1.1)Arduino中库的载入

#include <Adafruit_SSD1306.h>驱动128×64 and 128×32 的屏幕显示的库
#include <Adafruit_GFX.h>//Arduino的图形库
可以在arduino管理库中搜索下载,也可以自己下载库导入到arduino的libraries文件夹中。

1.2)接线

在这里使用的是arduino UNO开发板和OLED 0.96 IIC 128×64模块

Arduino SSD1306
3.3V VCC
GND GND
A4 SDA
A5 SCL

图片来源于太极创客网站

2、程序代码

2.1)文字取模

取模的软件使用的是太极创客给出的取模软件,页面如下

参数设置如网页设置即可。跳转太极创客Arduino驱动OLED屏幕

2.2)Arduino程序

#include <Adafruit_SSD1306.h>驱动128x64 and 128x32 的屏幕显示的库
#include <Adafruit_GFX.h>//Arduino的图形库
#include <Wire.h>
#include <SPI.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)

#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup()
{
  Serial.begin(9600);
  Serial.println("OLED FeatherWing test");//串口输出信息
  
  display.begin(SSD1306_SWITCHCAPVCC, 0x3c);//初始化OLED并设置其IIC地址为 0x3C
  display.clearDisplay();//清屏
  delay(200);

  display.setTextSize(1.3);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0,0);//设置光标的位置

//绘制像素点
//  display.drawPixel(64, 32, WHITE);//(x坐标,y坐标,颜色)

//绘制水平线
//  display.drawFastHLine(64,32,64,SSD1306_WHITE);//(x起点,y起点,长度,颜色)
//绘制竖直线
// display.drawFastVLine(64,10,50,SSD1306_WHITE);

 //绘制线
// display.drawLine(0,0,128,64,SSD1306_WHITE);//(x起,y起,x终,y终)

//绘制空心矩形
// display.drawRect(0,0,128,64,SSD1306_WHITE);//(左上角x坐标,左上角y坐标,矩形长,矩形宽)

//绘制实心矩形
//display.fillRect(20,10,88,44,SSD1306_WHITE);//同上

//点亮全屏
//  display.fillScreen(SSD1306_WHITE);

//绘制空心圆
//display.drawCircle(64,32,32,SSD1306_WHITE);//(圆心x坐标,圆心y坐标,半径)

//绘制实心圆
//display.fillCircle(64,32,31,SSD1306_WHITE);

//绘制空心三角形
//display.drawTriangle(63,0, 0,63, 127,63, SSD1306_WHITE);//(第一顶点坐标[x,y],第二,第三)

//绘制实心三角形
//display.fillTriangle(63,0, 0,63, 127,63, SSD1306_WHITE);

//绘制空心圆角矩形
//display.drawRoundRect(10,5,107, 43,8, SSD1306_WHITE);//(左上角x,左上角y,矩形长,矩形宽,矩形圆角半径)

//实心圆角
//display.fillRoundRect(10,5,107,53,3, SSD1306_WHITE);

//绘制Bitmap图像
//Bimap图像数据


static const unsigned char PROGMEM feng_16x16[]={
0x00,0x00,0x00,0x00,0x04,0x40,0x04,0x40,0x08,0x80,0x08,0xBC,0x19,0x48,0x2A,0x60,
0x48,0x20,0x09,0x20,0x0A,0x2C,0x0A,0x24,0x08,0x20,0x08,0xE0,0x00,0x40,0x00,0x00,/*"你",0*/
0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x7C,0x08,0x08,0x0A,0x30,0x0A,0x20,0x76,0x3E,
0x13,0xD0,0x0C,0x10,0x04,0x10,0x0A,0x10,0x10,0x10,0x00,0x60,0x00,0x20,0x00,0x00,/*"好",1*/
};

static const unsigned char PROGMEM ni_16x16[]={
0x00,0x00,0x00,0x00,0x04,0x40,0x04,0x40,0x08,0x80,0x08,0xBC,0x19,0x48,0x2A,0x60,
0x48,0x20,0x09,0x20,0x0A,0x2C,0x0A,0x24,0x08,0x20,0x08,0xE0,0x00,0x40,0x00,0x00,/*"你",0*/
};
static const unsigned char PROGMEM hao_16x16[]={
0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x7C,0x08,0x08,0x0A,0x30,0x0A,0x20,0x76,0x3E,
0x13,0xD0,0x0C,0x10,0x04,0x10,0x0A,0x10,0x10,0x10,0x00,0x60,0x00,0x20,0x00,0x00,/*"好",1*/
};

//对图片进行取模
static const unsigned char PROGMEM hand_128x64[] = { 
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,
 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x07,0xFC,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,
 0x00,0x00,0x7C,0x1F,0x0F,0xBF,0xFE,0x7C,0x07,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
 0x00,0x00,0xFC,0x1F,0x0F,0xBF,0xFE,0x7C,0x03,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,
 0x00,0x00,0xFC,0x1F,0x0F,0x3F,0xFE,0xFC,0x00,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,
 0x00,0x01,0xFC,0x3F,0x1F,0x7F,0xFC,0xFC,0x00,0x7F,0xFF,0xFF,0x00,0x00,0x00,0x00,
 0x00,0x03,0xFC,0x3F,0x1F,0x07,0xC1,0xFC,0x00,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x00,
 0x00,0x03,0xF8,0x3F,0x1E,0x07,0xC3,0xFC,0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x00,0x00,
 0x00,0x07,0xF8,0x7F,0xBE,0x0F,0x83,0xFC,0x00,0x03,0xFF,0xFF,0xE0,0x00,0x00,0x00,
 0x00,0x0F,0x78,0x7F,0xBE,0x0F,0x87,0xBC,0x00,0x01,0xFF,0xFF,0xF0,0x00,0x00,0x00,
 0x00,0x0F,0x78,0xFF,0xBC,0x0F,0x0F,0x3C,0x00,0x00,0x7F,0xFF,0xF8,0x00,0x00,0x00,
 0x00,0x1E,0x78,0xFF,0xFC,0x1F,0x0F,0x7C,0x00,0x00,0x3F,0xFF,0xF0,0x00,0x00,0x00,
 0x00,0x3E,0x78,0xF7,0xFC,0x1F,0x1E,0x7C,0x00,0x00,0x1F,0xFF,0xE0,0x00,0x00,0x00,
 0x00,0x3C,0xF9,0xF7,0xF8,0x1E,0x3E,0x7C,0x00,0x00,0x0F,0xFF,0xC0,0x00,0x00,0x00,
 0x00,0x7F,0xF9,0xF3,0xF8,0x3E,0x3F,0xFC,0x00,0x00,0x03,0xFF,0x80,0x00,0x00,0x00,
 0x00,0xFF,0xF9,0xE3,0xF8,0x3E,0x7F,0xFC,0x00,0x00,0x01,0xFF,0x00,0x00,0x00,0x00,
 0x00,0xFF,0xFB,0xE3,0xF0,0x3C,0xFF,0xFC,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,
 0x01,0xF0,0xFB,0xE3,0xF0,0x7C,0xF0,0x78,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,
 0x03,0xE0,0xFF,0xC3,0xE0,0x7D,0xF0,0x78,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 };



//显示Bimap图像
// display.drawBitmap(0,0, feng_16x16,16,32,WHITE);//(左上角x坐标,左上角y坐标,图形数据,图形长,图形宽)
//至于文字为什么竖着排列,目前还没有弄清楚

  display.drawBitmap(20,0, ni_16x16,16,16,WHITE);
  display.drawBitmap(40,0, hao_16x16,16,16,WHITE);//成功显示并排“你好”两字
 
  display.drawBitmap(0,0,hand_128x64,128,64,SSD1306_WHITE);//成功显示出安踏logo

//显示英文字母与数字
//  display.print("Connecting to SSID\n'adafruit':");
//  display.print("connected!");
//  display.println("IP: 10.0.1.23");
//  display.println("good morning!");


  display.display(); // actually display all of the above
  delay(2000);
  }

 void loop()
 {
  }

3、效果展示



最后,给与图片取模时需要注意以下内容。
找到想要取模的图片,然后使用window自带的图画软件打开,修改好像素大小后,另存为BMP格式照片,然后在文件类型选择单色位图,如下图所示。这样的照片就可以使用取模软件成功取模啦!(本人苦苦使用ps,总是不成功都傻了,也不知道为什么不能用ps编辑图片)

参考内容:
Adafruit_SSD1306库学习
太极创客网站

物联沃分享整理
物联沃-IOTWORD物联网 » 使用Arduino驱动OLED显示屏:一个简单的指南

发表评论