From 6886e11054c9af2f891ab999a072e15f02ace50a Mon Sep 17 00:00:00 2001 From: Ryan Butler Date: Sun, 3 Jul 2022 18:28:12 -0500 Subject: [PATCH] Fix esp32c3 build (#163) --- ci/build.py | 8 ----- ci/devices.json | 7 +++- lib/ICM20948/ICM_20948.cpp | 54 ++++++++++++++--------------- lib/ICM20948/ICM_20948.h | 36 +++++++++---------- lib/math/basis.h | 2 -- lib/math/quat.cpp | 20 ----------- platformio-tools.ini | 14 ++++---- platformio.ini | 10 +++--- src/configuration/Configuration.cpp | 10 +----- src/consts.h | 1 + src/defines.h | 8 +++++ src/sensors/icm20948sensor.cpp | 2 +- 12 files changed, 74 insertions(+), 98 deletions(-) diff --git a/ci/build.py b/ci/build.py index 9551d29..e6d7862 100644 --- a/ci/build.py +++ b/ci/build.py @@ -29,14 +29,6 @@ class DeviceConfiguration: [env:{self.platformio_board}] platform = {self.platform} board = {self.platformio_board}""") - - if self.platform == "espressif32 @ 3.5.0": - section += dedent(""" - lib_deps = - ${env.lib_deps} - lorol/LittleFS_esp32 @ 1.0.6 - """) - return section def filename(self) -> str: diff --git a/ci/devices.json b/ci/devices.json index 0a6473f..9a3cf46 100644 --- a/ci/devices.json +++ b/ci/devices.json @@ -5,8 +5,13 @@ "board": "SLIMEVR" }, { - "platform": "espressif32 @ 3.5.0", + "platform": "espressif32 @ 4.4.0", "platformio_board": "esp32dev", "board": "WROOM32" + }, + { + "platform": "espressif32 @ 4.4.0", + "platformio_board": "lolin_c3_mini", + "board": "SLIMEVR" } ] diff --git a/lib/ICM20948/ICM_20948.cpp b/lib/ICM20948/ICM_20948.cpp index a98da5c..31bb714 100644 --- a/lib/ICM20948/ICM_20948.cpp +++ b/lib/ICM20948/ICM_20948.cpp @@ -240,7 +240,7 @@ float ICM_20948::getGyrDPS(int16_t axis_val) } //Gyro Bias -ICM_20948_Status_e ICM_20948::SetBiasGyroX( int newValue) +ICM_20948_Status_e ICM_20948::SetBiasGyroX( int32_t newValue) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char gyro_bias_reg[4]; @@ -252,7 +252,7 @@ ICM_20948_Status_e ICM_20948::SetBiasGyroX( int newValue) return result; } -ICM_20948_Status_e ICM_20948::SetBiasGyroY( int newValue) +ICM_20948_Status_e ICM_20948::SetBiasGyroY( int32_t newValue) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char gyro_bias_reg[4]; @@ -264,7 +264,7 @@ ICM_20948_Status_e ICM_20948::SetBiasGyroY( int newValue) return result; } -ICM_20948_Status_e ICM_20948::SetBiasGyroZ( int newValue) +ICM_20948_Status_e ICM_20948::SetBiasGyroZ( int32_t newValue) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char gyro_bias_reg[4]; @@ -276,34 +276,34 @@ ICM_20948_Status_e ICM_20948::SetBiasGyroZ( int newValue) return result; } -ICM_20948_Status_e ICM_20948::GetBiasGyroX( int* bias) +ICM_20948_Status_e ICM_20948::GetBiasGyroX( int32_t* bias) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char bias_data[4] = { 0 }; result = inv_icm20948_read_mems(&_device, GYRO_BIAS_X, 4, bias_data); - bias[0] = (int)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); + bias[0] = (int32_t)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); return result; } -ICM_20948_Status_e ICM_20948::GetBiasGyroY( int* bias) +ICM_20948_Status_e ICM_20948::GetBiasGyroY( int32_t* bias) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char bias_data[4] = { 0 }; result = inv_icm20948_read_mems(&_device, GYRO_BIAS_Y, 4, bias_data); - bias[0] = (int)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); + bias[0] = (int32_t)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); return result; } -ICM_20948_Status_e ICM_20948::GetBiasGyroZ( int* bias) +ICM_20948_Status_e ICM_20948::GetBiasGyroZ( int32_t* bias) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char bias_data[4] = { 0 }; result = inv_icm20948_read_mems(&_device, GYRO_BIAS_Z, 4, bias_data); - bias[0] = (int)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); + bias[0] = (int32_t)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); return result; } //Accel Bias -ICM_20948_Status_e ICM_20948::SetBiasAccelX( int newValue) +ICM_20948_Status_e ICM_20948::SetBiasAccelX( int32_t newValue) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char accel_bias_reg[4]; @@ -315,7 +315,7 @@ ICM_20948_Status_e ICM_20948::SetBiasAccelX( int newValue) return result; } -ICM_20948_Status_e ICM_20948::SetBiasAccelY( int newValue) +ICM_20948_Status_e ICM_20948::SetBiasAccelY( int32_t newValue) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char accel_bias_reg[4]; @@ -327,7 +327,7 @@ ICM_20948_Status_e ICM_20948::SetBiasAccelY( int newValue) return result; } -ICM_20948_Status_e ICM_20948::SetBiasAccelZ( int newValue) +ICM_20948_Status_e ICM_20948::SetBiasAccelZ( int32_t newValue) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char accel_bias_reg[4]; @@ -339,34 +339,34 @@ ICM_20948_Status_e ICM_20948::SetBiasAccelZ( int newValue) return result; } -ICM_20948_Status_e ICM_20948::GetBiasAccelX( int* bias) +ICM_20948_Status_e ICM_20948::GetBiasAccelX( int32_t* bias) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char bias_data[4] = { 0 }; result = inv_icm20948_read_mems(&_device, ACCEL_BIAS_X, 4, bias_data); - bias[0] = (int)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); + bias[0] = (int32_t)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); return result; } -ICM_20948_Status_e ICM_20948::GetBiasAccelY( int* bias) +ICM_20948_Status_e ICM_20948::GetBiasAccelY( int32_t* bias) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char bias_data[4] = { 0 }; result = inv_icm20948_read_mems(&_device, ACCEL_BIAS_Y, 4, bias_data); - bias[0] = (int)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); + bias[0] = (int32_t)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); return result; } -ICM_20948_Status_e ICM_20948::GetBiasAccelZ( int* bias) +ICM_20948_Status_e ICM_20948::GetBiasAccelZ( int32_t* bias) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char bias_data[4] = { 0 }; result = inv_icm20948_read_mems(&_device, ACCEL_BIAS_Z, 4, bias_data); - bias[0] = (int)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); + bias[0] = (int32_t)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); return result; } //CPass Bias -ICM_20948_Status_e ICM_20948::SetBiasCPassX( int newValue) +ICM_20948_Status_e ICM_20948::SetBiasCPassX( int32_t newValue) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char cpass_bias_reg[4]; @@ -378,7 +378,7 @@ ICM_20948_Status_e ICM_20948::SetBiasCPassX( int newValue) return result; } -ICM_20948_Status_e ICM_20948::SetBiasCPassY( int newValue) +ICM_20948_Status_e ICM_20948::SetBiasCPassY( int32_t newValue) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char cpass_bias_reg[4]; @@ -390,7 +390,7 @@ ICM_20948_Status_e ICM_20948::SetBiasCPassY( int newValue) return result; } -ICM_20948_Status_e ICM_20948::SetBiasCPassZ( int newValue) +ICM_20948_Status_e ICM_20948::SetBiasCPassZ( int32_t newValue) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char cpass_bias_reg[4]; @@ -402,30 +402,30 @@ ICM_20948_Status_e ICM_20948::SetBiasCPassZ( int newValue) return result; } -ICM_20948_Status_e ICM_20948::GetBiasCPassX( int* bias) +ICM_20948_Status_e ICM_20948::GetBiasCPassX( int32_t* bias) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char bias_data[4] = { 0 }; result = inv_icm20948_read_mems(&_device, CPASS_BIAS_X, 4, bias_data); - bias[0] = (int)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); + bias[0] = (int32_t)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); return result; } -ICM_20948_Status_e ICM_20948::GetBiasCPassY( int* bias) +ICM_20948_Status_e ICM_20948::GetBiasCPassY( int32_t* bias) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char bias_data[4] = { 0 }; result = inv_icm20948_read_mems(&_device, CPASS_BIAS_Y, 4, bias_data); - bias[0] = (int)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); + bias[0] = (int32_t)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); return result; } -ICM_20948_Status_e ICM_20948::GetBiasCPassZ( int* bias) +ICM_20948_Status_e ICM_20948::GetBiasCPassZ( int32_t* bias) { ICM_20948_Status_e result = ICM_20948_Stat_Ok; unsigned char bias_data[4] = { 0 }; result = inv_icm20948_read_mems(&_device, CPASS_BIAS_Z, 4, bias_data); - bias[0] = (int)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); + bias[0] = (int32_t)(bias_data[0] << 24) | (bias_data[1] << 16) | (bias_data[2] << 8) | (bias_data[3]); return result; } diff --git a/lib/ICM20948/ICM_20948.h b/lib/ICM20948/ICM_20948.h index cb4795e..3e318ef 100644 --- a/lib/ICM20948/ICM_20948.h +++ b/lib/ICM20948/ICM_20948.h @@ -174,26 +174,26 @@ public: //DMP //Gyro Bias - ICM_20948_Status_e SetBiasGyroX( int newValue); - ICM_20948_Status_e SetBiasGyroY( int newValue); - ICM_20948_Status_e SetBiasGyroZ( int newValue); - ICM_20948_Status_e GetBiasGyroX( int* bias); - ICM_20948_Status_e GetBiasGyroY( int* bias); - ICM_20948_Status_e GetBiasGyroZ( int* bias); + ICM_20948_Status_e SetBiasGyroX( int32_t newValue); + ICM_20948_Status_e SetBiasGyroY( int32_t newValue); + ICM_20948_Status_e SetBiasGyroZ( int32_t newValue); + ICM_20948_Status_e GetBiasGyroX( int32_t* bias); + ICM_20948_Status_e GetBiasGyroY( int32_t* bias); + ICM_20948_Status_e GetBiasGyroZ( int32_t* bias); //Accel Bias - ICM_20948_Status_e SetBiasAccelX( int newValue); - ICM_20948_Status_e SetBiasAccelY( int newValue); - ICM_20948_Status_e SetBiasAccelZ( int newValue); - ICM_20948_Status_e GetBiasAccelX( int* bias); - ICM_20948_Status_e GetBiasAccelY( int* bias); - ICM_20948_Status_e GetBiasAccelZ( int* bias); + ICM_20948_Status_e SetBiasAccelX( int32_t newValue); + ICM_20948_Status_e SetBiasAccelY( int32_t newValue); + ICM_20948_Status_e SetBiasAccelZ( int32_t newValue); + ICM_20948_Status_e GetBiasAccelX( int32_t* bias); + ICM_20948_Status_e GetBiasAccelY( int32_t* bias); + ICM_20948_Status_e GetBiasAccelZ( int32_t* bias); //CPass Bias - ICM_20948_Status_e SetBiasCPassX( int newValue); - ICM_20948_Status_e SetBiasCPassY( int newValue); - ICM_20948_Status_e SetBiasCPassZ( int newValue); - ICM_20948_Status_e GetBiasCPassX( int* bias); - ICM_20948_Status_e GetBiasCPassY( int* bias); - ICM_20948_Status_e GetBiasCPassZ( int* bias); + ICM_20948_Status_e SetBiasCPassX( int32_t newValue); + ICM_20948_Status_e SetBiasCPassY( int32_t newValue); + ICM_20948_Status_e SetBiasCPassZ( int32_t newValue); + ICM_20948_Status_e GetBiasCPassX( int32_t* bias); + ICM_20948_Status_e GetBiasCPassY( int32_t* bias); + ICM_20948_Status_e GetBiasCPassZ( int32_t* bias); // Done: // Configure DMP start address through PRGM_STRT_ADDRH/PRGM_STRT_ADDRL diff --git a/lib/math/basis.h b/lib/math/basis.h index b76e261..50ac88f 100644 --- a/lib/math/basis.h +++ b/lib/math/basis.h @@ -109,7 +109,6 @@ public: void set_euler_zyx(const Vector3& p_euler); Quat get_quat() const; - void set_quat(const Quat& p_quat); Vector3 get_euler() const { return get_euler_yxz(); } void set_euler(const Vector3& p_euler) { set_euler_yxz(p_euler); } @@ -240,7 +239,6 @@ public: operator Quat() const { return get_quat(); } - Basis(const Quat& p_quat) { set_quat(p_quat); }; Basis(const Quat& p_quat, const Vector3& p_scale) { set_quat_scale(p_quat, p_scale); } Basis(const Vector3& p_euler) { set_euler(p_euler); } diff --git a/lib/math/quat.cpp b/lib/math/quat.cpp index c40e9ed..af78fa3 100644 --- a/lib/math/quat.cpp +++ b/lib/math/quat.cpp @@ -57,14 +57,6 @@ void Quat::set_euler_xyz(const Vector3& p_euler) { -sin_a1 * sin_a2 * sin_a3 + cos_a1 * cos_a2 * cos_a3); } -// get_euler_xyz returns a vector containing the Euler angles in the format -// (ax,ay,az), where ax is the angle of rotation around x axis, -// and similar for other axes. -// This implementation uses XYZ convention (Z is the first rotation). -Vector3 Quat::get_euler_xyz() const { - Basis m(*this); - return m.get_euler_xyz(); -} // set_euler_yxz expects a vector containing the Euler angles in the format // (ax,ay,az), where ax is the angle of rotation around x axis, @@ -92,18 +84,6 @@ void Quat::set_euler_yxz(const Vector3& p_euler) { sin_a1 * sin_a2 * sin_a3 + cos_a1 * cos_a2 * cos_a3); } -// get_euler_yxz returns a vector containing the Euler angles in the format -// (ax,ay,az), where ax is the angle of rotation around x axis, -// and similar for other axes. -// This implementation uses YXZ convention (Z is the first rotation). -Vector3 Quat::get_euler_yxz() const { -#ifdef MATH_CHECKS - ERR_FAIL_COND_V_MSG(!is_normalized(), Vector3(0, 0, 0), "The quaternion must be normalized."); -#endif - Basis m(*this); - return m.get_euler_yxz(); -} - void Quat::operator*=(const Quat& q) { set(w * q.x + x * q.w + y * q.z - z * q.y, w * q.y + y * q.w + z * q.x - x * q.z, diff --git a/platformio-tools.ini b/platformio-tools.ini index 3f9cb71..84e46a8 100644 --- a/platformio-tools.ini +++ b/platformio-tools.ini @@ -28,15 +28,13 @@ platform = espressif8266 board = esp12e [env:BOARD_WROOM32] -lib_deps= - ${env.lib_deps} - lorol/LittleFS_esp32@1.0.6 -platform = espressif32@3.5.0 +platform = espressif32@4.4.0 board = esp32dev [env:BOARD_ESP01] -lib_deps= - ${env.lib_deps} - lorol/LittleFS_esp32@1.0.6 -platform = espressif32@3.5.0 +platform = espressif32@4.4.0 board = esp32dev + +[env:BOARD_LOLIN_C3_MINI] +platform = espressif32@4.4.0 +board = lolin_c3_mini diff --git a/platformio.ini b/platformio.ini index 1172a7d..1772aa0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -57,10 +57,12 @@ upload_speed = 921600 ; Uncomment below if you want to build for esp32 ; Check your board name at https://docs.platformio.org/en/latest/platforms/espressif32.html#boards ; [env:esp32] -; lib_deps = -; ${env.lib_deps} -; lorol/LittleFS_esp32 @ 1.0.6 -; platform = espressif32 @ 3.5.0 +; platform = espressif32 @ 4.4.0 ; board = esp32dev ; Comment out this line below if you have any trouble uploading the firmware - and if it has a CP2102 on it (a square chip next to the usb port): change to 3000000 (3 million) for even faster upload speed ; upload_speed = 921600 + +; If you want to use a esp32c3, you can use this (experimental) +;[env:esp32c3] +;platform = espressif32 @ 4.4.0 +;board = lolin_c3_mini diff --git a/src/configuration/Configuration.cpp b/src/configuration/Configuration.cpp index 50f50fc..c85e570 100644 --- a/src/configuration/Configuration.cpp +++ b/src/configuration/Configuration.cpp @@ -21,15 +21,7 @@ THE SOFTWARE. */ -#ifdef ESP32 - // #define CONFIG_LITTLEFS_SPIFFS_COMPAT 1 - // #define CONFIG_LITTLEFS_LFS_YES_TRACE - // #define LFS_YES_TRACE - #include - #define LittleFS LITTLEFS -#else - #include -#endif +#include #include "Configuration.h" #include "consts.h" diff --git a/src/consts.h b/src/consts.h index 85953f9..efb1ade 100644 --- a/src/consts.h +++ b/src/consts.h @@ -43,6 +43,7 @@ #define BOARD_TTGO_TBASE 7 #define BOARD_ESP01 8 #define BOARD_SLIMEVR 9 +#define BOARD_LOLIN_C3_MINI 10 #define BAT_EXTERNAL 1 #define BAT_INTERNAL 2 diff --git a/src/defines.h b/src/defines.h index 17e0b24..052bb1e 100644 --- a/src/defines.h +++ b/src/defines.h @@ -110,4 +110,12 @@ #define PIN_BATTERY_LEVEL 36 // #define LED_PIN 2 // #define LED_INVERTED false +#elif BOARD == BOARD_LOLIN_C3_MINI + #define PIN_IMU_SDA 10 + #define PIN_IMU_SCL 8 + #define PIN_IMU_INT 6 + #define PIN_IMU_INT_2 7 + #define PIN_BATTERY_LEVEL 3 +// #define LED_PIN 2 +// #define LED_INVERTED false #endif diff --git a/src/sensors/icm20948sensor.cpp b/src/sensors/icm20948sensor.cpp index b619d24..912ca5a 100644 --- a/src/sensors/icm20948sensor.cpp +++ b/src/sensors/icm20948sensor.cpp @@ -121,7 +121,7 @@ void ICM20948Sensor::load_bias() { imu.SetBiasCPassY(90); imu.SetBiasCPassZ(90); - int bias_gyro[3], bias_accel[3], bias_compass[3]; + int32_t bias_gyro[3], bias_accel[3], bias_compass[3]; // Reloads all bias from memory imu.GetBiasGyroX(&bias_gyro[0]);