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的分享

相关推荐
冬奇Lab2 小时前
一天一个开源项目(第37篇):awesome-selfhosted - 自托管软件资源集合
开源·自动化运维·资讯
冬奇Lab15 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab15 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
HelloGitHub1 天前
《HelloGitHub》第 119 期
开源·github
冬奇Lab2 天前
一天一个开源项目(第35篇):GitHub Store - 跨平台的 GitHub Releases 应用商店
开源·github·资讯
Bigger2 天前
为什么你的 Git 提交需要签名?—— Git Commit Signing 完全指南
git·开源·github
无人装备硬件开发爱好者3 天前
硬核技术解析|MCP 协议实现语音 AI 与 ESP32 软 / 硬件的标准化对接:从火山引擎豆包认证到全链路落地——中
人工智能·esp32·火山引擎·mcp
chainStriker3 天前
从零到上线:Python开源项目的规范化开发与发布指南
python·开源
IvorySQL3 天前
揭开 PostgreSQL 读取效率问题的真相
数据库·postgresql·开源
无人装备硬件开发爱好者3 天前
硬核技术解析|MCP 协议实现语音 AI 与 ESP32 软 / 硬件的标准化对接:从火山引擎豆包认证到全链路落地——上
人工智能·esp32·火山引擎·mcp