Добрый день!
Подскажите пожалуйста куда копать)
почему то опубликованные через константу топики
#define pir_topic "/ESPO4/kitch/pir"
#define temp_topic "/ESPO4/kitch/temp"
#define hum_topic "/ESPO4/kitch/hum"
#define oxyQUA1 "/ESPO4/kitch/oxyQUA"
со временем начинают публиковаться с ошибками как в названии так и в значениях, притом, что публикуемые топики обычными переменными публикуются корректно
код и картинка с ошибочными топиками приложены
Подскажите пожалуйста куда копать)
почему то опубликованные через константу топики
#define pir_topic "/ESPO4/kitch/pir"
#define temp_topic "/ESPO4/kitch/temp"
#define hum_topic "/ESPO4/kitch/hum"
#define oxyQUA1 "/ESPO4/kitch/oxyQUA"
со временем начинают публиковаться с ошибками как в названии так и в значениях, притом, что публикуемые топики обычными переменными публикуются корректно
код и картинка с ошибочными топиками приложены
Код:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "Adafruit_Sensor.h" // Adafruit_Sensor
#include "DHT.h" // Подключаем библиотеку DHT
const char* ssid = "test"; //Название сети
const char* password = "test"; //пароль
const char* mqtt_server = "192.168.1.181"; //ip брокера mqtt
#define pir_topic "/ESPO4/kitch/pir"
#define temp_topic "/ESPO4/kitch/temp"
#define hum_topic "/ESPO4/kitch/hum"
#define oxyQUA1 "/ESPO4/kitch/oxyQUA"
#define DHTPIN 5 // Пин к которому подключен датчик 2
//#define DHTPOWPIN 16 // Пин к которому подключен датчик 2
#define pirPin 0//4 //контакт для подключения датчика
#define oxyQUA 16 // Пин к которому подключен датчик 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE); // Инициализируем датчик
WiFiClient espClient; //инициализация WiFi клиента
PubSubClient client(espClient); //инициализация MQTT клиента
WiFiServer server(80); // Указываем порт Web-сервера
// Initialize DHT sensor.
long last_mls = millis(); //функция времени в милисекундах
long last_mls2 = millis(); //функция времени для датчика движения
long last_mls3 = millis(); //функция времени для отправки топиков
int calibrationTime = 30; //Время калибровки датчика
long unsigned int lowIn; //Время, в которое был принят сигнал отсутствия движения(LOW)
boolean lockLow = true; //Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
boolean takeLowTime; //Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
int val = 0; //переменная для хранения состояния датчика
int valoxyQUA = 0; //переменная наличия газа
int gasValue = 0; //переменная для хранения количества газа
void setup() //Выполняется при запуске 1 раз
{
if (WiFi.getAutoConnect() != true) WiFi.setAutoConnect(true); //on power-on automatically connects to last used hwAP
WiFi.setAutoReconnect(true); //automatically reconnects to hwAP in case it is disconnected
pinMode(pirPin, INPUT);
pinMode(DHTPIN, INPUT);
pinMode(oxyQUA, INPUT);
dht.begin();
Serial.begin(115200); //инициализация монитора порта
client.setServer(mqtt_server, 1883); //подключаемся к MQTT
delay(100); //ждем 100 милисекунд
WiFi.begin(ssid, password); //подключаемся к WiFi
delay(5000); // настраиваем wifi ждем 5 секунд
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println(" connected"); // " подключено "
Serial.println(WiFi.localIP());
server.begin();
delay(5000);
client.connect("ESP04ClientK"); //конектимся с брокером как клиент
}
void reconnect_server() //функция проверки подключения
{
Serial.println("функция проверки подключения");
if (WiFi.status() != WL_CONNECTED) //если нет подключения с сети
{
WiFi.begin(ssid, password);
Serial.println("");
Serial.println("WiFi connect..."); //выводим в монитор порта что пытаемся подключиться
} else {
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
if (!client.connected() && WiFi.status() == WL_CONNECTED) { //если к сети подключились но к MQTT нет
client.connect("ESP04ClientK"); //
Serial.println("Mosquitto connect..."); //выводим в монитор порта что пытаемся подключиться
}
}
void MQTT() //публикуем топик с состоянием режима
{
// Serial.println("пытаемся опубликовать топик с состоянием режима");
if (millis() - last_mls > 2000) //периодичность публикации топика
{ val = digitalRead(pirPin);
last_mls = millis();
client.publish(pir_topic, String(val).c_str());
Serial.println(pir_topic);
Serial.println(val);
}
if (millis() - last_mls2 > 2000) //периодичность публикации топика
{ // Проверяем, получили ли данные с датчика.
last_mls2 = millis();
float t = dht.readTemperature(); // Запрос на считывание температуры
float h = dht.readHumidity();
if (isnan(h) || isnan(t)) {
Serial.println("Данных нет! Останавливаем цикл и запускаем по новой");
//digitalWrite(DHTPOWPIN,LOW);
//delay(2000);
//digitalWrite(DHTPOWPIN,HIGH);
//delay(2000);
return;
}
client.publish(temp_topic, String(t).c_str());
client.publish(hum_topic, String(h).c_str());
Serial.println(temp_topic);
Serial.println(t);
Serial.println(hum_topic);
Serial.println(h);
}
if (millis() - last_mls3 > 2000) //периодичность публикации топика
{
last_mls3 = millis();
valoxyQUA = digitalRead(oxyQUA);
//gasValue=
Serial.println("valoxyQUA");
Serial.println(valoxyQUA);
if (digitalRead(oxyQUA) == HIGH) {
client.publish(oxyQUA1, "1");
}
client.publish(oxyQUA1, "0");
Serial.println("level");
Serial.println(analogRead(A0));
}
}
void loop()
{
if (client.connected() != 1 || WiFi.status() != WL_CONNECTED)
{
Serial.println("НЕт подключения");
Serial.println(WiFi.status());
reconnect_server();
}
else
{
MQTT();
}
}