#ifndef IIC_H #define IIC_H #include #include "driver/i2c.h" #include "esp_log.h" // 设备地址 #define Device_Address 0x6B // I2C 主设备配置宏定义 // I2C 主设备时钟线连接的 GPIO 引脚号 #define I2C_MASTER_SCL_IO GPIO_NUM_4 // I2C 主设备数据线连接的 GPIO 引脚号 #define I2C_MASTER_SDA_IO GPIO_NUM_3 // I2C 主设备使用的 I2C 端口号 #define I2C_MASTER_NUM I2C_NUM_0 // I2C 主设备的时钟频率 #define I2C_MASTER_FREQ_HZ 400000 // I2C 主设备不使用发送缓冲区 #define I2C_MASTER_TX_BUF_DISABLE 0 // I2C 主设备不使用接收缓冲区 #define I2C_MASTER_RX_BUF_DISABLE 0 /** * @brief 初始化 I2C 主设备 * * 该函数用于对 I2C 主设备进行初始化配置,包括设置 I2C 模式、引脚、上拉电阻和时钟频率等, * 并安装 I2C 驱动。 * * @return esp_err_t 初始化结果,ESP_OK 表示成功,其他值表示失败 */ esp_err_t i2c_master_init(void); /** * @brief 向 8 位地址的寄存器写入一个字节数据 * * 该函数通过 I2C 总线向指定地址的寄存器写入一个字节的数据。 * * @param addr 寄存器的内部地址 * @param Data 要写入的数据 * @return unsigned char 操作结果,1 表示成功,0 表示失败 */ unsigned char i2cwrite(unsigned char addr, unsigned char Data); /** * @brief 向 8 位地址的寄存器写入多个字节数据 * * 该函数通过 I2C 总线向指定地址的寄存器开始写入指定长度的字节数据。 * * @param addr I2C 设备内部寄存器地址 * @param length 要写入的数据长度 * @param Data 要写入的数据的地址 * @return unsigned char 操作状态,1 表示成功,0 表示失败 */ unsigned char i2cwrites(uint8_t addr, uint8_t length, const uint8_t *Data); /** * @brief 从 8 位地址的寄存器读取一个字节数据 * * 该函数通过 I2C 总线从指定地址的寄存器读取一个字节的数据。 * * @param addr I2C 设备内部寄存器地址 * @param Data 存储读取数据的地址 * @return unsigned char 操作状态,1 表示成功,0 表示失败 */ unsigned char i2cread(unsigned char addr, unsigned char *Data); /** * @brief 从 8 位地址的寄存器读取多个字节数据 * * 该函数通过 I2C 总线从指定地址的寄存器开始读取指定长度的字节数据。 * * @param addr I2C 设备内部寄存器地址 * @param length 要读取的数据长度 * @param Data 存储读取数据的地址 * @return unsigned char 操作状态,1 表示成功,0 表示失败 */ unsigned char i2creads(unsigned char addr, unsigned char length, unsigned char *Data); /** * @brief 扫描 I2C 总线上的设备 * * 该函数会遍历 I2C 地址范围(0 - 127),尝试与每个地址的设备进行通信, * 若通信成功则表示该地址存在设备,并输出相应的日志信息。 * */ void i2c_scan(void); #endif // IIC_H