Esp8266 + датчик протока воды

Тема в разделе "ESP8266, ESP32", создана пользователем sasha, 16 апр 2021.

  1. sasha

    sasha Нуб

    Всем привет, собрал скетч из двух, принцип работы скетча: снятие показания с датчика протока воды и отправка их на локальный mqtt сервер, просьба мне помочь поправить ошибки скетча если такие имеются и добавить возможность установки второго датчика протока воды и отправки данных на mqtt сервер.
    Код (C++):
    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>

    const char *ssid = "to4ca"; // Имя вайфай точки доступа
    const char *pass = "password"; // Пароль от точки доступа

    const char *mqtt_server = "192.168.0.181"; // Имя сервера MQTT
    const int mqtt_port = 1883; // Порт для подключения к серверу MQTT
    const char *mqtt_user = "login"; // Логи от сервер
    const char *mqtt_pass = "password"; // Пароль от сервера

    #define BUFFER_SIZE 100

    void callback(const MQTT::Publish& pub)
    {
    Serial.print(pub.topic()); // выводим в сериал порт название топика
    Serial.print(" => ");
    Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных

    String payload = pub.payload_string();

    if(String(pub.topic()) == "test/temp") // проверяем из нужного ли нам топика пришли данные
    if(String(pub.topic()) == "test/temp1") // проверяем из нужного ли нам топика пришли данные
    if(String(pub.topic()) == "test/temp2") // проверяем из нужного ли нам топика пришли данные
    {
    int stled = payload.toInt(); // преобразуем полученные данные в тип integer
    digitalWrite(5,stled); // включаем или выключаем светодиод в зависимоти от полученных значений данных
    }
    }

    WiFiClient wclient;
    PubSubClient client(wclient, mqtt_server, mqtt_port);



    const byte Interrupt_Pin PROGMEM = 2;

    volatile uint16_t count_imp;
    float count_imp_all;
    uint16_t liter_hour;
    uint16_t liter_min;
    uint32_t currentTime, loopTime;
    float liter;

    //-----------------------------------------------
    ICACHE_RAM_ATTR void getFlow ()
    {
      count_imp++;
    }
    //-----------------------------------------------
    void setup()
    {
      Serial.begin(115200);

      pinMode(Interrupt_Pin, INPUT);
      attachInterrupt(Interrupt_Pin, getFlow, FALLING);

      currentTime = millis();
      loopTime = currentTime;
    }
    //-----------------------------------------------
    void loop() {
    // подключаемся к wi-fi
    if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Connecting to ");
    Serial.print(ssid);
    Serial.println("...");
    WiFi.begin(ssid, pass);

    if (WiFi.waitForConnectResult() != WL_CONNECTED)
    return;
    Serial.println("WiFi connected");
    }
    //void loop ()
    //{
      currentTime = millis();
      if (currentTime >= (loopTime + 1000))
      {
        loopTime = currentTime;
        count_imp_all = count_imp_all + count_imp;

        liter_hour = (count_imp * 60 * 60 / 450);
        liter_min = (count_imp * 60 / 450);

        count_imp = 0;
        Serial.println("---------");
        Serial.print(liter_hour); Serial.println(" л/ч");
        Serial.print(liter_min); Serial.println(" л/м");
        Serial.print(String(count_imp_all / 450, 2)); Serial.println(" л(всего)");
        client.publish("test/temp1",String(liter_hour)); // отправляем в топик для (" л/ч");
        client.publish("test/temp2",String(liter_min)); // отправляем в топик для (" л/м");
        client.publish("test/temp",String(count_imp_all / 450, 2)); // отправляем в топик  л(всего)
      }
    // подключаемся к MQTT серверу
    if (WiFi.status() == WL_CONNECTED) {
    if (!client.connected()) {
    Serial.println("Connecting to MQTT server");
    if (client.connect(MQTT::Connect("arduinoClient2")
    .set_auth(mqtt_user, mqtt_pass))) {
    Serial.println("Connected to MQTT server");
    client.set_callback(callback);
    client.subscribe("test/temp1"); // подписывааемся по топик
    client.subscribe("test/temp2"); // подписывааемся по топик
    client.subscribe("test/temp"); // подписывааемся по топик
    } else {
    Serial.println("Could not connect to MQTT server");

    }
    }
    if (client.connected()){
    client.loop();
    //TempSend();
    }

    }
    }


    //-----------------------------------------------