From da33911aa30ab3e46df3b4e16720a2a74fa5aa42 Mon Sep 17 00:00:00 2001 From: sfja Date: Sat, 28 Mar 2026 16:53:27 +0100 Subject: [PATCH] extract mpu --- skateboard/main/CMakeLists.txt | 2 +- skateboard/main/app_mpu.c | 71 ++++++++++++++++++++++ skateboard/main/app_mpu.h | 12 ++++ skateboard/main/{wifi.c => app_wifi.c} | 2 +- skateboard/main/{wifi.h => app_wifi.h} | 0 skateboard/main/skateboard.c | 83 ++++++++------------------ 6 files changed, 111 insertions(+), 59 deletions(-) create mode 100644 skateboard/main/app_mpu.c create mode 100644 skateboard/main/app_mpu.h rename skateboard/main/{wifi.c => app_wifi.c} (99%) rename skateboard/main/{wifi.h => app_wifi.h} (100%) diff --git a/skateboard/main/CMakeLists.txt b/skateboard/main/CMakeLists.txt index 7fbd8bb..46cb31b 100644 --- a/skateboard/main/CMakeLists.txt +++ b/skateboard/main/CMakeLists.txt @@ -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 ".") diff --git a/skateboard/main/app_mpu.c b/skateboard/main/app_mpu.c new file mode 100644 index 0000000..18bcc09 --- /dev/null +++ b/skateboard/main/app_mpu.c @@ -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)); +} diff --git a/skateboard/main/app_mpu.h b/skateboard/main/app_mpu.h new file mode 100644 index 0000000..fde7ebb --- /dev/null +++ b/skateboard/main/app_mpu.h @@ -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); diff --git a/skateboard/main/wifi.c b/skateboard/main/app_wifi.c similarity index 99% rename from skateboard/main/wifi.c rename to skateboard/main/app_wifi.c index 2e05dd4..dcd3d2a 100644 --- a/skateboard/main/wifi.c +++ b/skateboard/main/app_wifi.c @@ -1,4 +1,4 @@ -#include "wifi.h" +#include "app_wifi.h" #include "esp_log.h" #include "esp_wifi.h" #include "freertos/idf_additions.h" diff --git a/skateboard/main/wifi.h b/skateboard/main/app_wifi.h similarity index 100% rename from skateboard/main/wifi.h rename to skateboard/main/app_wifi.h diff --git a/skateboard/main/skateboard.c b/skateboard/main/skateboard.c index 7242a36..c8c649c 100644 --- a/skateboard/main/skateboard.c +++ b/skateboard/main/skateboard.c @@ -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 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)); } }