#include <WiFi.h>
#include <HTTPClient.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <MPU6050.h>
// Wifi
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define WIFI_CHANNEL 6
const char* endpoint = "https://iothubandroid.azurewebsites.net/api/CosmosTriggerIoT?code=MOvDaffkXkYr3iEUo9wz4sn4xvm9P3bAlAo0erImcFq7AzFu8WrfQQ==";
// MPU6050
MPU6050 mpu(0x68);
int16_t ax, ay, az, gx, gy, gz;
// OLED Display
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// I2C
#define I2C_SDA 21
#define I2C_SCL 22
String deviceId;
void setup(void) {
Serial.begin(115200);
Wire.begin(I2C_SDA, I2C_SCL);
mpu.initialize();
if (!mpu.testConnection()) {
Serial.println(F("MPU6050 no conectado"));
while (true);
}
deviceId = WiFi.macAddress();
deviceId.trim(); // Elimina espacios y saltos de línea
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Error al iniciar pantalla OLED"));
while (true);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Conectando WiFi...");
display.display();
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Conectado al WiFi");
display.clearDisplay();
display.setCursor(0, 0);
display.println("WiFi conectado!");
display.display();
delay(1000);
}
void loop(void) {
mpu.getAcceleration(&ax, &ay, &az);
mpu.getRotation(&gx, &gy, &gz);
display.clearDisplay();
display.setCursor(0, 0);
display.print("Ax: "); display.println(ax);
display.print("Ay: "); display.println(ay);
display.print("Az: "); display.println(az);
display.print("Gx: "); display.println(gx);
display.print("Gy: "); display.println(gy);
display.print("Gz: "); display.println(gz);
display.display();
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(endpoint);
http.addHeader("Content-Type", "application/json");
// Generar timestamp en formato ISO 8601
time_t now;
struct tm timeinfo;
char timestamp[25];
time(&now);
gmtime_r(&now, &timeinfo);
strftime(timestamp, sizeof(timestamp), "%Y-%m-%dT%H:%M:%SZ", &timeinfo);
String json = "{";
json += "\"DeviceId\":\"" + deviceId + "\",";
json += "\"timestamp\":\"" + String(timestamp) + "\",";
json += "\"accelX\":" + String(ax / 16384.0, 3) + ",";
json += "\"accelY\":" + String(ay / 16384.0, 3) + ",";
json += "\"accelZ\":" + String(az / 16384.0, 3) + ",";
json += "\"gyroX\":" + String(gx / 131.0, 3) + ",";
json += "\"gyroY\":" + String(gy / 131.0, 3) + ",";
json += "\"gyroZ\":" + String(gz / 131.0, 3) + ",";
json += "\"gpsLat\":4.60971,";
json += "\"gpsLon\":-74.08175,";
json += "\"gpsAlt\":2600.0";
json += "}";
Serial.println("JSON enviado:");
Serial.println(json);
int httpResponseCode = http.POST(json);
Serial.print("POST Response: ");
Serial.println(httpResponseCode);
if (httpResponseCode > 0) {
String payload = http.getString();
Serial.println(payload);
}
http.end();
} else {
Serial.println("WiFi desconectado");
}
delay(5000); // Actualiza pantalla cada 5 segundos
}