使用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库学习
太极创客网站