Skip to content

Commit

Permalink
Merge pull request #3 from TorturedEngineersDept/esp32-sensor-tests
Browse files Browse the repository at this point in the history
ESP32<->MPU6050 Connection Automated Test
  • Loading branch information
saturn691 authored May 23, 2024
2 parents dacac76 + f3870ad commit ff7e72c
Show file tree
Hide file tree
Showing 12 changed files with 752 additions and 12 deletions.
8 changes: 8 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Editor configuration, see http://editorconfig.org
root = true

[*]
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"editor.formatOnSave": true,
}
16 changes: 8 additions & 8 deletions esp32-tests/adc_veer/src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
#include <Arduino.h>

// Define the pins connected to the PCB
#define VB_PIN 34 // Analog pin for battery voltage
#define I5_PIN 35 // Analog pin for 5V current sense
#define IM_PIN 32 // Analog pin for motor current sense
#define VB_PIN 34 // Analog pin for battery voltage
#define I5_PIN 35 // Analog pin for 5V current sense
#define IM_PIN 32 // Analog pin for motor current sense

// Constants for voltage dividers and calibration
const float VOLTAGE_DIVIDER_RATIO =
0.167; // Example ratio based on 100k and 20k resistors
const float CURRENT_SENSE_RESISTOR = 0.1; // Example value in ohms
const float ADC_MAX_VOLTAGE = 3.3; // Maximum voltage for the ADC (ESP32)
const int ADC_RESOLUTION = 4096; // 12-bit ADC resolution
0.167; // Example ratio based on 100k and 20k resistors
const float CURRENT_SENSE_RESISTOR = 0.1; // Example value in ohms
const float ADC_MAX_VOLTAGE = 3.3; // Maximum voltage for the ADC (ESP32)
const int ADC_RESOLUTION = 4096; // 12-bit ADC resolution

void setup()
{
Serial.begin(115200);
analogReadResolution(12); // Set ADC resolution to 12-bit
analogReadResolution(12); // Set ADC resolution to 12-bit
}

void loop()
Expand Down
5 changes: 3 additions & 2 deletions esp32-tests/single_stepper_motor/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ void setup()
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}

void loop()
{
// Set motor direction clockwise
Expand All @@ -37,7 +38,7 @@ void loop()
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
delay(1000); // Wait a second
delay(1000); // Wait a second

// Set motor direction counterclockwise
digitalWrite(dirPin, LOW);
Expand All @@ -50,5 +51,5 @@ void loop()
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
delay(1000); // Wait a second
delay(1000); // Wait a second
}
521 changes: 521 additions & 0 deletions esp32/.vscode/c_cpp_properties.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion esp32/.vscode/extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
"unwantedRecommendations": [
"ms-vscode.cpptools-extension-pack"
]
}
}
44 changes: 44 additions & 0 deletions esp32/.vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY
//
// PlatformIO Debugging Solution
//
// Documentation: https://docs.platformio.org/en/latest/plus/debugging.html
// Configuration: https://docs.platformio.org/en/latest/projectconf/sections/env/options/debug/index.html

{
"version": "0.2.0",
"configurations": [
{
"type": "platformio-debug",
"request": "launch",
"name": "PIO Debug",
"executable": "/home/sanjit/Documents/y2_eie/summer-project/BalanceBot/esp32/.pio/build/esp-wrover-kit/firmware.elf",
"projectEnvName": "esp-wrover-kit",
"toolchainBinDir": "/home/sanjit/.platformio/packages/toolchain-xtensa-esp32/bin",
"internalConsoleOptions": "openOnSessionStart",
"preLaunchTask": {
"type": "PlatformIO",
"task": "Pre-Debug"
}
},
{
"type": "platformio-debug",
"request": "launch",
"name": "PIO Debug (skip Pre-Debug)",
"executable": "/home/sanjit/Documents/y2_eie/summer-project/BalanceBot/esp32/.pio/build/esp-wrover-kit/firmware.elf",
"projectEnvName": "esp-wrover-kit",
"toolchainBinDir": "/home/sanjit/.platformio/packages/toolchain-xtensa-esp32/bin",
"internalConsoleOptions": "openOnSessionStart"
},
{
"type": "platformio-debug",
"request": "launch",
"name": "PIO Debug (without uploading)",
"executable": "/home/sanjit/Documents/y2_eie/summer-project/BalanceBot/esp32/.pio/build/esp-wrover-kit/firmware.elf",
"projectEnvName": "esp-wrover-kit",
"toolchainBinDir": "/home/sanjit/.platformio/packages/toolchain-xtensa-esp32/bin",
"internalConsoleOptions": "openOnSessionStart",
"loadMode": "manual"
}
]
}
99 changes: 99 additions & 0 deletions esp32/lib/MPU6050/MPU6050.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
#include "MPU6050.h"

MPU6050::MPU6050()
{
}

bool MPU6050::begin(unsigned long timeout)
{
unsigned long start = 0;
Serial.println("Adafruit MPU6050 test!");

// Try to initialize!
if (!mpu.begin())
{
Serial.println("Failed to find MPU6050 chip");
while (start < timeout)
{
delay(10);
start += 10;
}
}
if (!mpu.begin())
{
return false;
}

Serial.println("MPU6050 Found!");

mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
Serial.print("Accelerometer range set to: ");
switch (mpu.getAccelerometerRange())
{
case MPU6050_RANGE_2_G:
Serial.println("+-2G");
break;
case MPU6050_RANGE_4_G:
Serial.println("+-4G");
break;
case MPU6050_RANGE_8_G:
Serial.println("+-8G");
break;
case MPU6050_RANGE_16_G:
Serial.println("+-16G");
break;
}

mpu.setGyroRange(MPU6050_RANGE_500_DEG);
Serial.print("Gyro range set to: ");
switch (mpu.getGyroRange())
{
case MPU6050_RANGE_250_DEG:
Serial.println("+- 250 deg/s");
break;
case MPU6050_RANGE_500_DEG:
Serial.println("+- 500 deg/s");
break;
case MPU6050_RANGE_1000_DEG:
Serial.println("+- 1000 deg/s");
break;
case MPU6050_RANGE_2000_DEG:
Serial.println("+- 2000 deg/s");
break;
}

mpu.setFilterBandwidth(MPU6050_BAND_5_HZ);
Serial.print("Filter bandwidth set to: ");
switch (mpu.getFilterBandwidth())
{
case MPU6050_BAND_260_HZ:
Serial.println("260 Hz");
break;
case MPU6050_BAND_184_HZ:
Serial.println("184 Hz");
break;
case MPU6050_BAND_94_HZ:
Serial.println("94 Hz");
break;
case MPU6050_BAND_44_HZ:
Serial.println("44 Hz");
break;
case MPU6050_BAND_21_HZ:
Serial.println("21 Hz");
break;
case MPU6050_BAND_10_HZ:
Serial.println("10 Hz");
break;
case MPU6050_BAND_5_HZ:
Serial.println("5 Hz");
break;
}

Serial.println("");
return true;
}

void MPU6050::getEvent(sensors_event_t *a, sensors_event_t *g, sensors_event_t *temp)
{
mpu.getEvent(a, g, temp);
}
17 changes: 17 additions & 0 deletions esp32/lib/MPU6050/MPU6050.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

#include <Arduino.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

class MPU6050
{
public:
MPU6050();
bool begin(unsigned long timeout = ULONG_MAX);
void getEvent(sensors_event_t *a, sensors_event_t *g, sensors_event_t *temp);

private:
Adafruit_MPU6050 mpu;
};
2 changes: 2 additions & 0 deletions esp32/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ build_flags =
lib_deps =
knolleary/PubSubClient
bblanchon/ArduinoJson
adafruit/Adafruit MPU6050
adafruit/Adafruit Unified Sensor

; Monitor filters for decoding exceptions
monitor_filters = esp32_exception_decoder
Expand Down
6 changes: 5 additions & 1 deletion esp32/src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
// ESP32 Guide: https://RandomNerdTutorials.com/esp32-mpu-6050-accelerometer-gyroscope-arduino/

#include <Arduino.h>
#include "MPU6050.h"
#include "WifiSetup.h"
#include "ESP32Ping.h" // Include the ESP32Ping library

WifiSetup wifi(g_ssid, g_password);

MPU6050 mpu;

void callback(char *topic, byte *payload, unsigned int length);

void setup()
Expand Down
41 changes: 41 additions & 0 deletions esp32/test/mpu6050_accelerometer_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#include "MPU6050.h"
#include <Arduino.h>
#include <Wire.h>
#include <unity.h>

MPU6050 mpu;

void setUp(void)
{
// This will be run before each test
Wire.begin();
TEST_ASSERT_TRUE_MESSAGE(mpu.begin(100), "Failed to initialize MPU6050");
}

void tearDown(void)
{
// This will be run after each test
// Any cleanup code can be put here
}

void test_accelerometer_values(void)
{
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
TEST_ASSERT_TRUE_MESSAGE(a.acceleration.x != 0.0 ||
a.acceleration.y != 0.0 ||
a.acceleration.z != 0.0,
"Accelerometer output is 0,0,0");
}

void setup()
{
delay(2000); // Allow some time for the serial port to initialize
UNITY_BEGIN();
RUN_TEST(test_accelerometer_values);
}

void loop()
{
UNITY_END();
}

0 comments on commit ff7e72c

Please sign in to comment.