#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
// Adafruit.io MQTT credentials
const char* mqtt_server = "io.adafruit.com";
const char* mqtt_username = "leire2";
const char* mqtt_password = "aio_YiyR80K9nscOx0g7f6VVGFHgYzrD";
WiFiClient espClient;
// Create an MPU6050 object
Adafruit_MPU6050 mpu;
//MQTT client
Adafruit_MQTT_Client mqtt(&espClient, mqtt_server, 1883, mqtt_username, mqtt_username, mqtt_password);
//To publish the data
Adafruit_MQTT_Publish temp = Adafruit_MQTT_Publish(&mqtt, "leire2/feeds/actividad.temp");
Adafruit_MQTT_Publish x = Adafruit_MQTT_Publish(&mqtt, "leire2/feeds/actividad.x");
Adafruit_MQTT_Publish y = Adafruit_MQTT_Publish(&mqtt, "leire2/feeds/actividad.y");
Adafruit_MQTT_Publish z = Adafruit_MQTT_Publish(&mqtt, "leire2/feeds/actividad.z");
void setup() {
Serial.begin(115200);
// Initialize I2C communication
Wire.begin(21, 22); // SDA=21, SCL=22 are the default pins for ESP32
// Initialize WiFi connection
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Try to initialize the MPU6050 sensor
if (!mpu.begin()) {
Serial.println("MPU6050 not connected!");
delay(1000);
}
Serial.println("MPU6050 ready!");
}
// Create event objects
sensors_event_t accel_event;
sensors_event_t temp_event;
void loop() {
MQTT_connect();
// ping the server to keep the mqtt connection alive
// NOT required if you are publishing once every KEEPALIVE seconds
if(! mqtt.ping()) {
mqtt.disconnect();
}
// Get a new accelerometer event
mpu.getAccelerometerSensor()->getEvent(&accel_event);
mpu.getTemperatureSensor()->getEvent(&temp_event);
// Print out the values
Serial.print("[");
Serial.print(millis());
Serial.print("] X: ");
Serial.print(accel_event.acceleration.x);
Serial.print(", Y: ");
Serial.print(accel_event.acceleration.y);
Serial.print(", Z: ");
Serial.print(accel_event.acceleration.z);
Serial.println(" m/s^2");
// Print out the temperature value
Serial.print("Temperature: ");
Serial.print(temp_event.temperature);
Serial.println(" °C");
//Publish
temp.publish(temp_event.temperature);
x.publish(accel_event.acceleration.x);
y.publish(accel_event.acceleration.y);
z.publish(accel_event.acceleration.z);
// Wait for a short delay before getting new data
delay(2000);
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.println("The server MQTT has sent something");
}
//To connect to mqtt
void MQTT_connect() {
int8_t ret;
// Stop if already connected.
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 10 seconds...");
mqtt.disconnect();
delay(10000); // wait 10 seconds
retries--;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1);
}
}
Serial.println("MQTT Connected!");
}