OLED屏幕SSD1306芯片(杂文)
https://wiki.dfrobot.com.cn/_SKU_DFR0486_Gravity_I2C_OLED-2864%E6%98%BE%E7%A4%BA%E5%B1%8F
屏幕是Dfrobot家的,质量真好。
长这样
工作电压:3.3V~5V
显示颜色:蓝色
像素个数:128列 × 64行
接口方式:Gravity-I2C
刷屏速率:60帧/秒
亮度:60 (Typ) cd/m2
全屏点亮功耗:约22.75mA
工作温度:-30℃~+70℃
显示面积:21.744 × 10.864(mm)
模块尺寸:41.20 × 26.20 (mm)
安装孔尺寸:35 x 20 (mm)
模块重量:15克
128x64的分辨率
IIC的接口
VCC:3V3~5V电源输入
GND:电源地
SCL:I2C时钟线
SDA:I2C数据线
我们知道了,屏幕是128x64的分辨率,芯片是SD1306,3.3V~5V的电压都可以。那接下来就驱动它。
Arduino里面搜索关键词安装一下,lib是一代,2是二代
我这里全点了
找个demo跑一下
里面的函数
https://github.com/olikraus/u8g2
二代库的位置
第一点的事情是对于屏幕的初始化,SPI和I2C的连接。
https://github.com/olikraus/u8g2/wiki/u8x8setupcpp
初始化的构造方法在这里
#include <Arduino.h>
#include <SPI.h>
#include <U8x8lib.h>
/* Constructor */
U8X8_SSD1306_128X64_NONAME_4W_SW_SPI u8x8(/* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
/* u8x8.begin() is required and will sent the setup/init sequence to the display */
void setup(void)
{
u8x8.begin();
}
void loop(void)
{
u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.drawString(0,0,"Hello World!");
delay(1000);
}
构造参数的意思,
下面看一代的库
https://github.com/olikraus/u8glib/wiki/device#ssd1306-128x64
选择I2C
如果使用硬件I2C,就不是IO口模拟的协议,还支持这两个
打开一个demo就是会显示这些,对应的连接芯片
#include "U8glib.h"
// setup u8g object, please remove comment from one of the following constructor calls
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
// devices with all constructor calls is here: https://github.com/olikraus/u8glib/wiki/device
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); // I2C / TWI
void drawColorBox(void)
{
u8g_uint_t w, h;
u8g_uint_t r, g, b;
w = u8g.getWidth() / 32;
h = u8g.getHeight() / 8;
for (b = 0; b < 4; b++)
for (g = 0; g < 8; g++)
for (r = 0; r < 8; r++)
{
u8g.setColorIndex((r << 5) | (g << 2) | b);
u8g.drawBox(g * w + b * w * 8, r * h, w, h);
}
}
void drawLogo(uint8_t d)
{
#ifdef MINI_LOGO
u8g.setFont(u8g_font_gdr17r);
u8g.drawStr(0 + d, 22 + d, "U");
u8g.setFont(u8g_font_gdr20n);
u8g.drawStr90(17 + d, 8 + d, "8");
u8g.setFont(u8g_font_gdr17r);
u8g.drawStr(39 + d, 22 + d, "g");
u8g.drawHLine(2 + d, 25 + d, 34);
u8g.drawVLine(32 + d, 22 + d, 12);
#else
u8g.setFont(u8g_font_gdr25r);
u8g.drawStr(0 + d, 30 + d, "U");
u8g.setFont(u8g_font_gdr30n);
u8g.drawStr90(23 + d, 10 + d, "8");
u8g.setFont(u8g_font_gdr25r);
u8g.drawStr(53 + d, 30 + d, "g");
u8g.drawHLine(2 + d, 35 + d, 47);
u8g.drawVLine(45 + d, 32 + d, 12);
#endif
}
void drawURL(void)
{
#ifndef MINI_LOGO
u8g.setFont(u8g_font_4x6);
if (u8g.getHeight() < 59)
{
u8g.drawStr(53, 9, "code.google.com");
u8g.drawStr(77, 18, "/p/u8glib");
}
else
{
u8g.drawStr(1, 54, "code.google.com/p/u8glib");
}
#endif
}
void draw(void)
{
if (u8g.getMode() == U8G_MODE_R3G3B2)
{
drawColorBox();
}
u8g.setColorIndex(1);
if (U8G_MODE_GET_BITS_PER_PIXEL(u8g.getMode()) > 1)
{
drawLogo(2);
u8g.setColorIndex(2);
drawLogo(1);
u8g.setColorIndex(3);
}
drawLogo(0);
drawURL();
}
void setup(void)
{
// flip screen, if required
//u8g.setRot180();
}
void loop(void)
{
// picture loop
u8g.firstPage();
do
{
draw();
u8g.setColorIndex(1);
} while (u8g.nextPage());
// rebuild the picture after some delay
delay(200);
}
最后代码是这样的
在这里我也找到了上面初始化的意思
https://www.jianshu.com/p/35e185051aa7
这个是我看到的一个思维导图,地址在后面。
赞 (0)