#include <stdio.h>
#include "driver/i2c.h"
#include "esp_err.h"
#define LCD_ADDR 0x27
#define SDA_PIN GPIO_NUM_21
#define SCL_PIN GPIO_NUM_22
extern "C"{
void app_main(){
i2c_config_t conf;
conf.mode = I2C_MODE_MASTER;
conf.sda_io_num = SDA_PIN;
conf.sda_pullup_en = GPIO_PULLUP_ENABLE;
conf.scl_io_num = SCL_PIN;
conf.scl_pullup_en = GPIO_PULLUP_ENABLE;
conf.master.clk_speed = 1000000;
conf.clk_flags = 0;
i2c_param_config(I2C_NUM_0, &conf);
i2c_driver_install(I2C_NUM_0, I2C_MODE_MASTER, 0, 0, 0);
vTaskDelay(pdMS_TO_TICKS(1000));
//------------------------------------------------------------------
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, LCD_ADDR << 1 | I2C_MASTER_WRITE, true);
i2c_master_write_byte(cmd, 0x00, true);
i2c_master_write_byte(cmd, 0x28, true);
i2c_master_start(cmd);
i2c_master_stop(cmd);
i2c_master_cmd_begin(I2C_NUM_0, cmd, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd);
vTaskDelay(pdMS_TO_TICKS(1000));
//------------------------------------------------------------------
i2c_cmd_handle_t cmd2 = i2c_cmd_link_create();
i2c_master_start(cmd2);
i2c_master_write_byte(cmd2, LCD_ADDR << 1 | I2C_MASTER_WRITE, true);
i2c_master_write_byte(cmd2, 0x00, true);
i2c_master_write_byte(cmd2, 0x0c, true);
i2c_master_start(cmd2);
i2c_master_stop(cmd2);
i2c_master_cmd_begin(I2C_NUM_0, cmd2, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd2);
vTaskDelay(pdMS_TO_TICKS(1000));
//------------------------------------------------------------------
i2c_cmd_handle_t cmd3 = i2c_cmd_link_create();
i2c_master_start(cmd3);
i2c_master_write_byte(cmd3, LCD_ADDR << 1 | I2C_MASTER_WRITE, true);
i2c_master_write_byte(cmd3, 0x00, true);
i2c_master_write_byte(cmd3, 0x01, true);
i2c_master_start(cmd3);
i2c_master_stop(cmd3);
i2c_master_cmd_begin(I2C_NUM_0, cmd3, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd3);
vTaskDelay(pdMS_TO_TICKS(1000));
//------------------------------------------------------------------
i2c_cmd_handle_t cmd4 = i2c_cmd_link_create();
i2c_master_start(cmd4);
i2c_master_write_byte(cmd4, LCD_ADDR << 1 | I2C_MASTER_WRITE, true);
i2c_master_write_byte(cmd4, 0x00, true);
i2c_master_write_byte(cmd4, 0x06, true);
i2c_master_start(cmd4);
i2c_master_stop(cmd4);
i2c_master_cmd_begin(I2C_NUM_0, cmd4, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd4);
//------------------------------------------------------------------
vTaskDelay(pdMS_TO_TICKS(1000));
i2c_cmd_handle_t cmd5 = i2c_cmd_link_create();
i2c_master_start(cmd5);
i2c_master_write_byte(cmd5, LCD_ADDR << 1 | I2C_MASTER_WRITE, true);
i2c_master_write_byte(cmd5, 0x00, true);
i2c_master_write_byte(cmd5, 0x0F, true); // Send the ASCII code for 'h'
i2c_master_stop(cmd5);
i2c_master_cmd_begin(I2C_NUM_0, cmd5, 1000 / portTICK_RATE_MS);
i2c_cmd_link_delete(cmd5);
}
}