#include <WiFi.h>
#include <HTTPClient.h>
#include <Wire.h>
#define MPU6050_ADDR 0x68
// Define threshold values for gestures
#define THRESHOLD_X 15000
#define THRESHOLD_Y 15000
#define THRESHOLD_Z 15000
const char* ssid = "Galaxy A13 0634";
const char* password = "Thenmozhi24";
const char* serverURL = " https://ca07-2409-40f4-2040-bc04-4414-a5d0-3671-4108.ngrok-free.app "; // Replace with your actual ngrok URL
void setup() {
Serial.begin(115200);
Wire.begin();
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Wake up the MPU6050
Wire.beginTransmission(MPU6050_ADDR);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // Wake up MPU6050
Wire.endTransmission(true);
}
void loop() {
delay(100);
// Read accelerometer data
Wire.beginTransmission(MPU6050_ADDR);
Wire.write(0x3B); // Starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_ADDR, 6, true);
int16_t ax = Wire.read() << 8 | Wire.read();
int16_t ay = Wire.read() << 8 | Wire.read();
int16_t az = Wire.read() << 8 | Wire.read();
// Read gyroscope data
Wire.beginTransmission(MPU6050_ADDR);
Wire.write(0x43); // Starting with register 0x43 (GYRO_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_ADDR, 6, true);
int16_t gx = Wire.read() << 8 | Wire.read();
int16_t gy = Wire.read() << 8 | Wire.read();
int16_t gz = Wire.read() << 8 | Wire.read();
// Gesture detection and action mapping
String gesturePayload;
if (ax > THRESHOLD_X) {
Serial.println("Next Track");
gesturePayload = "{\"gesture\":\"next_track\"}";
} else if (ax < -THRESHOLD_X) {
Serial.println("Previous Track");
gesturePayload = "{\"gesture\":\"previous_track\"}";
} else if (ay > THRESHOLD_Y) {
Serial.println("Volume Up");
gesturePayload = "{\"gesture\":\"volume_up\"}";
} else if (ay < -THRESHOLD_Y) {
Serial.println("Volume Down");
gesturePayload = "{\"gesture\":\"volume_down\"}";
} else if (az > THRESHOLD_Z) {
Serial.println("Next Playlist");
gesturePayload = "{\"gesture\":\"next_playlist\"}";
} else if (az < -THRESHOLD_Z) {
Serial.println("Previous Playlist");
gesturePayload = "{\"gesture\":\"previous_playlist\"}";
} else if (gz > THRESHOLD_Z) {
Serial.println("Play/Pause Toggle");
gesturePayload = "{\"gesture\":\"play_pause\"}";
}
// Send gesture data to the server
if (WiFi.status() == WL_CONNECTED && !gesturePayload.isEmpty()) {
HTTPClient http;
http.begin(serverURL);
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.POST(gesturePayload);
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println(httpResponseCode);
Serial.println(response);
} else {
Serial.print("Error on sending POST request: ");
Serial.println(httpResponseCode);
}
http.end();
}
delay(500);
}