Asystent AI
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
945 Wyświetleń
(@szpila86)
Wpisów: 367
Weteran Patron Strony Donator 2K22, Donator 2K23, Donator 2K24
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 
[#5530]

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 2:45 pm
Udostępnij: