esp32 查找i2c硬件地址通用程序

当然,如找到硬件地址,证明硬件外围连线和·i2c 总线没有问题。用此程序查找的tof200c地址为0x29,不是网上很多程序说的0x52。所以使用i2c硬件前都可用此程序验证一下地址。



#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "string.h"
#include "driver/i2c.h"
#include "sdkconfig.h"
#include "esp_system.h"

#define I2C_MASTER_SCL_IO    15     // I2C SCL 引脚
#define I2C_MASTER_SDA_IO    21      // I2C SDA 引脚
#define I2C_MASTER_NUM       I2C_NUM_0  // I2C 端口号
#define I2C_MASTER_FREQ_HZ   100000  // I2C 时钟频率

// 初始化 I2C
void i2c_master_init() {
    i2c_config_t conf = {
        .mode = I2C_MODE_MASTER,
        .sda_io_num = I2C_MASTER_SDA_IO,
        .sda_pullup_en = GPIO_PULLUP_ENABLE,
        .scl_io_num = I2C_MASTER_SCL_IO,
        .scl_pullup_en = GPIO_PULLUP_ENABLE,
        .master.clk_speed = I2C_MASTER_FREQ_HZ,
    };
    i2c_param_config(I2C_MASTER_NUM, &conf);
    i2c_driver_install(I2C_MASTER_NUM, conf.mode, 0, 0, 0);
}

void i2c_scanner() {
    i2c_cmd_handle_t cmd;
    esp_err_t espRc;
    printf("I2C scanning ...\n");
    for (int i = 1; i < 127; i++) {
        cmd = i2c_cmd_link_create();
        i2c_master_start(cmd);
        i2c_master_write_byte(cmd, (i << 1) | I2C_MASTER_WRITE, true);
        i2c_master_stop(cmd);
        espRc = i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 10 / portTICK_PERIOD_MS);
        i2c_cmd_link_delete(cmd);
        if (espRc == ESP_OK) {
            printf("Found device at address: 0x%02X\n", i);
        }
    }
    printf("I2C scanning completed.\n");
}


void app_main(void) {
    i2c_master_init();  // 初始化 I2C
	i2c_scanner();
  
}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值