# Driver for SSD1306/SH1106 OLED LCD This driver is written for usage with the ESP8266 and FreeRTOS ([esp-open-rtos](https://github.com/SuperHouse/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 ```C #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 ```C #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 ```C #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 ```