#include
#include
#include
#include
h>
// ##################### WIFI připojení ####################
const char* ssid = "";
const char* password = "";
//
#define pinTrigger 5
#define pinEcho 4
#define maxVzdalenost 450
//
NewPing sonar(pinTrigger, pinEcho, maxVzdalenost);
const int RAIN_PIN = 13; // PIN srážkoměru (Použít na GND paralelně 10K odpor a kondenzátor 105 - jako u anemometru)
// #########################################################
// ################# ZAKLADNI NASTAVENI ####################
WiFiClient client;
HTTPClient http;
unsigned long timeNow;
volatile int rain_puls = 0; // celkový počet pulsů
volatile float rain_minut = 0; // počet pulsů za minutu
volatile bool rain_stav = false;
String wifiData = "";
String readString = "";
// #########################################################
void setup() {
Serial.begin(9600);
delay(1000);
attachInterrupt(digitalPinToInterrupt(RAIN_PIN), rain_sum, RISING); // detekce přerušení
Serial.println();
Serial.print("Připojuji se k wifi ... ");
Serial.println(ssid);
WiFi.begin(ssid, password); // samotný proces pripojeni k siti
WiFi.mode(WIFI_STA);
while (WiFi.status() != WL_CONNECTED) { // dokud není pripojeno
delay(70); Serial.print(".");
}
Serial.println("");
Serial.println("WiFi připojeno");
Serial.print("IP addresa: ");
Serial.println(WiFi.localIP());
Serial.print("Wifi signál: ");
Serial.println(WiFi.RSSI());
Serial.print("Data se odesílají na URL adresu:");
Serial.println("http://meteo-roven.cz/?data=?????");
Serial.println("==============================================");
void loop() {
// kazdou 1 minutu + ODESLAT DATA
if (millis() - timeNow >=
timeNow = millis();
rain_puls = rain_puls / 2;
rain_minut = rain_puls*0.2; //
int vzdalenost = sonar.ping_cm();
// pauza před dalším měřením
delay(50);
// pokud byla detekována vzdálenost větší než 0,
// provedeme další měření
if (vzdalenost > 0) {
vzdalenost = 0;
// pro získání stabilnějších výsledků provedeme 5 měření
// a výsledky budeme přičítat do proměnné vzdalenost
for(int i=0; i<10; i++) {
vzdalenost += sonar.ping_cm();
delay(50);
}
// v proměnné vzdálenost máme součet posledních 5 měření
// a musíme tedy provést dělení 5 pro získání průměru
vzdalenost = vzdalenost/10;
// Odecteme kominek + odtok
vzdalenost = 275 - vzdalenost;
// vytištění informací po sériové lince
Serial.
Serial.
Serial.println("
}
// pokud byla detekována vzdálenost 0, je předmět mimo měřící rozsah,
// tedy příliš blízko nebo naopak daleko
else {
Serial.
delay(500) ;
}
Serial.println(" milimetrů za minutu");
Serial.println("-------------------------------------------");
delay(200);
// #########################################################
readString =
delay(100);
rain_puls = 0;
rain_minut = 0;
wifiData = WiFi.RSSI();
client.setTimeout(1000);
http.begin("http://meteo-roven.
int httpCode = http.POST(wifiData + "|" + readString);
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTP] POST... code: %d\n", httpCode);
// file found at server
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
Serial.println("Data odeslána na: http://meteo-roven.cz/?data=?????");
String payload = http.getString();
Serial.println(payload);
}
} else {
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
Serial.println(F("Nepodařilo se odeslat data na webovou stránku Meteo-Roven.cz"));
}
http.end();
}
}
ICACHE_RAM_ATTR void rain_sum() // sčítání pulsů ze srážkoměru
{
rain_puls++;
}