// File: esp32_edgepredict.ino
include
include
include
// ===== CONFIGURAÇÕES ===== const char* WIFI_SSID = "SUA_REDE_WIFI"; const char* WIFI_PASSWORD = "SUA_SENHA_WIFI"; const char* MQTT_SERVER = "SEU_BROKER_MQTT_IP"; // Ex: 192.168.0.10 const int MQTT_PORT = 1883; const char* MQTT_TOPIC = "edgepredict/vibration"; const char* DEVICE_ID = "esp32-edge-01";
// Pino do sensor (ADC) se usar piezo; ajuste conforme seu board const int SENSOR_PIN = 34;
// ===== Objetos MQTT/WiFi ===== WiFiClient espClient; PubSubClient client(espClient);
void connectWiFi() { Serial.print("Conectando ao WiFi: "); Serial.println(WIFI_SSID); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nWiFi conectado. IP: " + WiFi.localIP().toString()); }
void connectMQTT() { while (!client.connected()) { Serial.print("Conectando ao MQTT..."); if (client.connect(DEVICE_ID)) { Serial.println("conectado!"); client.subscribe("edgepredict/cmd"); } else { Serial.print("falha, rc="); Serial.print(client.state()); Serial.println(" tentando novamente em 5s"); delay(5000); } } }
void setup() { Serial.begin(115200); delay(1000); connectWiFi(); client.setServer(MQTT_SERVER, MQTT_PORT); connectMQTT(); }
void loop() { if (WiFi.status() != WL_CONNECTED) connectWiFi(); if (!client.connected()) connectMQTT(); client.loop();
// Coleta de janela de amostras (ex.: 512 pontos @ ~2kHz) const int N = 512; static float samples[N]; for (int i = 0; i < N; i++) { int raw = analogRead(SENSOR_PIN); // 0–4095 float v = (float)raw / 4095.0f; // normaliza 0–1 samples[i] = v; delayMicroseconds(500); // ~2 kHz (ajuste conforme necessidade) }
// Publica JSON (amostras + metadados) StaticJsonDocument<2048> doc; doc["device_id"] = DEVICE_ID; doc["ts"] = millis(); JsonArray arr = doc.createNestedArray("samples"); for (int i = 0; i < N; i++) arr.add(samples[i]);
char payload[4096]; serializeJson(doc, payload); client.publish(MQTT_TOPIC, payload); }
Log in or sign up for Devpost to join the conversation.