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.
- Creați un cont pe ThingSpeak.com.
- Mergeți la Channels > My Channels și apăsați New Channel.
- 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).
- 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.
- 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);
}