.. | ||
component.mk | ||
config.h | ||
LICENSE | ||
README.md | ||
ssd1306.c | ||
ssd1306.h |
Driver for SSD1306/SH1106 OLED LCD
This driver is written for usage with the ESP8266 and FreeRTOS (esp-open-rtos).
Supported display sizes
- 128x64
- 128x32
- 128x16
- 96x16
Supported connection interfaces
I2C, SPI3 and SPI4.
Usage
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.
I2C protocol
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()
.
Example
#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
SPI3 and SPI4 protocols
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()
.
SPI4 Example
#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
SPI3 example
#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