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