123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #include "ssd1306.h"
- #include "esp_log.h"
- #include "driver/gpio.h"
- #include "driver/i2c.h"
- #include <driver/gpio.h>
- #include "freertos/FreeRTOS.h"
- #include "freertos/task.h"
- #include "freertos/queue.h"
- #include "freertos/task.h"
- #include "config.h"
- #ifdef ENABLE_SSD1306
- esp_err_t oled_ssd1306_init() {
- i2c_cmd_handle_t cmd = i2c_cmd_link_create();
- i2c_master_start(cmd);
- i2c_master_write_byte(cmd, (SSD1306_OLED_ADDR << 1) | WRITE_BIT, ACK_CHECK_EN);
- // Initialization (page 64)
- // The next bytes are commands
- i2c_master_write_byte(cmd, COMMAND_MODE, ACK_CHECK_EN);
- // Mux Ratio
- i2c_master_write_byte(cmd, MULTIPLEX_RATIO, ACK_CHECK_EN);
- i2c_master_write_byte(cmd, 0x3F, ACK_CHECK_EN);
- // Set display offset
- i2c_master_write_byte(cmd, DISPLAY_OFFSET, ACK_CHECK_EN);
- i2c_master_write_byte(cmd, 0x00, ACK_CHECK_EN);
- // Set display line start
- i2c_master_write_byte(cmd, DISPLAY_LINE_START, ACK_CHECK_EN);
- i2c_master_write_byte(cmd, 0x00, ACK_CHECK_EN);
- // Set Segment re-map
- i2c_master_write_byte(cmd, SEGMENT_REMAP, ACK_CHECK_EN);
- // Set COM output scan dir
- i2c_master_write_byte(cmd, COM_OUTPUT_SCAN_DIR, ACK_CHECK_EN);
- i2c_master_write_byte(cmd, 0x00, ACK_CHECK_EN);
- // Set COM pins hardware config
- i2c_master_write_byte(cmd, COM_PINS_HARDWARE_CONFIG, ACK_CHECK_EN);
- i2c_master_write_byte(cmd, 0x12, ACK_CHECK_EN);
- // Set contrast Control
- i2c_master_write_byte(cmd, CONTRAST_CONTROL, ACK_CHECK_EN);
- i2c_master_write_byte(cmd, 0x7F, ACK_CHECK_EN);
- // Disable entire display ON
- i2c_master_write_byte(cmd, DISABLE_ENTIRE_DISPLAY, ACK_CHECK_EN);
- // Set normal display
- i2c_master_write_byte(cmd, NORMAL_DISPLAY, ACK_CHECK_EN);
- // Set OSC frequency
- i2c_master_write_byte(cmd, DISPLAY_CLK_RATIO, ACK_CHECK_EN);
- i2c_master_write_byte(cmd, 0x80, ACK_CHECK_EN);
- // Enable charge pump regulator
- i2c_master_write_byte(cmd, CHARGE_PUMP_SET, ACK_CHECK_EN);
- i2c_master_write_byte(cmd, 0x14, ACK_CHECK_EN);
- // Display on
- i2c_master_write_byte(cmd, DISPLAY_ON, ACK_CHECK_EN);
- // Stop bit
- i2c_master_stop(cmd);
- esp_err_t ret = i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 1000 / portTICK_RATE_MS);
- i2c_cmd_link_delete(cmd);
- return ret;
- }
- void i2c_master_init() {
- int i2c_master_port = I2C_MASTER_NUM;
- i2c_config_t conf;
- conf.mode = I2C_MODE_MASTER;
- conf.sda_io_num = I2C_SDA_PIN; // Data pin
- conf.sda_pullup_en = GPIO_PULLUP_ENABLE;
- conf.scl_io_num = I2C_CLK_PIN; // Clock pin
- conf.scl_pullup_en = GPIO_PULLUP_ENABLE;
- conf.master.clk_speed = 100000;
- i2c_param_config(i2c_master_port, &conf);
- i2c_driver_install(i2c_master_port,
- conf.mode,
- I2C_MASTER_RX_BUF_DISABLE,
- I2C_MASTER_TX_BUF_DISABLE,
- 0);
- }
- #endif
|