下面就是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); } }; 程序设置 程序在运行 #include <Arduino.h> #include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif
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 #ifdef MINI_LOGO
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); #else
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);
#endif }
void drawURL(void) { #ifndef MINI_LOGO 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"); } #endif }
void loop(void) { u8g2.clearBuffer(); drawLogo(); drawURL(); u8g2.sendBuffer(); delay(1000); }
占用情况 #include <MUIU8g2.h> #include <U8g2lib.h> #include <U8x8lib.h>
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:
} 最后给出一个代码的模板。 |
|