赞
踩
#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的分享
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。