/*############################################################################# ## 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 #include #include /// Tag used for ESP logging. static const char* TAG = "I2C component"; /** * 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. */ inline void init_config_i2c(const i2c_master_bus_config_t config) { i2c_master_bus_handle_t i2c; ESP_LOGI(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 */ inline void init_i2c(gpio_num_t sda, gpio_num_t scl) { return init_config_i2c((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, }, } ); } /** * ESP I2C master bus handle getter. * This will fail if an I2C instance was never constructed. */ static i2c_master_bus_handle_t get() { i2c_master_bus_handle_t i2c = NULL; ESP_ERROR_CHECK(i2c_master_get_bus_handle(0, &i2c)); return i2c; } #endif //I2C_H