#include "ssd1306_driver.h" #include "driver/i2c.h" #ifdef ENABLE_SSD1306 esp_err_t i2c_tx_cmd(uint8_t *data, const uint8_t length) { i2c_cmd_handle_t handle = i2c_cmd_link_create(); i2c_master_start(handle); i2c_master_write_byte(handle, (SSD1306_OLED_ADDR << 1) | WRITE_BIT, ACK_CHECK_EN); i2c_master_write_byte(handle, COMMAND_MODE, ACK_CHECK_EN); i2c_master_write(handle, data, length, ACK_CHECK_EN); i2c_master_stop(handle); esp_err_t retVal = i2c_master_cmd_begin(I2C_MASTER_NUM, handle, 1000 / portTICK_RATE_MS); i2c_cmd_link_delete(handle); return retVal; } esp_err_t i2c_tx_data(uint8_t *data, const uint8_t length) { i2c_cmd_handle_t handle = i2c_cmd_link_create(); i2c_master_start(handle); i2c_master_write_byte(handle, (SSD1306_OLED_ADDR << 1) | WRITE_BIT, ACK_CHECK_EN); i2c_master_write_byte(handle, DATA_MODE, ACK_CHECK_EN); i2c_master_write(handle, data, length, ACK_CHECK_EN); i2c_master_stop(handle); esp_err_t retVal = i2c_master_cmd_begin(I2C_MASTER_NUM, handle, 1000 / portTICK_RATE_MS); i2c_cmd_link_delete(handle); return retVal; } 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