esp-open-rtos/extras/ssd1306
2020-06-19 16:47:08 +05:00
..
component.mk Add SPI3 SUPPORT preprocessor macro to CFLAGS 2018-06-05 16:17:26 -04:00
config.h SPI3 support ssd1306 (#309) 2016-12-29 19:42:43 +05:00
LICENSE Driver and example for SSD1306 128x64 I2C display (#254) 2016-10-28 15:08:37 +03:00
README.md Code formatted, minor fixes (#466) 2017-10-18 21:25:48 +02:00
ssd1306.c Merge pull request #748 from 0x0aa/optimize-ssd1306-fill-rectangle 2020-06-19 16:47:08 +05:00
ssd1306.h Fix compiler warnings over const losses. 2019-04-06 11:39:29 +11:00

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