ESP32s3与Lsm6ds3通信---i2c【开源】

接线

ESPS3,I2C的初始化

#ifdef __cplusplus
extern "C" {
#endif
#define I2C_MASTER_SCL_IO           CONFIG_I2C_MASTER_SCL      /*!< GPIO number used for I2C master clock */
#define I2C_MASTER_SDA_IO           CONFIG_I2C_MASTER_SDA      /*!< GPIO number used for I2C master data  */
#define I2C_MASTER_NUM              0                          /*!< I2C master i2c port number, the number of i2c peripheral interfaces available will depend on the chip */
#define I2C_MASTER_FREQ_HZ          1000000                     /*!< I2C master clock frequency */
#define I2C_MASTER_TX_BUF_DISABLE   0                          /*!< I2C master doesn't need buffer */
#define I2C_MASTER_RX_BUF_DISABLE   0                          /*!< I2C master doesn't need buffer */
#define I2C_MASTER_TIMEOUT_MS       1000
#define LED_GPIO_1  GPIO_NUM_25
static esp_err_t i2c_master_init(void);
#ifdef __cplusplus
}
#endif
/**
 * @brief i2c master initialization
 */
static esp_err_t i2c_master_init(void){

	i2c_config_t conf;
	conf.mode = I2C_MODE_MASTER;
	conf.sda_io_num = (gpio_num_t)I2C_MASTER_SDA_IO;
	conf.scl_io_num = (gpio_num_t)I2C_MASTER_SCL_IO;
	conf.sda_pullup_en = GPIO_PULLUP_ENABLE;
	conf.scl_pullup_en = GPIO_PULLUP_ENABLE;
	conf.master.clk_speed = I2C_MASTER_FREQ_HZ;
    conf.clk_flags = 0;
	ESP_ERROR_CHECK(i2c_param_config(I2C_NUM_0, &conf));
	return i2c_driver_install(I2C_NUM_0, I2C_MODE_MASTER, 0, 0, 0);
}

主要任务

该任务主要是把Lsm6ds3的数据读取出来,并打印

void lsm6ds3(void *pvParameters){
	// Initialize device
	if (imu.begin() == 0) {
		ESP_LOGE(TAG, "Connection fail");
		vTaskDelete(NULL);
	}else{
		ESP_LOGE(TAG, "Connection successfully");		
	}
	// double accX, accY, accZ;
	// double gyroX, gyroY, gyroZ;
	// _getMotion6(&accX, &accY, &accZ, &gyroX, &gyroY, &gyroZ);
	// ESP_LOGE(TAG,"%f %f %f - %f %f %f\n", accX, accY, accZ, gyroX, gyroY, gyroZ);
	// vTaskDelete(NULL);
	
	// Set Kalman and gyro starting angle
	double accX, accY, accZ;
	double gyroX, gyroY, gyroZ;

int ioioi =0;
	while(1){
		
		_getMotion6(&accX, &accY, &accZ, &gyroX, &gyroY, &gyroZ);

		gpio_set_level(GPIO_NUM_48, ioioi);
		ioioi = !ioioi;
		//     int64_t time_since_boot = esp_timer_get_time();
    	//ESP_LOGI("TIME", "Time since boot: %lld microseconds", time_since_boot);
		ESP_LOGE(TAG,"%f %f %f - %f %f %f", accX, accY, accZ, gyroX, gyroY, gyroZ);
		//printf("%f %f %f - %f %f %f/n", accX, accY, accZ, gyroX, gyroY, gyroZ);
	}
}

核心代码

主要就是把esp-idf写好的I2C接口,和LSM6DS3的驱动接上,分别是读和写数据

int LSM6DS3::readRegisters(uint8_t address, uint8_t* data, size_t length)
{
    esp_err_t ret = i2c_master_write_read_device(I2C_NUM_0, CONFIG_I2C_ADDR,
                                                 &address, 1, data, length, 100 / portTICK_RATE_MS);
    return 1;
}

int LSM6DS3::writeRegister(uint8_t address, uint8_t value)
{
    uint8_t write_buf[2] = { address, value };
    esp_err_t ret = i2c_master_write_to_device(I2C_NUM_0, CONFIG_I2C_ADDR,
                                               write_buf, sizeof(write_buf), 100 / portTICK_RATE_MS);
    return 1;
}

开源地址

链接:https://pan.baidu.com/s/1Tbnz3A4ykt20kQf2UcANWA

提取码:oy8u

--来自百度网盘超级会员V4的分享

相关推荐
pubuzhixing3 小时前
开源白板新方案:Plait 同时支持 Angular 和 React 啦!
前端·开源·github
忆源4 小时前
3.3.2.3 开源项目有锁队列实现--魔兽世界tinityCore
开源
鹏大师运维4 小时前
聊聊开源的虚拟化平台--PVE
linux·开源·虚拟化·虚拟机·pve·存储·nfs
奥顺7 小时前
PHPUnit使用指南:编写高效的单元测试
大数据·mysql·开源·php
是小崔啊7 小时前
开源轮子 - Apache Common
java·开源·apache
FIT2CLOUD飞致云8 小时前
喜报丨重大科技成就发布会上,JumpServer入选2024年度开源项目!
开源
刘不二9 小时前
大模型应用—HivisionIDPhotos 证件照在线制作!支持离线、换装、美颜等
人工智能·开源
小奏技术14 小时前
我用github新开源的3D图生成工具生成了自己github历史贡献3D图
后端·开源
奥顺1 天前
PHP与AJAX:实现动态网页的完美结合
大数据·mysql·开源·php