Всем привет, собрал скетч из двух, принцип работы скетча: снятие показания с датчика протока воды и отправка их на локальный 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(); } } } //-----------------------------------------------