我先说自己的研究情况,第一代的库在ESP32的芯片上面编译会爆空间不够。二代没有这个毛病,所以我接下来都是使用的二代的库。
下面就是GitHub的库。
我用的主控是穷逼尊享版之ESP32
这个型号
https://github.com/olikraus/u8g2/
先说明白,嫌我话多的,自己去看官网。
这个库下载后在C盘的文档
这篇文章不想说什么原理,做个什么厉害的东西。只是想驱动这个屏幕而已。
两个难点,一是如何选择适合自己屏幕和板子的注释行:
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display
就是这个。
剩下就是ESP32 的硬件IIC的接口。
关于接口这个事情,我这里直接给出结论,如果好奇的话,可以去看源码。
https://blog.csdn.net/quangui666/article/details/81483645
也可以看这个博文,老哥好辛苦,我心疼他0.0000001s(有点憨)
就是这样了
接线情况
使用这个demo做实验
结果
接下来是文章的重点,这么多的平面型号,选哪个?
??????
如果未连接复位引脚,则使用 U8X8_PIN_NONE,就是你就接了4个脚的时候,选择这个。
因为我们的芯片是SSD1306,然后使用ESP32的硬件IIC实现:
那就是选择第二个了
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2
(U8G2_R0,
/* clock=*/ SCL,
/* data=*/ SDA,
/* reset=*/ U8X8_PIN_NONE); // 没有重置显示的所有板
这个就是我们默认的IIC的接口
里面也有一个这个
这是上面R0参数的意思
引脚的参数,我们IIC就是数据和时钟
class U8G2_SSD1306_128X64_NONAME_F_SW_I2C : public U8G2 {
public: U8G2_SSD1306_128X64_NONAME_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() {
u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino);
u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset);
}
};
程序设置
程序在运行
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/SCL, /* data=*/SDA, /* reset=*/U8X8_PIN_NONE); // All Boards without Reset of the Display
void setup(void)
{
pinMode(9, OUTPUT);
digitalWrite(9, 0); // default output in I2C mode for the SSD1306 test shield: set the i2c adr to 0
u8g2.begin();
}
void drawLogo(void)
{
u8g2.setFontMode(1); // Transparent
u8g2.setFontDirection(0);
u8g2.setFont(u8g2_font_inb16_mf);
u8g2.drawStr(0, 22, "U");
u8g2.setFontDirection(1);
u8g2.setFont(u8g2_font_inb19_mn);
u8g2.drawStr(14, 8, "8");
u8g2.setFontDirection(0);
u8g2.setFont(u8g2_font_inb16_mf);
u8g2.drawStr(36, 22, "g");
u8g2.drawStr(48, 22, "\xb2");
u8g2.drawHLine(2, 25, 34);
u8g2.drawHLine(3, 26, 34);
u8g2.drawVLine(32, 22, 12);
u8g2.drawVLine(33, 23, 12);
u8g2.setFontDirection(0);
u8g2.setFont(u8g2_font_inb24_mf);
u8g2.drawStr(0, 30, "U");
u8g2.setFontDirection(1);
u8g2.setFont(u8g2_font_inb30_mn);
u8g2.drawStr(21, 8, "8");
u8g2.setFontDirection(0);
u8g2.setFont(u8g2_font_inb24_mf);
u8g2.drawStr(51, 30, "g");
u8g2.drawStr(67, 30, "\xb2");
u8g2.drawHLine(2, 35, 47);
u8g2.drawHLine(3, 36, 47);
u8g2.drawVLine(45, 32, 12);
u8g2.drawVLine(46, 33, 12);
}
void drawURL(void)
{
u8g2.setFont(u8g2_font_4x6_tr);
if (u8g2.getDisplayHeight() < 59)
{
u8g2.drawStr(89, 20, "github.com");
u8g2.drawStr(73, 29, "/olikraus/u8g2");
}
else
{
u8g2.drawStr(1, 54, "github.com/olikraus/u8g2");
}
}
void loop(void)
{
u8g2.clearBuffer();
drawLogo();
drawURL();
u8g2.sendBuffer();
delay(1000);
}
占用情况
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, SCL, SDA,U8X8_PIN_NONE);
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
最后给出一个代码的模板。