/*############################################################################# ## Author: Shaun Reed ## ## Legal: All Content (c) 2025 Shaun Reed, all rights reserved ## ## ## ## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com ## ############################################################################## */ #ifndef I2C_H #define I2C_H #define I2C_BUS_PORT 0 #define I2C_DEFAULT_PIN_RST (-1) #include #include /// Tag used for ESP logging. static const char* I2C_TAG = "I2C component"; /** * ESP I2C master bus handle getter. */ static i2c_master_bus_handle_t I2C_get() { i2c_master_bus_handle_t i2c = NULL; ESP_ERROR_CHECK(i2c_master_get_bus_handle(0, &i2c)); return i2c; } /** * Construct an ESP I2C master bus given a specific ESP I2C configuration. * An I2C constructor may only be called one time in any application. * * @param config ESP I2C master bus configuration. */ static void I2C_config_init(const i2c_master_bus_config_t config) { i2c_master_bus_handle_t i2c = NULL; ESP_LOGI(I2C_TAG, "Initializing new master I2C bus"); ESP_ERROR_CHECK(i2c_new_master_bus(&config, &i2c)); } /** * Construct and initialize an ESP I2C master bus. * An I2C constructor may only be called one time in any application. * * @param sda GPIO pin for SDA * @param scl GPIO pin for SCL */ static void I2C_init(gpio_num_t sda, gpio_num_t scl) { I2C_config_init((i2c_master_bus_config_t){ .i2c_port = I2C_BUS_PORT, .sda_io_num = sda, .scl_io_num = scl, .clk_source = I2C_CLK_SRC_DEFAULT, .glitch_ignore_cnt = 7, .flags = { .enable_internal_pullup = true, }, }); } #endif // I2C_H