#include <FS.h>
#include "SPIFFS.h"
// Definição dos pinos
#define LED_PIN 2 // GPIO2 (LED interno do ESP32)
#define BUTTON_PIN 36 // GPIO12 (botão com pull-up interno)
// Arquivo para armazenar o estado do LED
String filePath = "/led_state.txt";
void setup() {
Serial.begin(115200);
// Configura os pinos
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Configura pull-up interno
// Inicializa o sistema de arquivos SPIFFS
if (!SPIFFS.begin(true)) { // 'true' formata se montagem falhar
Serial.println("Erro ao montar SPIFFS");
return; // Encerra se não conseguir montar
}
// Lê e aplica o último estado salvo do LED
String lastState = readFile(filePath);
if (lastState == "ON") {
digitalWrite(LED_PIN, HIGH);
Serial.println("LED iniciado LIGADO (estado anterior)");
} else {
digitalWrite(LED_PIN, LOW);
Serial.println("LED iniciado DESLIGADO (estado anterior)");
}
}
void loop() {
static bool buttonPressed = false; // Flag para estado do botão
static unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 50; // Tempo de debounce em ms
// Lógica de debounce para o botão
if (digitalRead(BUTTON_PIN) == LOW) { // Botão pressionado (LOW por causa do pull-up)
if (!buttonPressed && (millis() - lastDebounceTime) > debounceDelay) {
buttonPressed = true;
lastDebounceTime = millis();
// Inverte o estado atual do LED
bool currentState = digitalRead(LED_PIN);
digitalWrite(LED_PIN, !currentState);
// Salva o novo estado no arquivo
writeFile(currentState ? "OFF" : "ON", filePath);
Serial.println(currentState ? "LED desligado - estado salvo" : "LED ligado - estado salvo");
}
} else {
buttonPressed = false; // Botão liberado
}
delay(10); // Pequeno delay para evitar sobrecarga
}
// Função para escrever no arquivo
void writeFile(String state, String path) {
File file = SPIFFS.open(path, "w"); // Abre no modo escrita (sobrescreve)
if (!file) {
Serial.println("Erro ao abrir arquivo para escrita!");
return;
}
file.print(state); // Escreve o estado
file.close(); // Fecha o arquivo
}
// Função para ler o arquivo
String readFile(String path) {
// Se arquivo não existe, cria com estado padrão OFF
if (!SPIFFS.exists(path)) {
Serial.println("Arquivo não existe, criando...");
writeFile("OFF", path);
return "OFF";
}
File file = SPIFFS.open(path, "r"); // Abre no modo leitura
if (!file) {
Serial.println("Erro ao abrir arquivo para leitura!");
return "OFF"; // Retorna padrão se falhar
}
String content = file.readString(); // Lê conteúdo
file.close();
content.trim(); // Remove espaços/novas linhas
return content;
}
//--------------------------
// #include <FS.h>
// #include "SPIFFS.h"
// #include <Adafruit_NeoPixel.h>
// #define BUTTON_PIN 12 // GPIO12 para o botão
// #define RGB_LED_PIN 48 // GPIO48 para o LED RGB (ajuste conforme sua placa)
// #define NUMPIXELS 1 // Número de LEDs na fita (no caso, apenas 1)
// Adafruit_NeoPixel pixels(NUMPIXELS, RGB_LED_PIN, NEO_GRB + NEO_KHZ800);
// String filePath = "/led_state.txt"; // Arquivo para armazenar o estado
// void setup() {
// Serial.begin(115200);
// pinMode(BUTTON_PIN, INPUT_PULLUP);
// // Inicializa o LED RGB
// pixels.begin();
// pixels.setBrightness(50); // Brilho moderado (0-255)
// // Inicializa SPIFFS
// if (!SPIFFS.begin(true)) {
// Serial.println("Erro ao montar SPIFFS");
// return;
// }
// // Recupera e aplica o último estado
// String lastState = readFile(filePath);
// if (lastState == "ON") {
// setRGBColor(255, 0, 0); // Vermelho como estado ligado
// Serial.println("LED iniciado LIGADO (vermelho)");
// } else {
// setRGBColor(0, 0, 0); // Desligado
// Serial.println("LED iniciado DESLIGADO");
// }
// }
// void loop() {
// static bool buttonPressed = false;
// static unsigned long lastDebounceTime = 0;
// const unsigned long debounceDelay = 50;
// // Lógica do botão com debounce
// if (digitalRead(BUTTON_PIN) == LOW) {
// if (!buttonPressed && (millis() - lastDebounceTime) > debounceDelay) {
// buttonPressed = true;
// lastDebounceTime = millis();
// // Verifica estado atual e alterna
// bool isOn = (pixels.getPixelColor(0) != 0);
// if (isOn) {
// setRGBColor(0, 0, 0); // Desliga
// writeFile("OFF", filePath);
// Serial.println("LED desligado - estado salvo");
// } else {
// setRGBColor(255, 0, 0); // Liga (vermelho)
// writeFile("ON", filePath);
// Serial.println("LED ligado (vermelho) - estado salvo");
// }
// }
// } else {
// buttonPressed = false;
// }
// delay(10);
// }
// // Função para definir cor do RGB
// void setRGBColor(uint8_t r, uint8_t g, uint8_t b) {
// pixels.setPixelColor(0, pixels.Color(r, g, b));
// pixels.show();
// }
// // Funções para manipulação de arquivos (mantidas como no código original)
// void writeFile(String state, String path) {
// File file = SPIFFS.open(path, "w");
// if (!file) {
// Serial.println("Erro ao abrir arquivo para escrita!");
// return;
// }
// file.print(state);
// file.close();
// }
// String readFile(String path) {
// if (!SPIFFS.exists(path)) {
// Serial.println("Arquivo não existe, criando...");
// writeFile("OFF", path);
// return "OFF";
// }
// File file = SPIFFS.open(path, "r");
// if (!file) {
// Serial.println("Erro ao abrir arquivo para leitura!");
// return "OFF";
// }
// String content = file.readString();
// file.close();
// content.trim();
// return content;
// }