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)
