Move I2C into a separate component.
This commit is contained in:
		
							parent
							
								
									7d87b35b1c
								
							
						
					
					
						commit
						83473c4899
					
				
							
								
								
									
										4
									
								
								esp/cpp/08_dht11-lcd/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								esp/cpp/08_dht11-lcd/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					build
 | 
				
			||||||
 | 
					managed_components
 | 
				
			||||||
 | 
					dependencies.lock
 | 
				
			||||||
 | 
					sdkconfig.old
 | 
				
			||||||
@ -1,7 +1,6 @@
 | 
				
			|||||||
idf_component_register(
 | 
					idf_component_register(
 | 
				
			||||||
    SRCS
 | 
					    SRCS
 | 
				
			||||||
    main.cpp
 | 
					    main.cpp
 | 
				
			||||||
    main.h i2c.h
 | 
					    main.h
 | 
				
			||||||
    INCLUDE_DIRS .
 | 
					    INCLUDE_DIRS .
 | 
				
			||||||
    REQUIRES driver
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,5 @@
 | 
				
			|||||||
## IDF Component Manager Manifest File
 | 
					## IDF Component Manager Manifest File
 | 
				
			||||||
dependencies:
 | 
					dependencies:
 | 
				
			||||||
  idf: '>=5.3.0'
 | 
					  idf: '>=5.3.0'
 | 
				
			||||||
 | 
					  i2c:
 | 
				
			||||||
 | 
					    path: ../../components/i2c
 | 
				
			||||||
@ -13,10 +13,8 @@
 | 
				
			|||||||
#define PIN_SCL                GPIO_NUM_22
 | 
					#define PIN_SCL                GPIO_NUM_22
 | 
				
			||||||
#define PIN_RST                (-1)
 | 
					#define PIN_RST                (-1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I2C i2c(PIN_SDA, PIN_SCL, PIN_RST);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern "C" void app_main(void)
 | 
					extern "C" void app_main(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    init_i2c(PIN_SDA, PIN_SCL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										13
									
								
								esp/cpp/components/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								esp/cpp/components/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					# Components
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These are examples of creating custom components for use in local projects or eventually published to the ESP-IDF component registry.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Official component examples can be found in the [ESP-BSP project](https://github.com/espressif/esp-bsp/tree/master/components).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `idf.py` tool can be used to create a new component:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					source /path/to/esp-idf/export.sh
 | 
				
			||||||
 | 
					idf.py create-component my-component
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
@ -1,92 +0,0 @@
 | 
				
			|||||||
/*#############################################################################
 | 
					 | 
				
			||||||
## 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 <esp_log.h>
 | 
					 | 
				
			||||||
#include <driver/i2c_master.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Encapsulates ESP I2C creation and usage.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
struct 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 number for SDA
 | 
					 | 
				
			||||||
   * @param scl GPIO pin number for SCL
 | 
					 | 
				
			||||||
   * @param rst GPIO pin number for RST
 | 
					 | 
				
			||||||
   */
 | 
					 | 
				
			||||||
  I2C(gpio_num_t sda, gpio_num_t scl, int rst = -1) :
 | 
					 | 
				
			||||||
      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,
 | 
					 | 
				
			||||||
              },
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          rst
 | 
					 | 
				
			||||||
      ) { }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /**
 | 
					 | 
				
			||||||
   * 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.
 | 
					 | 
				
			||||||
   * @param rst GPIO pin number for RST
 | 
					 | 
				
			||||||
   */
 | 
					 | 
				
			||||||
  explicit I2C(i2c_master_bus_config_t config, int rst = -1) :
 | 
					 | 
				
			||||||
      esp_bus_config_(config),
 | 
					 | 
				
			||||||
      rst_num_(rst)
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    i2c_master_bus_handle_t i2c;
 | 
					 | 
				
			||||||
    ESP_LOGI(TAG, "Initializing new master I2C bus");
 | 
					 | 
				
			||||||
    ESP_ERROR_CHECK(i2c_new_master_bus(&esp_bus_config_, &i2c));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  ~I2C() = default;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  //
 | 
					 | 
				
			||||||
  // GETTERS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /**
 | 
					 | 
				
			||||||
   * 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 = nullptr;
 | 
					 | 
				
			||||||
    ESP_ERROR_CHECK(i2c_master_get_bus_handle(0, &i2c));
 | 
					 | 
				
			||||||
    return i2c;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  //
 | 
					 | 
				
			||||||
  // PUBLIC MEMBERS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /// ESP I2C master bus configuration used during initialization.
 | 
					 | 
				
			||||||
  i2c_master_bus_config_t esp_bus_config_;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /// RST GPIO pin number.
 | 
					 | 
				
			||||||
  int rst_num_;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  //
 | 
					 | 
				
			||||||
  // PRIVATE MEMBERS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /// Tag used for ESP logging.
 | 
					 | 
				
			||||||
  constexpr static const char *TAG = "I2C";
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif //I2C_H
 | 
					 | 
				
			||||||
							
								
								
									
										5
									
								
								esp/cpp/components/i2c/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								esp/cpp/components/i2c/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					idf_component_register(
 | 
				
			||||||
 | 
					    SRCS "i2c.c"
 | 
				
			||||||
 | 
					    INCLUDE_DIRS "include"
 | 
				
			||||||
 | 
					    PRIV_REQUIRES "driver"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										2
									
								
								esp/cpp/components/i2c/i2c.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								esp/cpp/components/i2c/i2c.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include "i2c.h"
 | 
				
			||||||
							
								
								
									
										5
									
								
								esp/cpp/components/i2c/idf_component.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								esp/cpp/components/i2c/idf_component.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					version: "0.0.1"
 | 
				
			||||||
 | 
					description: ESP I2C helper component
 | 
				
			||||||
 | 
					url: https://git.shaunreed.com/shaunrd0/klips/tree/master/esp/cpp/components/i2c
 | 
				
			||||||
 | 
					dependencies:
 | 
				
			||||||
 | 
					  idf: ">=5.3"
 | 
				
			||||||
							
								
								
									
										66
									
								
								esp/cpp/components/i2c/include/i2c.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								esp/cpp/components/i2c/include/i2c.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,66 @@
 | 
				
			|||||||
 | 
					/*#############################################################################
 | 
				
			||||||
 | 
					## 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 <esp_log.h>
 | 
				
			||||||
 | 
					#include <driver/i2c_master.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// 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
 | 
				
			||||||
							
								
								
									
										2240
									
								
								esp/cpp/components/i2c/sdkconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2240
									
								
								esp/cpp/components/i2c/sdkconfig
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user