Uživatelské nástroje

Nástroje pro tento web


ruzne:lolin_d32_teplota_vlhkost_a_tlak_vzduchu_srazkomer_smer_a_sila_vetru

Meteostanice s Lolin D32

Autor: Jakub Mareš jakubmares.214@outlook.cz
Měřené veličiny: teplota, vlhkost a tlak vzduchu, srážkoměr, směr a síla větru

Komponenty

Zapojení

Kód

Meteostanice_ESP32.ino
#include <WiFi.h>
#include <HTTPClient.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <BH1750.h>
#include <SparkFun_Weather_Meter_Kit_Arduino_Library.h>
#include <WiFiManager.h>
 
#define BMESDAPin 21
#define BMESCLPin 22
#define rainSensorPin 25
#define windSpeedSensorPin 14
#define windDirectionPin 35
#define BME280_ADDRESS 0x76
 
const char* domain1 = "http://......tmep.cz/";
const char* domain2 = "http://......tmep.cz/";
const char* domain3 = "http://......tmep.cz/";
const char* domain4 = "http://......tmep.cz/";
 
Adafruit_BME280 bme;
BH1750 lightSensor;
SFEWeatherMeterKit weatherMeterKit(windDirectionPin, windSpeedSensorPin, rainSensorPin);
 
unsigned long previousMillis = 0;
const long interval = 60000; // 1 minuta
 
void WiFiConnection() {
  WiFi.mode(WIFI_STA);
  WiFiManager wm;
  wm.setConfigPortalTimeout(180);
 
  bool res = wm.autoConnect("Meteo214", "meteostation");
 
  if (!res) {
    Serial.println("Nepodařilo se připojit k WiFi. Přejdu do restartu.");
    ESP.restart(); // Restart instead of deep sleep
  } else {
    Serial.println("Připojeno k WiFi.");
    Serial.print("IP adresa: ");
    Serial.println(WiFi.localIP());
  }
}
 
void setup() {
  Serial.begin(115200);
  Wire.begin(BMESDAPin, BMESCLPin);
  WiFiConnection();
 
  if (!bme.begin(BME280_ADDRESS)) {
    Serial.println("Nemohu najít BME280 - zkontroluj zapojení!");
    return;
  }
  Serial.println("BME280 inicializován.");
 
  lightSensor.begin();
  Serial.println("Senzor BH1750 inicializován.");
 
  weatherMeterKit.begin();
  Serial.println("Meteostanice v chodu");
}
 
void loop() {
  unsigned long currentMillis = millis();
 
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
 
    float tlak = bme.readPressure() / 100.0F;
    float teplota = bme.readTemperature();
    float vlhkost = bme.readHumidity();
    float viditelneSvetlo = lightSensor.readLightLevel();
    float mnozstviSrazek = weatherMeterKit.getTotalRainfall();
    float rychlostVetra = weatherMeterKit.getWindSpeed();
    int smerVetra = weatherMeterKit.getWindDirection();
    int rssi = WiFi.RSSI();
 
    if (WiFi.status() == WL_CONNECTED) {
      HTTPClient http;
      String url1 = String(domain1) + "send?temperature=" + String(teplota, 1) +
                    "&humidity=" + String(vlhkost, 1) +
                    "&pres=" + String(tlak, 1) +
                    "&rssi=" + String(rssi);
      http.begin(url1);
      http.GET();
      http.end();
 
      String url2 = String(domain2) + "?winds=" + String(rychlostVetra, 1) +
                    "&windd=" + String(smerVetra) +
                    "&rssi=" + String(rssi);
      http.begin(url2);
      http.GET();
      http.end();
 
      String url3 = String(domain3) + "?rain=" + String(mnozstviSrazek, 1) +
                    "&rssi=" + String(rssi);
      http.begin(url3);
      http.GET();
      http.end();
 
      String url4 = String(domain4) + "?visible=" + String(viditelneSvetlo, 1) +
                    "&rssi=" + String(rssi);
      http.begin(url4);
      http.GET();
      http.end();
    }
  }
}