WelcomeHere.ro
NIVEL: AVANSAT

Proiect: Stație Meteo IoT cu Publicare Online

Acest proiect combină citirea senzorilor cu puterea Wi-Fi a ESP32 pentru a crea o stație meteo care își publică datele pe internet, permițându-vă să le vizualizați de oriunde.

Componente Necesare

  • 1x Placă de dezvoltare ESP32
  • 1x Senzor BME280 (temperatură, umiditate, presiune) - superior DHT11
  • 1x Breadboard și fire de legătură
  • Un cont gratuit pe platforma ThingSpeak

Pasul 1: Configurare ThingSpeak

ThingSpeak este o platformă IoT gratuită care ne permite să stocăm și să vizualizăm datele de la senzorii noștri.

  1. Creați un cont pe ThingSpeak.com.
  2. Mergeți la Channels > My Channels și apăsați New Channel.
  3. Dați un nume canalului (ex: "Stație Meteo ESP32") și activați Field 1 (pentru Temperatură), Field 2 (pentru Umiditate) și Field 3 (pentru Presiune).
  4. Salvați canalul. Mergeți la tab-ul API Keys și notați-vă cheia Write API Key. Vom avea nevoie de ea în cod.

Pasul 2: Asamblarea Circuitului

Senzorul BME280 comunică prin I2C, la fel ca ecranul LCD din proiectul anterior. Conexiunile sunt foarte simple.

Schema circuitului BME280
  • Conectează VIN al BME280 la 3.3V al ESP32.
  • Conectează GND la GND.
  • Conectează SCL la pinul D22 (GPIO 22) al ESP32.
  • Conectează SDA la pinul D21 (GPIO 21) al ESP32.

Pasul 3: Codul Sursă

Instalați biblioteca "Adafruit BME280 Library" din Library Manager. Apoi, **modificați liniile cu datele rețelei Wi-Fi și cheia API de la ThingSpeak** și încărcați codul.

#include 
#include 
#include 
#include 
#include "ThingSpeak.h"

// --- MODIFICA AICI ---
const char* ssid = "NUMELE_RETELEI_TALE";
const char* password = "PAROLA_RETELEI_TALE";
const char* myWriteAPIKey = "CHEIA_TA_THINGSPEAK";
// --- ---------------- ---

// Variabile ThingSpeak
unsigned long myChannelNumber = 1; // Numarul canalului tau (daca nu l-ai schimbat)
WiFiClient client;

// Obiect pentru senzor
Adafruit_BME280 bme; 

void setup() {
  Serial.begin(115200);
  Wire.begin();
  
  if (!bme.begin(0x76)) {
    Serial.println("Nu am putut gasi senzorul BME280, verifica circuitul!");
    while (1);
  }

  WiFi.mode(WIFI_STA);
  ThingSpeak.begin(client);
}

void loop() {
  // Conectare sau reconectare la Wi-Fi
  if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Incerc sa ma conectez la SSID: ");
    Serial.println(ssid);
    while (WiFi.status() != WL_CONNECTED) {
      WiFi.begin(ssid, password);
      Serial.print(".");
      delay(5000);
    }
    Serial.println("\nConectat.");
  }

  // Citire date senzori
  float temperature = bme.readTemperature();
  float humidity = bme.readHumidity();
  float pressure = bme.readPressure() / 100.0F; // Convertim la hPa

  // Setam campurile pentru a le trimite la ThingSpeak
  ThingSpeak.setField(1, temperature);
  ThingSpeak.setField(2, humidity);
  ThingSpeak.setField(3, pressure);

  // Trimitem datele
  int httpCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

  if (httpCode == 200) {
    Serial.println("Date trimise cu succes.");
  } else {
    Serial.println("Eroare la trimiterea datelor. Cod HTTP: " + String(httpCode));
  }

  // ThingSpeak permite un update la fiecare 15 secunde
  delay(20000); 
}