#include <WiFi.h>
#define mq7 33
#define led 19
// Wi-Fi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ThingSpeak
const char* host = "api.thingspeak.com";
const char* APIkeyWrite = "R1ZAXAH20EHGP4SV";
// Variáveis globais
float creditosTotais = 0.0; // Créditos acumulados
float precoCredito = 84.0; // Valor de 1 crédito (R$)
float somaCO = 0.0; // Leitura acumulada de CO
void setup() {
Serial.begin(115200);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
Serial.println("Conectando-se ao WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(200);
Serial.print(".");
}
Serial.println("\n✅ Conectado ao WiFi!");
Serial.println("-------------------------");
}
void loop() {
// 1️⃣ Leitura do sensor
int leituraBruta = analogRead(mq7);
float ppm = map(leituraBruta, 0, 4095, 0, 1000);
// 2️⃣ Atualiza acumulador de CO
somaCO += ppm;
// 3️⃣ Calcula créditos e valor monetário
float mgCO2 = ppm * 1.25;
float creditosCarbono = mgCO2 / 1000000.0;
creditosTotais += creditosCarbono;
float valorReais = creditosTotais * precoCredito;
// 4️⃣ Exibe no serial monitor
Serial.println("---- Leitura Atual ----");
Serial.printf("Leitura Bruta MQ-7: %d\n", leituraBruta);
Serial.printf("CO (ppm): %.2f\n", ppm);
Serial.printf("Créditos acumulados: %.8f\n", creditosTotais);
Serial.printf("💰 Valor monetário (R$): %.2f\n", valorReais);
Serial.printf("Leitura acumulada de CO: %.2f\n", somaCO);
Serial.println("------------------------");
// 5️⃣ Envia dados ao ThingSpeak
if (WiFi.status() == WL_CONNECTED) {
WiFiClient client;
if (!client.connect(host, 80)) {
Serial.println("❌ Falha ao conectar ao ThingSpeak!");
return;
}
// Monta URL com todos os fields
String url = "/update?api_key=" + String(APIkeyWrite) +
"&field1=" + String(leituraBruta) +
"&field2=" + String(creditosTotais, 8) +
"&field3=" + String(valorReais, 2) +
"&field4=" + String(somaCO, 2);
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
Serial.println("✅ Dados enviados ao ThingSpeak!");
Serial.println(url);
client.stop();
} else {
Serial.println("⚠️ WiFi desconectado!");
}
// 6️⃣ LED indica status
digitalWrite(led, WiFi.status() == WL_CONNECTED ? HIGH : LOW);
delay(15000); // intervalo de envio (>= 15s recomendado pelo ThingSpeak)
}