Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

странные топики и данные

Тема в разделе "Общие вопросы по esp8266", создана пользователем Shil, 13 май 2019.

  1. Shil

    Shil Новичок

    Сообщения:
    3
    Симпатии:
    0
    Добрый день!
    Подскажите пожалуйста куда копать)
    почему то опубликованные через константу топики
    #define pir_topic "/ESPO4/kitch/pir"
    #define temp_topic "/ESPO4/kitch/temp"
    #define hum_topic "/ESPO4/kitch/hum"
    #define oxyQUA1 "/ESPO4/kitch/oxyQUA"
    со временем начинают публиковаться с ошибками как в названии так и в значениях, притом, что публикуемые топики обычными переменными публикуются корректно
    код и картинка с ошибочными топиками приложены

    Код (Text):
    1. #include <ESP8266WiFi.h>
    2. #include <PubSubClient.h>
    3. #include "Adafruit_Sensor.h"                            // Adafruit_Sensor
    4. #include "DHT.h"                                        // Подключаем библиотеку DHT
    5.  
    6. const char* ssid = "test"; //Название сети
    7. const char* password = "test";           //пароль
    8. const char* mqtt_server = "192.168.1.181";    //ip брокера mqtt
    9.  
    10. #define pir_topic "/ESPO4/kitch/pir"
    11. #define temp_topic "/ESPO4/kitch/temp"
    12. #define hum_topic "/ESPO4/kitch/hum"
    13. #define oxyQUA1 "/ESPO4/kitch/oxyQUA"
    14. #define DHTPIN 5                                        // Пин к которому подключен датчик 2
    15. //#define DHTPOWPIN 16                                        // Пин к которому подключен датчик 2
    16. #define pirPin 0//4                              //контакт для подключения датчика
    17. #define oxyQUA 16                                   // Пин к которому подключен датчик 2
    18.  
    19. #define DHTTYPE DHT22
    20. DHT dht(DHTPIN, DHTTYPE);                               // Инициализируем датчик
    21. WiFiClient espClient;                        //инициализация WiFi клиента
    22. PubSubClient client(espClient);              //инициализация MQTT клиента
    23. WiFiServer server(80);                                  // Указываем порт Web-сервера
    24.  
    25. // Initialize DHT sensor.
    26. long last_mls = millis();                    //функция времени в милисекундах
    27. long last_mls2 = millis();                   //функция времени для датчика движения
    28. long last_mls3 = millis();                   //функция времени для отправки топиков
    29.  
    30. int calibrationTime = 30;                     //Время калибровки датчика
    31. long unsigned int lowIn;                      //Время, в которое был принят сигнал отсутствия движения(LOW)
    32.  
    33. boolean lockLow = true;                       //Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
    34. boolean takeLowTime;                          //Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
    35.  
    36. int val = 0;                                  //переменная для хранения состояния датчика
    37. int valoxyQUA = 0;                                    //переменная наличия газа
    38. int gasValue = 0; //переменная для хранения количества газа
    39.  
    40. void setup()                                 //Выполняется при запуске 1 раз
    41. {
    42.  
    43.   if (WiFi.getAutoConnect() != true) WiFi.setAutoConnect(true);  //on power-on automatically connects to last used hwAP
    44.   WiFi.setAutoReconnect(true);                                   //automatically reconnects to hwAP in case it is disconnected
    45.   pinMode(pirPin, INPUT);
    46.   pinMode(DHTPIN, INPUT);
    47.   pinMode(oxyQUA, INPUT);
    48.   dht.begin();
    49.  
    50.   Serial.begin(115200);                      //инициализация монитора порта
    51.   client.setServer(mqtt_server, 1883);       //подключаемся к MQTT
    52.   delay(100);                                //ждем 100 милисекунд
    53.  
    54.   WiFi.begin(ssid, password);                //подключаемся к WiFi
    55.   delay(5000);                                      // настраиваем wifi ждем 5 секунд
    56.  
    57.   while (WiFi.status() != WL_CONNECTED)
    58.   {
    59.     delay(500);
    60.     Serial.print(".");
    61.   }
    62.   Serial.println(" connected"); //  " подключено "
    63.   Serial.println(WiFi.localIP());
    64.   server.begin();
    65.   delay(5000);
    66.   client.connect("ESP04ClientK");             //конектимся с брокером как клиент
    67. }
    68.  
    69. void reconnect_server()                      //функция проверки подключения
    70. {
    71.   Serial.println("функция проверки подключения");
    72.   if (WiFi.status() != WL_CONNECTED)         //если нет подключения с сети
    73.   {
    74.     WiFi.begin(ssid, password);
    75.     Serial.println("");
    76.     Serial.println("WiFi connect...");       //выводим в монитор порта что пытаемся подключиться
    77.   } else {
    78.     Serial.println("");
    79.     Serial.println("WiFi connected");
    80.     Serial.println("IP address: ");
    81.     Serial.println(WiFi.localIP());
    82.   }
    83.   if (!client.connected() && WiFi.status() == WL_CONNECTED) { //если к сети подключились но к MQTT нет
    84.     client.connect("ESP04ClientK");    //
    85.     Serial.println("Mosquitto connect..."); //выводим в монитор порта что пытаемся подключиться
    86.   }
    87. }
    88.  
    89.  
    90. void MQTT()                                   //публикуем топик с состоянием режима
    91. {
    92.  
    93.   // Serial.println("пытаемся опубликовать топик с состоянием режима");
    94.   if (millis() - last_mls > 2000)            //периодичность публикации топика
    95.   { val = digitalRead(pirPin);
    96.     last_mls = millis();
    97.     client.publish(pir_topic, String(val).c_str());
    98.     Serial.println(pir_topic);
    99.     Serial.println(val);
    100.   }
    101.   if (millis() - last_mls2 > 2000)            //периодичность публикации топика
    102.   { // Проверяем, получили ли данные с датчика.
    103.     last_mls2 = millis();
    104.     float t = dht.readTemperature();                  // Запрос на считывание температуры
    105.     float h = dht.readHumidity();
    106.     if (isnan(h) || isnan(t)) {
    107.       Serial.println("Данных нет! Останавливаем цикл и запускаем по новой");
    108.       //digitalWrite(DHTPOWPIN,LOW);
    109.       //delay(2000);
    110.       //digitalWrite(DHTPOWPIN,HIGH);
    111.       //delay(2000);
    112.       return;
    113.     }
    114.     client.publish(temp_topic, String(t).c_str());
    115.     client.publish(hum_topic, String(h).c_str());
    116.     Serial.println(temp_topic);
    117.     Serial.println(t);
    118.     Serial.println(hum_topic);
    119.     Serial.println(h);
    120.   }
    121.  
    122.   if (millis() - last_mls3 > 2000)            //периодичность публикации топика
    123.   {
    124.     last_mls3 = millis();
    125.     valoxyQUA = digitalRead(oxyQUA);  
    126.     //gasValue=
    127.     Serial.println("valoxyQUA");
    128.     Serial.println(valoxyQUA);
    129.     if (digitalRead(oxyQUA) == HIGH) {
    130.       client.publish(oxyQUA1, "1");
    131.     }  
    132.     client.publish(oxyQUA1, "0");
    133.     Serial.println("level");
    134.   Serial.println(analogRead(A0));
    135.  
    136.   }
    137.  
    138. }
    139.  
    140. void loop()
    141. {
    142.  
    143.   if (client.connected() != 1 || WiFi.status() != WL_CONNECTED)
    144.   {
    145.     Serial.println("НЕт подключения");
    146.     Serial.println(WiFi.status());
    147.     reconnect_server();
    148.   }
    149.   else
    150.   {
    151.     MQTT();
    152.   }
    153.  
    154. }
    upload_2019-5-13_10-53-40.png
     
  2. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.148
    Симпатии:
    226
    @Shil строго говоря #define - это макрос препроцессора, а совсем не константа.
    Через константы у вас объявлен ssid. Попробуйте также сделать.
    А то у вас valoxyQUA вполне может превратиться в val16 и прочие чудеса в коде. #define очень коварен при необдуманном использовании.
     
    Последнее редактирование: 13 май 2019
    Shil нравится это.
  3. Shil

    Shil Новичок

    Сообщения:
    3
    Симпатии:
    0
    Спасибо, а зачения этих переменных от этого же могут ломаться?
     
  4. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.148
    Симпатии:
    226
    @Shil у вас может ломаться всё что угодно с таким кодом. В #define имена макросов обычно пишут только в верхнем регистре не просто так, а что бы не было влияния на имена в коде. А у вас "сборная солянка". Там что угодно может быть.
     
  5. Shil

    Shil Новичок

    Сообщения:
    3
    Симпатии:
    0
    Спасибо, буду исправляться, только начал изучение.
     
  6. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.148
    Симпатии:
    226

Поделиться этой страницей