192.168.1.101 Это IP сервера. Скетч "собирал" из разных скетчей, может быть что то некорректно. Но с интервалом в 1 минуту отрабатывает отлично, со всеми защитами.
Поправил
IPAddress device_ip (192,168,1,104); IP датчика
C++:
// https://habr.com/ru/post/393277/
// Датчик температуры ds18b20 к 2 пину
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 // центральная нога датчика GPIO 2
#define PIN_POWER_DS 0 // нога питания датчика GPIO 0
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define DHCP true
IPAddress device_ip (192,168,1,104); // Статический IP-адрес для устройства
IPAddress dns (192,168,1,1); // IP-адрес вашего маршрутизатора
IPAddress gateway (192,168,1,1); // IP-адрес вашего роутера
IPAddress subnet (255,255,255,0); // Подсеть, используемая вашей сетью
//IPAddress secondaryDNS (8, 8, 4, 4);
#define chanal 2 //канал wifi
byte macAP[6] = {0xE4, 0xC3, 0x2A, 0x6C, 0xAB, 0x5A};
const char *ssid = "***"; // Имя вайфай точки доступа
const char *pass = "***"; // Пароль от точки доступа
const char *mqtt_server = "192.168.1.101"; // Имя сервера MQTT
const int mqtt_port = 1883; // Порт для подключения к серверу MQTT
const char *mqtt_user = "***"; // Логи от сервер
const char *mqtt_pass = "***"; // Пароль от сервера
#define BUFFER_SIZE 100
// deep sleep
#define SLEEP_DELAY_IN_SECONDS 300 // время сна в секундах
float temp=0;
int VCC; //Напряжение батареи
ADC_MODE (ADC_VCC) ; // Будем измерять напряжение на VCC внутри МК
float Vbat,V_min = 2.8; // напряжение аккумулятора, и мин. порог напряжения для разрешения работы
// для батареек убрать ,V_min = 2.8
// Функция получения данных от сервера
void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // выводим в сериал порт название топика
Serial.print(" => ");
Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных
String payload = pub.payload_string();
}
WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);
void setup() {
sensors.begin();
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
Vbat = ESP.getVcc()-100; // читаем напряжение на ноге VCC модуля ESP8266, (-100)коррекция напряжения в милливольтах.
Vbat = Vbat / 1023;
if (Vbat < V_min ) // закоментировать для батареек
ESP.deepSleep(300*1000000);// сон (на 5 минут")если напряжение меньше заданного //(86400e6) сутки // закоментировать для батареек
pinMode (PIN_POWER_DS, OUTPUT);
digitalWrite(PIN_POWER_DS, HIGH);
}
void loop() {
// подключаемся к wi-fi
if (DHCP) WiFi.config(device_ip, dns, gateway, subnet); //
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Connecting to ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass, chanal, macAP, true);
if (WiFi.waitForConnectResult() != WL_CONNECTED)
return;
Serial.println("WiFi connected");
}
// подключаемся к 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.publish("test/vcc",String(Vbat)); // отправляем в топик напряжение батареи
} else {
Serial.println("Could not connect to MQTT server");
ESP.deepSleep(900e6); // спим 15 мин.
}
}
if (client.connected()){
client.loop();
TempSend();
}
}
} // конец основного цикла
// Функция отправки показаний с термодатчика
void TempSend(){
{
sensors.requestTemperatures(); // от датчика получаем значение температуры
delay(1000); // задержка, что бы успеть прочитать темпратуру
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // отправляем в топик температуру
Serial.println(temp);
digitalWrite(PIN_POWER_DS, LOW); // отключаем питание датчика
delay(10);
}
// deep sleep
client.disconnect();
WiFi.disconnect();
delay(100);
// deep sleep
ESP.deepSleep(SLEEP_DELAY_IN_SECONDS * 1000000, WAKE_RF_DEFAULT);
ESP.deepSleep(10 * 1000, WAKE_NO_RFCAL);
delay(500);
}
IPAddress device_ip (192,168,1,104); IP датчика
Изменено: