Экспериментирую с MQTT
На одной ESP программа которая публикует топики, судя по Spy-MQTT у нее это отлично получается
На вторую ESP загрузил программу которая должна выводить значения в Консоль, но судя по Spy-MQTT подключение к серверу проходит, а вот в консоль ничего не выводится, такое чувство что callback не срабатывает... Какую то "мелочь" похоже упустил...
На одной ESP программа которая публикует топики, судя по Spy-MQTT у нее это отлично получается
На вторую ESP загрузил программу которая должна выводить значения в Консоль, но судя по Spy-MQTT подключение к серверу проходит, а вот в консоль ничего не выводится, такое чувство что callback не срабатывает... Какую то "мелочь" похоже упустил...
Код:
/*
Подписка к MQTT
подписываемся к серверу
*/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// =======================================================================
// Конфигурация устройства:
// =======================================================================
const char* ssid = "SSID"; //SSID
const char* password = "Пароль"; //Пароль
#define REPORT_INTERVAL 10 // интервал обмена WIFI
// Топики для подписи
char* hellotopic = "ESP_0"; //Топик для приветственной инициализации
char* temperature_topic = "garden/hotbed_1/temperature"; //Топик для температуры в теплице1
char* humidity_topic = "garden/hotbed_1/humidity"; //Топик для влажности в теплице1
IPAddress server(*, *, *, *); // mosquitto адрес
String clientName; // Сбор строки информации о клиенте
WiFiClient wclient;
PubSubClient client(wclient, server, 1883); //Создание колиента MQTT
// Список возвращаемых данных
String t_hotbed_1;
String h_hotbed_1;
//подсчет времени
long previousMillis_time = 0; // храним время последнего подключения
long interval_time = 10; //интервал 1 час 3600000
// =======================================================================
// Функция получения данных от сервера
void callback(char* topic, byte* payload, unsigned int length)
{
Serial.println("callback");
//--------------------------------------------------------------------------------------
//температура 1 теплица
if (String(topic) == "temperature_topic")
{
t_hotbed_1 = "";
for (int i = 0; i < length; i++)
{
t_hotbed_1 = t_hotbed_1 +(char)payload[i];
}
Serial.print("Температура: ");
Serial.println(t_hotbed_1);
}
//--------------------------------------------------------------------------------------
//Влажность 1 теплица
if (String(topic) == "humidity_topic")
{
h_hotbed_1 = "";
for (int i = 0; i < length; i++)
{
h_hotbed_1 = h_hotbed_1 +(char)payload[i];
}
Serial.print("Влажность: ");
Serial.println(h_hotbed_1);
}
}//void callback
String macToStr(const uint8_t* mac)
{
String result;
for (int i = 0; i < 6; ++i) {
result += String(mac[i], 16);
if (i < 5)
result += ':';
}
return result;
}//String macToStr
// =======================================================================
void setup_wifi()
{
while (WiFi.status() != WL_CONNECTED) { //Если нет подключения к WIFI
delay(500); //Задержка 50 сек
Serial.print(".");
}
Serial.println("+");
Serial.println("WiFi connected"); // Вывод в СОМ информации о подключении к WIFI
Serial.println("IP address: "); // Вывод в СОМ информации о полученом IP адресе
Serial.println(WiFi.localIP());
}// void setup_wifi
// =======================================================================
void reconnect()
{
// подключаемся к MQTT серверу
if (WiFi.status() == WL_CONNECTED)
{
if (!client.connected())
{
Serial.print("Connecting to ");
Serial.print(server);
Serial.print(" as ");
Serial.println(clientName); //Вывод в СОМ собранной информации о клиенте
if (client.connect((char*) clientName.c_str())) //конектимся с брокером как клиент
{
Serial.println("Connected to MQTT broker");
if (client.publish(hellotopic, "hello from ESP8266"))
{
Serial.println("Publish ok");
}
else {
Serial.println("Publish failed");
}
//подписываемся по топики
client.subscribe(temperature_topic);
client.loop();
client.subscribe(humidity_topic);
client.loop();
}
else {
Serial.println("MQTT connect failed");
Serial.println("Will reset and try again...");
abort();
}
}
}
}//void reconnect
///////////////////////////////////////////////////////
void setup() {
// Setup console
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
WiFi.mode(WIFI_STA); // режим клиента
WiFi.begin(ssid, password);
delay(10);
clientName += "esp8266-"; // Сбор строки информации оклиенте
uint8_t mac[6];
WiFi.macAddress(mac); // Получение МАС адреса
clientName += macToStr(mac); // Добовление МАС адреса клиента в строку о клиенте
clientName += "-";
clientName += String(micros() & 0xff, 16);
}//void setup
void loop() {
if (WiFi.status() != WL_CONNECTED) //если нет подключения к вифи
{
setup_wifi();
}
if (!client.connected())
{
reconnect();
}
client.loop();
//////////////////////////////////////////
int cnt = REPORT_INTERVAL;
while (cnt--)
delay(1000);
Serial.println("loop");
}// void loop