This driver is written for usage with the ESP8266 and FreeRTOS (esp-open-rtos).
- 128x64
- 128x32
- 128x16
- 96x16
I2C, SPI3 and SPI4.
If Reset pin is accesible in your display module, connect it to the RESET pin of ESP8266. If you don't, display RAM could be glitchy after the power cycle.
Before using the OLED module you need to call the function i2c_init(BUS, SCL_PIN, SDA_PIN, I2C_FREQ_400K)
to configure the I2C interface and then you should call ssd1306_init()
.
#define SCL_PIN 5
#define SDA_PIN 4
#define I2C_BUS 0
...
static const ssd1306_t device = {
.protocol = SSD1306_PROTO_I2C,
.screen = SSD1306_SCREEN, // or SH1106_SCREEN
.i2c_dev.bus = I2C_BUS,
.i2c_dev.addr = SSD1306_I2C_ADDR_0,
.width = 128,
.height = 64
};
...
i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_400K);
if (ssd1306_init(&device)) {
// An error occured, while performing SSD1306 init (E.g device not found etc.)
}
// rest of the code
These protocols are MUCH faster than I2C, but use 2 additional GPIO pins (besides the HSPI CLK and HSPI MOSI): Chip Select and Data/Command (in case of SPI4).
No additional function calls are required before ssd1306_init()
.
#define CS_PIN 5
#define DC_PIN 4
...
static const ssd1306_t device = {
.protocol = SSD1306_PROTO_SPI4,
.screen = SSD1306_SCREEN,
.cs_pin = CS_PIN,
.dc_pin = DC_PIN,
.width = 128,
.height = 64
};
...
if (ssd1306_init(&device)) {
// An error occured, while performing SSD1306 init
}
// rest of the code
#define CS_PIN 5
...
static const ssd1306_t device = {
.protocol = SSD1306_PROTO_SPI3,
.screen = SSD1306_SCREEN,
.cs_pin = CS_PIN,
.width = 128,
.height = 64
};
...
if (ssd1306_init(&device)) {
// An error occured, while performing SSD1306 init
}
// rest of the code