mirror of
https://github.com/Mercantec-GHC/h5-projekt-mst.git
synced 2026-08-26 21:27:38 +02:00
extract mpu
This commit is contained in:
parent
336df77969
commit
da33911aa3
@ -1,5 +1,5 @@
|
||||
idf_component_register(
|
||||
SRCS skateboard.c wifi.c
|
||||
SRCS skateboard.c app_wifi.c app_mpu.c
|
||||
PRIV_REQUIRES nvs_flash esp_wifi
|
||||
INCLUDE_DIRS ".")
|
||||
|
||||
|
||||
71
skateboard/main/app_mpu.c
Normal file
71
skateboard/main/app_mpu.c
Normal file
@ -0,0 +1,71 @@
|
||||
#include "app_mpu.h"
|
||||
#include "esp_log.h"
|
||||
#include "mpu6050.h"
|
||||
|
||||
extern const char* TAG;
|
||||
|
||||
#ifdef CONFIG_MPU6050_I2C_ADDRESS_LOW
|
||||
#define MPU6050_I2C_ADDRESS MPU6050_I2C_ADDRESS_LOW
|
||||
#else
|
||||
#define MPU6050_I2C_ADDRESS MPU6050_I2C_ADDRESS_HIGH
|
||||
#endif
|
||||
|
||||
#define MPU6050_SDA_GPIO CONFIG_MPU6050_SDA_GPIO
|
||||
#define MPU6050_SCL_GPIO CONFIG_MPU6050_SCL_GPIO
|
||||
|
||||
void app_mpu_init(AppMpu* mpu)
|
||||
{
|
||||
ESP_ERROR_CHECK(i2cdev_init());
|
||||
|
||||
ESP_ERROR_CHECK(mpu6050_init_desc(
|
||||
&mpu->dev, MPU6050_I2C_ADDRESS, 0, MPU6050_SDA_GPIO, MPU6050_SCL_GPIO));
|
||||
ESP_LOGI(TAG,
|
||||
"Initializing MPU6050 device. Address: 0x%02x, SDA %d, SCL: %d",
|
||||
MPU6050_I2C_ADDRESS,
|
||||
MPU6050_SDA_GPIO,
|
||||
MPU6050_SCL_GPIO);
|
||||
|
||||
int retries = 0;
|
||||
while (true) {
|
||||
esp_err_t res = i2c_dev_probe(&mpu->dev.i2c_dev, I2C_DEV_WRITE);
|
||||
if (res == ESP_OK) {
|
||||
ESP_LOGI(TAG, "Found MPU6050 device");
|
||||
break;
|
||||
}
|
||||
if (retries >= 5) {
|
||||
ESP_ERROR_CHECK(res);
|
||||
}
|
||||
ESP_LOGE(TAG, "MPU6050 not found. Retrying (%d/%d)", retries + 1, 5);
|
||||
retries += 1;
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
}
|
||||
|
||||
ESP_ERROR_CHECK(mpu6050_init(&mpu->dev));
|
||||
|
||||
ESP_LOGI(TAG, "MPU6050 acceleration range: %d", mpu->dev.ranges.accel);
|
||||
ESP_LOGI(TAG, "MPU6050 gyroscope range: %d", mpu->dev.ranges.gyro);
|
||||
}
|
||||
|
||||
void app_mpu_read_acceleration(AppMpu* mpu, float* x, float* y, float* z)
|
||||
{
|
||||
mpu6050_acceleration_t acceleration = { 0 };
|
||||
ESP_ERROR_CHECK(mpu6050_get_acceleration(&mpu->dev, &acceleration));
|
||||
*x = acceleration.x;
|
||||
*y = acceleration.y;
|
||||
*z = acceleration.z;
|
||||
}
|
||||
|
||||
void app_mpu_read_rotation(AppMpu* mpu, float* x, float* y, float* z)
|
||||
{
|
||||
mpu6050_rotation_t rotation = { 0 };
|
||||
|
||||
ESP_ERROR_CHECK(mpu6050_get_rotation(&mpu->dev, &rotation));
|
||||
*x = rotation.x;
|
||||
*y = rotation.y;
|
||||
*z = rotation.z;
|
||||
}
|
||||
|
||||
void app_mpu_read_temperature(AppMpu* mpu, float* degree_celsius)
|
||||
{
|
||||
ESP_ERROR_CHECK(mpu6050_get_temperature(&mpu->dev, degree_celsius));
|
||||
}
|
||||
12
skateboard/main/app_mpu.h
Normal file
12
skateboard/main/app_mpu.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "mpu6050.h"
|
||||
|
||||
typedef struct AppMpu {
|
||||
mpu6050_dev_t dev;
|
||||
} AppMpu;
|
||||
|
||||
void app_mpu_init(AppMpu* mpu);
|
||||
void app_mpu_read_acceleration(AppMpu* mpu, float* x, float* y, float* z);
|
||||
void app_mpu_read_rotation(AppMpu* mpu, float* x, float* y, float* z);
|
||||
void app_mpu_read_temperature(AppMpu* mpu, float* degree_celsius);
|
||||
@ -1,4 +1,4 @@
|
||||
#include "wifi.h"
|
||||
#include "app_wifi.h"
|
||||
#include "esp_log.h"
|
||||
#include "esp_wifi.h"
|
||||
#include "freertos/idf_additions.h"
|
||||
@ -1,25 +1,17 @@
|
||||
#include "app_mpu.h"
|
||||
#include "app_wifi.h"
|
||||
#include "esp_log.h"
|
||||
#include "esp_wifi.h"
|
||||
#include "freertos/idf_additions.h"
|
||||
#include "i2cdev.h"
|
||||
#include "mpu6050.h"
|
||||
#include "nvs_flash.h"
|
||||
#include "wifi.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
const char* TAG = "skateboard";
|
||||
|
||||
#ifdef CONFIG_MPU6050_I2C_ADDRESS_LOW
|
||||
#define MPU6050_I2C_ADDRESS MPU6050_I2C_ADDRESS_LOW
|
||||
#else
|
||||
#define MPU6050_I2C_ADDRESS MPU6050_I2C_ADDRESS_HIGH
|
||||
#endif
|
||||
|
||||
#define MPU6050_SDA_GPIO CONFIG_MPU6050_SDA_GPIO
|
||||
#define MPU6050_SCL_GPIO CONFIG_MPU6050_SCL_GPIO
|
||||
|
||||
typedef struct App {
|
||||
AppWifi wifi;
|
||||
AppMpu mpu;
|
||||
} App;
|
||||
|
||||
void app_main(void)
|
||||
@ -43,60 +35,37 @@ void app_main(void)
|
||||
};
|
||||
|
||||
app_wifi_init(&app.wifi);
|
||||
|
||||
ESP_ERROR_CHECK(i2cdev_init());
|
||||
|
||||
mpu6050_dev_t mpu = { 0 };
|
||||
|
||||
ESP_ERROR_CHECK(mpu6050_init_desc(
|
||||
&mpu, MPU6050_I2C_ADDRESS, 0, MPU6050_SDA_GPIO, MPU6050_SCL_GPIO));
|
||||
ESP_LOGI(TAG,
|
||||
"Initializing MPU6050 device. Address: 0x%02x, SDA %d, SCL: %d",
|
||||
MPU6050_I2C_ADDRESS,
|
||||
MPU6050_SDA_GPIO,
|
||||
MPU6050_SCL_GPIO);
|
||||
|
||||
while (true) {
|
||||
esp_err_t res = i2c_dev_probe(&mpu.i2c_dev, I2C_DEV_WRITE);
|
||||
if (res == ESP_OK) {
|
||||
ESP_LOGI(TAG, "Found MPU6050 device");
|
||||
break;
|
||||
}
|
||||
ESP_LOGE(TAG, "MPU6050 not found");
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
}
|
||||
|
||||
ESP_ERROR_CHECK(mpu6050_init(&mpu));
|
||||
|
||||
ESP_LOGI(TAG, "Acceleration range: %d", mpu.ranges.accel);
|
||||
ESP_LOGI(TAG, "Gyroscope range: %d", mpu.ranges.gyro);
|
||||
app_mpu_init(&app.mpu);
|
||||
|
||||
ESP_LOGI(TAG, "Initialized");
|
||||
ESP_LOGI(TAG, "Free memory: %" PRIu32 " bytes", esp_get_free_heap_size());
|
||||
|
||||
while (true) {
|
||||
float accel_x;
|
||||
float accel_y;
|
||||
float accel_z;
|
||||
app_mpu_read_acceleration(&app.mpu, &accel_x, &accel_y, &accel_z);
|
||||
|
||||
float rotation_x;
|
||||
float rotation_y;
|
||||
float rotation_z;
|
||||
app_mpu_read_rotation(&app.mpu, &rotation_x, &rotation_y, &rotation_z);
|
||||
|
||||
float temp;
|
||||
mpu6050_acceleration_t accel = { 0 };
|
||||
mpu6050_rotation_t rotation = { 0 };
|
||||
|
||||
ESP_ERROR_CHECK(mpu6050_get_temperature(&mpu, &temp));
|
||||
ESP_ERROR_CHECK(mpu6050_get_motion(&mpu, &accel, &rotation));
|
||||
app_mpu_read_temperature(&app.mpu, &temp);
|
||||
|
||||
ESP_LOGI(TAG,
|
||||
"******************************************************************"
|
||||
"****");
|
||||
ESP_LOGI(TAG,
|
||||
"Acceleration: x=%.4f y=%.4f z=%.4f",
|
||||
accel.x,
|
||||
accel.y,
|
||||
accel.z);
|
||||
ESP_LOGI(TAG,
|
||||
"Rotation: x=%.4f y=%.4f z=%.4f",
|
||||
rotation.x,
|
||||
rotation.y,
|
||||
rotation.z);
|
||||
ESP_LOGI(TAG, "Temperature: %.1f", temp);
|
||||
"Acceleration: x=% 7.2f y=% 7.2f z=% 7.2f "
|
||||
"Rotation: x=% 7.1f y=% 7.1f z=% 7.1f "
|
||||
"Temperature: % 2.1f",
|
||||
accel_x,
|
||||
accel_y,
|
||||
accel_z,
|
||||
rotation_x,
|
||||
rotation_y,
|
||||
rotation_z,
|
||||
temp);
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(100));
|
||||
vTaskDelay(pdMS_TO_TICKS(200));
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user