I2C 接口的 LCD
- 创建 I2C 总线。详细信息,请参阅 I2C API 文档。 - i2c_master_bus_handle_t i2c_bus = NULL; i2c_master_bus_config_t bus_config = { .clk_source = I2C_CLK_SRC_DEFAULT, .glitch_ignore_cnt = 7, .i2c_port = I2C_BUS_PORT, .sda_io_num = EXAMPLE_PIN_NUM_SDA, .scl_io_num = EXAMPLE_PIN_NUM_SCL, .flags.enable_internal_pullup = true, }; ESP_ERROR_CHECK(i2c_new_master_bus(&bus_config, &i2c_bus)); 
- 从 I2C 总线分配一个 LCD IO 设备句柄。在此步骤中,需要提供以下信息: - esp_lcd_panel_io_i2c_config_t::dev_addr设置 LCD 控制器芯片的 I2C 设备地址。LCD 驱动程序使用此地址与 LCD 控制器芯片通信。
- esp_lcd_panel_io_i2c_config_t::scl_speed_hz设置 I2C 时钟频率 (Hz)。该值不应超过 LCD 规格书中推荐的范围。
- esp_lcd_panel_io_i2c_config_t::lcd_cmd_bits和- esp_lcd_panel_io_i2c_config_t::lcd_param_bits分别设置 LCD 控制器芯片可识别的命令及参数的位宽。不同芯片对位宽要求不同,请提前参阅 LCD 规格书。
 - esp_lcd_panel_io_handle_t io_handle = NULL; esp_lcd_panel_io_i2c_config_t io_config = { .dev_addr = EXAMPLE_I2C_HW_ADDR, .scl_speed_hz = EXAMPLE_LCD_PIXEL_CLOCK_HZ, .control_phase_bytes = 1, // 参阅 LCD 规格 .dc_bit_offset = 6, // 参阅 LCD 规格 .lcd_cmd_bits = EXAMPLE_LCD_CMD_BITS, .lcd_param_bits = EXAMPLE_LCD_CMD_BITS, }; ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c(i2c_bus, &io_config, &io_handle)); 
- 安装 LCD 控制器驱动程序。LCD 控制器驱动程序负责向 LCD 控制器芯片发送命令和参数。在此步骤中,需要指定上一步骤中分配到的 I2C IO 设备句柄以及一些面板特定配置: - esp_lcd_panel_dev_config_t::reset_gpio_num设置 LCD 的硬件复位 GPIO 编号。如果 LCD 没有硬件复位管脚,则将此设置为- -1。
- esp_lcd_panel_dev_config_t::bits_per_pixel设置像素颜色数据的位宽。LCD 驱动程序使用此值计算要发送到 LCD 控制器芯片的字节数。
 - esp_lcd_panel_handle_t panel_handle = NULL; esp_lcd_panel_dev_config_t panel_config = { .bits_per_pixel = 1, .reset_gpio_num = EXAMPLE_PIN_NUM_RST, }; ESP_ERROR_CHECK(esp_lcd_new_panel_ssd1306(io_handle, &panel_config, &panel_handle)); 
API 参考
Header File
- This header file can be included with: - #include "esp_lcd_io_i2c.h" 
- This header file is a part of the API provided by the - esp_lcdcomponent. To declare that your component depends on- esp_lcd, add the following to your CMakeLists.txt:- REQUIRES esp_lcd - or - PRIV_REQUIRES esp_lcd 
Functions
- 
esp_err_t esp_lcd_new_panel_io_i2c_v1(uint32_t bus, const esp_lcd_panel_io_i2c_config_t *io_config, esp_lcd_panel_io_handle_t *ret_io)
- Create LCD panel IO handle, for I2C interface in legacy implementation. - 备注 - Please don't call this function in your project directly. Please call - esp_lcd_new_panel_to_i2cinstead.- 参数:
- bus -- [in] I2C bus handle, (in uint32_t) 
- io_config -- [in] IO configuration, for I2C interface 
- ret_io -- [out] Returned IO handle 
 
- 返回:
- ESP_ERR_INVALID_ARG if parameter is invalid 
- ESP_ERR_NO_MEM if out of memory 
- ESP_OK on success 
 
 
- 
esp_err_t esp_lcd_new_panel_io_i2c_v2(i2c_master_bus_handle_t bus, const esp_lcd_panel_io_i2c_config_t *io_config, esp_lcd_panel_io_handle_t *ret_io)
- Create LCD panel IO handle, for I2C interface in new implementation. - 备注 - Please don't call this function in your project directly. Please call - esp_lcd_new_panel_to_i2cinstead.- 参数:
- bus -- [in] I2C bus handle, (in i2c_master_dev_handle_t) 
- io_config -- [in] IO configuration, for I2C interface 
- ret_io -- [out] Returned IO handle 
 
- 返回:
- ESP_ERR_INVALID_ARG if parameter is invalid 
- ESP_ERR_NO_MEM if out of memory 
- ESP_OK on success 
 
 
Structures
- 
struct esp_lcd_panel_io_i2c_config_t
- Panel IO configuration structure, for I2C interface. - Public Members - 
uint32_t dev_addr
- I2C device address 
 - 
esp_lcd_panel_io_color_trans_done_cb_t on_color_trans_done
- Callback invoked when color data transfer has finished 
 - 
void *user_ctx
- User private data, passed directly to on_color_trans_done's user_ctx 
 - 
size_t control_phase_bytes
- I2C LCD panel will encode control information (e.g. D/C selection) into control phase, in several bytes 
 - 
unsigned int dc_bit_offset
- Offset of the D/C selection bit in control phase 
 - 
int lcd_cmd_bits
- Bit-width of LCD command 
 - 
int lcd_param_bits
- Bit-width of LCD parameter 
 - 
unsigned int dc_low_on_data
- If this flag is enabled, DC line = 0 means transfer data, DC line = 1 means transfer command; vice versa 
 - 
unsigned int disable_control_phase
- If this flag is enabled, the control phase isn't used 
 - 
struct esp_lcd_panel_io_i2c_config_t flags
- Extra flags to fine-tune the I2C device 
 - 
uint32_t scl_speed_hz
- I2C LCD SCL frequency (hz) 
 
- 
uint32_t dev_addr
Macros
- 
esp_lcd_new_panel_io_i2c(bus, io_config, ret_io)
- Create LCD panel IO handle. - 参数:
- bus -- [in] I2C bus handle 
- io_config -- [in] IO configuration, for I2C interface 
- ret_io -- [out] Returned IO handle 
 
- 返回:
- ESP_ERR_INVALID_ARG if parameter is invalid 
- ESP_ERR_NO_MEM if out of memory 
- ESP_OK on success 
 
 
Type Definitions
- 
typedef uint32_t esp_lcd_i2c_bus_handle_t
- Type of LCD I2C bus handle