分享

ESP32使用u8g2显示库(SSD1306驱动)

 云深无际 2021-11-03

下面就是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:
}

最后给出一个代码的模板。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多