Hej
mam dwa przepływomierze (coś podobnego https://termipol.pl/przeplywomierze-cieczy/przeplywomierz-pm34?gclid=Cj0KCQjw27mhBhC9ARIsAIFsETEHEoil2DnVM0tEqknUMyQUpcmb6U7KFo1zypfcp23y0ACxx7CkRPgaAr6jEALw_wcB) i na chwilę obecną chciałbym podłączyć je do wemos d1 mini i mieć program który sprawdzi przepływ wody i powyżej zadanego wyśle wiadomość na mqtt ON/OFF oraz wyśle pobór wody też na mqtt
czy dobrze zaczynam? czy bedzie to prawidłowo działać? czekam jeszcze na elektronikę która może jutro będzie a może w czwartek...
#include <PubSubClient.h>
#include <ESP8266WiFi.h>
//ustawienia WiFi
const char* ssid = "nazwa_sieci";
const char* password = "haslo_sieci";
//ustawienia MQTT
const char* mqtt_server = "adres_serwera_MQTT";
const char* mqtt_topic = "temat/testowy";
const char* mqtt_client_name = "WemosClient";
//definicje wejść cyfrowych i licznika impulsów
const int input_pin = D2; //D2 odpowiada GPIO4 na Wemos D1 mini
volatile unsigned int pulse_count = 0;
unsigned long previous_millis = 0;
const unsigned long sample_time = 1000; //czas próbkowania w milisekundach
//definicja progu częstotliwości impulsów
const unsigned int threshold = 10; //liczba impulsów na sekundę
//inicjalizacja obiektów
WiFiClient wifi_client;
PubSubClient mqtt_client(mqtt_server, 1883, wifi_client);
//funkcja wywoływana przy zboczu narastającym na wejściu cyfrowym
void count_pulse() {
pulse_count++;
}
void setup() {
//inicjalizacja wejścia cyfrowego
pinMode(input_pin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(input_pin), count_pulse, RISING);
//inicjalizacja połączenia WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
//inicjalizacja połączenia MQTT
mqtt_client.connect(mqtt_client_name);
//wysłanie wiadomości powitalnej
mqtt_client.publish(mqtt_topic, "Hello from Wemos!");
}
void loop() {
unsigned long current_millis = millis();
if (current_millis - previous_millis >= sample_time) {
float frequency = (float)pulse_count / ((float)sample_time / 1000.0);
pulse_count = 0;
previous_millis = current_millis;
//wysłanie wiadomości na MQTT, w zależności od częstotliwości impulsów
if (frequency >= threshold) {
mqtt_client.publish(mqtt_topic, "on");
}
else {
mqtt_client.publish(mqtt_topic, "off");
}
}
mqtt_client.loop();
}

