33 #include "freertos/FreeRTOS.h"
34 #include "freertos/task.h"
36 #include "driver/spi_master.h"
37 #include "driver/gpio.h"
42 #define tag CONFIG_SSD1306_SPI_TAG
44 #ifdef CONFIG_IDF_TARGET_ESP32
45 #define LCD_HOST HSPI_HOST
47 #elif defined CONFIG_IDF_TARGET_ESP32S2
48 #define LCD_HOST SPI2_HOST
49 #define DMA_CHAN LCD_HOST
52 static const int SPI_Command_Mode = 0;
53 static const int SPI_Data_Mode = 1;
54 static const int SPI_Frequency = 1000000;
69 gpio_pad_select_gpio(GPIO_CS);
70 gpio_set_direction(GPIO_CS, GPIO_MODE_OUTPUT);
71 gpio_set_level(GPIO_CS, 0);
73 gpio_pad_select_gpio(GPIO_DC);
74 gpio_set_direction(GPIO_DC, GPIO_MODE_OUTPUT);
75 gpio_set_level(GPIO_DC, 0);
79 gpio_pad_select_gpio(GPIO_RESET);
80 gpio_set_direction(GPIO_RESET, GPIO_MODE_OUTPUT);
81 gpio_set_level(GPIO_RESET, 0);
82 vTaskDelay(pdMS_TO_TICKS(100));
83 gpio_set_level(GPIO_RESET, 1);
86 spi_bus_config_t spi_bus_config = {
87 .sclk_io_num = GPIO_SCLK,
88 .mosi_io_num = GPIO_MOSI,
93 ret = spi_bus_initialize(LCD_HOST, &spi_bus_config, DMA_CHAN);
94 ESP_LOGI(
tag,
"spi_bus_initialize=%d", ret);
95 assert(ret == ESP_OK);
97 spi_device_interface_config_t devcfg;
98 memset(&devcfg, 0,
sizeof(spi_device_interface_config_t));
99 devcfg.clock_speed_hz = SPI_Frequency;
100 devcfg.spics_io_num = GPIO_CS;
101 devcfg.queue_size = 1;
103 spi_device_handle_t handle;
104 ret = spi_bus_add_device(LCD_HOST, &devcfg, &handle);
105 ESP_LOGI(
tag,
"spi_bus_add_device=%d", ret);
106 assert(ret == ESP_OK);
121 spi_transaction_t SPITransaction;
125 memset(&SPITransaction, 0,
sizeof(spi_transaction_t));
126 SPITransaction.length = DataLength * 8;
127 SPITransaction.tx_buffer = Data;
128 spi_device_transmit(SPIHandle, &SPITransaction);
141 static uint8_t CommandByte = 0;
142 CommandByte = Command;
143 gpio_set_level(
dev->
_dc, SPI_Command_Mode);
155 gpio_set_level(
dev->
_dc, SPI_Data_Mode);
233 int _seg = seg + CONFIG_OFFSETX;
234 uint8_t columLow = _seg & 0x0F;
235 uint8_t columHigh = (_seg >> 4) & 0x0F;
260 int _contrast = contrast;
SSD1306_t dev
device for oled
defininitions for setting up, interacting with and sending commands to an ssd1306 driven screen via i...
#define OLED_CMD_SET_DISPLAY_OFFSET
#define OLED_CMD_ACTIVE_SCROLL
#define OLED_CMD_SET_CHARGE_PUMP
#define OLED_CMD_DISPLAY_ON
#define OLED_CMD_DISPLAY_OFF
#define OLED_CMD_SET_MUX_RATIO
#define OLED_CMD_DISPLAY_NORMAL
#define OLED_CMD_SET_SEGMENT_REMAP_0
#define OLED_CMD_SET_SEGMENT_REMAP_1
#define OLED_CMD_SET_COM_PIN_MAP
#define OLED_CMD_HORIZONTAL_LEFT
#define OLED_CMD_SET_CONTRAST
#define OLED_CONTROL_BYTE_DATA_STREAM
#define OLED_CMD_SET_COM_SCAN_MODE
#define OLED_CMD_HORIZONTAL_RIGHT
#define OLED_CMD_SET_DISPLAY_CLK_DIV
#define OLED_CMD_SET_PAGE_ADDR_MODE
#define OLED_CMD_DISPLAY_RAM
#define OLED_CMD_DEACTIVE_SCROLL
#define OLED_CMD_VERTICAL
#define OLED_CMD_SET_VCOMH_DESELCT
#define OLED_CMD_SET_MEMORY_ADDR_MODE
#define OLED_CMD_CONTINUOUS_SCROLL
void spi_hardware_scroll(SSD1306_t *dev, ssd1306_scroll_type_t scroll)
void spi_display_image(SSD1306_t *dev, int page, int seg, uint8_t *images, int width)
void spi_master_init(SSD1306_t *dev, int16_t GPIO_MOSI, int16_t GPIO_SCLK, int16_t GPIO_CS, int16_t GPIO_DC, int16_t GPIO_RESET)
bool spi_master_write_data(SSD1306_t *dev, const uint8_t *Data, size_t DataLength)
bool spi_master_write_command(SSD1306_t *dev, uint8_t Command)
void spi_hardware_scroll_line(SSD1306_t *dev, int page, ssd1306_scroll_type_t scroll)
void spi_init(SSD1306_t *dev, int width, int height)
void spi_contrast(SSD1306_t *dev, int contrast)
bool spi_master_write_byte(spi_device_handle_t SPIHandle, const uint8_t *Data, size_t DataLength)
#define tag
tag for logging library
spi_device_handle_t _SPIHandle