mqtt и пофиг че )

Тема в разделе "Arduino & Shields", создана пользователем Семен C., 15 июл 2017.

  1. Семен C.

    Семен C. Нерд

    Разобрался наконец то с подключением и тп...

    При загрузке прочитывает только топик Home/rgbr, второй топик Home/svetdiap не читает...

    Но если я меняю их с телефона то читатет оба.

    как заставить читать либо все при старте ... либо принудительно читать топик ?


    Код (C++):
    #include <MQTT.h>           // Подключаем библиотеку для работы протоколом MQTT
    #include <PubSubClient.h>   // Подключаем библиотеку для получения и публикации топиков от/на брокере
    #include <ESP8266WiFi.h>    // Подключаем библиотеку для работы с WiFi




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

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

    WiFiClient wclient;         // создаем обьект клиента Wifi
    PubSubClient client(wclient, mqtt_server, mqtt_port); // создаем обьект клиента MQTT

    #define BUFFER_SIZE 100
    int tm, temp;
    int rgbr;
    String putcomand;       // Создаём массив для отправки данных
    String getcomand;       // Создаем массив для приема данных
    String hour1, hour2, hour3, hour4; //переменные для временных диапозонов. часы.
    String min1, min2, min3, min4; //переменные для временных диапозонов. минуты.
    int svetdiap; // количество световых диапазонов

    void setup() {
      pinMode (D1, OUTPUT);
      Serial.begin(115200); // Внимание !!!! при просмотре com порта выставьте скорость 115200
      //svetdiap = 2; //минимальное значение световых диапазонов
    }

    void loop() {


      if (!client.connected()) { // переподключаемся к MQTT серверу
        reconnect();
      }

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



    }

    // Функция отправки показаний с термодатчика
    void TempSend() {
      if (tm == 0)
      {
        temp = 2;
        client.publish("/Home/temp", String(temp)); // отправляем в топик для термодатчика значение температуры
        //Serial.println(temp);
        tm = 300;  // пауза между отправками значений температуры  коло 3 секунд
      }
      tm--;
      delay(10);
    }

    void svetdiapf() {
      if (tm == 0) {
        putcomand = "AT";
        putcomand += svetdiap;
        Serial.println (putcomand);
        tm = 300;
      }
      tm--;
      delay(10);
    }

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

      String payload = pub.payload_string();

      if (String(pub.topic()) == "/Home/rgbr") // проверяем из нужного ли нам топика пришли данные
      {
        rgbr = payload.toInt(); // преобразуем полученные данные в тип integer
        if (rgbr != 0) {
          analogWrite(D1, rgbr); //  включаем или выключаем светодиод в зависимоти от полученных значений данных
        }
        else {
          analogWrite(D1, 0); //  включаем или выключаем светодиод в зависимоти от полученных значений данных
        }
      }
        if (String(pub.topic()) == "/Home/svetdiap") // проверяем из нужного ли нам топика пришли данные
      {
      svetdiap = payload.toInt(); // преобразуем полученные данные в тип integer
      }
    }

    void reconnect() {
      if (WiFi.status() != WL_CONNECTED) { // подключаемся к WIFI
        Serial.print("Подключение к WiFi SSID: ");
        Serial.print(ssid);
        Serial.println("...");
        WiFi.begin(ssid, pass);

        if (WiFi.waitForConnectResult() != WL_CONNECTED)
          return;
        Serial.println("WiFi Подключен");
        Serial.print ("IP: ");
        Serial.println(WiFi.localIP());//получаем IP WeMos, этот IP необходимо ввести в адресной строке браузера, чтобы получить доступ к WeMos
        Serial.print ("MAC: ");
        Serial.println(WiFi.macAddress()); //получаем MAC-адрес WeMos
        Serial.print ("Mask: ");
        Serial.println(WiFi.subnetMask()); //маску подсети
        Serial.print ("Gateway: ");
        Serial.println(WiFi.gatewayIP()); //IP- шлюза
        Serial.print ("SSID: ");
        Serial.println(WiFi.SSID());// имя сети, к которой подключен WeMos
        Serial.print ("уровень сигнала: ");
        Serial.println(WiFi.RSSI()); //и уровень сигнала
      }


      if (WiFi.status() == WL_CONNECTED) { // если вафля подключена
        if (!client.connected()) { // подключаемся к MQTT серверу
          Serial.println("Подключаемся к MQTT серверу");
          if (client.connect(MQTT::Connect("arduinoClient2")
                             .set_auth(mqtt_user, mqtt_pass))) {
            Serial.println("Подключение удалось");
            client.set_callback(callback);
            client.subscribe("/Home/rgbr"); // подписывааемся по топик с данными яркости карсного
            client.subscribe("/Home/svetdiap"); // подписывааемся по топик с данными яркости карсного  
          } else {
            Serial.println("Подключение не удалось");
          }
        }

      }
    }
     
     
    Последнее редактирование: 15 июл 2017
  2. Семен C.

    Семен C. Нерд

    на 3 форуме спрашиваю... и везде тишина... неужто никто не делал восстановление данных после перезагрузки вемоса/ардуины и тп )