#include <stdio.h>
#include <string.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include "esp_log.h"
#include "driver/i2c.h"
#define I2C_SDA 21 //SDA
#define I2C_SCL 22 //SCLK
#define SPEED_SCL 1000000 // 10 kHz, muy lento pero puede ayudar a depurar
#define ADDR 0x68 //SLAVE ADDR
static const char *TAG = "I2C";
void I2C_init(void)
{
i2c_config_t i2c_config = {
.mode = I2C_MODE_MASTER,
.sda_io_num = I2C_SDA,
.scl_io_num = I2C_SCL,
.master.clk_speed = SPEED_SCL,
.scl_pullup_en = true,
.sda_pullup_en = true,
.clk_flags = 0,
};
esp_err_t ret = i2c_param_config(I2C_NUM_0, &i2c_config);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Error en i2c_param_config: %s", esp_err_to_name(ret));
return; // Sal de la función si hay un error
}
ESP_LOGI(TAG, "i2c_param_config OK");
ret = i2c_driver_install(I2C_NUM_0, I2C_MODE_MASTER, 0, 0, 0);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Error en i2c_driver_install: %s", esp_err_to_name(ret));
return;
}
ESP_LOGI(TAG, "i2c_driver_install OK");
}
void app_main(void)
{
I2C_init();
while (1)
{
uint8_t rx_data[7];
uint8_t cmd = 0x00;
i2c_master_write_read_device(I2C_NUM_0, ADDR, &cmd, 1, rx_data, 7, pdMS_TO_TICKS(1000));
ESP_LOG_BUFFER_HEX(TAG, rx_data, 7);
printf("%02x ", rx_data[2]);
printf("%02x ", rx_data[1]);
printf("%02x \n", rx_data[0]);
vTaskDelay(pdMS_TO_TICKS(1000));
}
}