częstotliwość impul...
 
Powiadomienia
Wyczyść wszystko

ESP8266/ESP8285 częstotliwość impulsów i stan wysyłany na MQTT

1 Wpisów
1 Użytkownicy
0 Reactions
462 Wyświetleń
(@szpila86)
Wpisów: 363
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
 

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();
}
 
Dodane : 06/04/2023 1:45 pm
Udostępnij: