• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Mqtt+Esp8266, Срочно)

tim9433

New member
Привет всем) Срочно нужна помощь. У меня есть ESP-8266 01 (прошиваю через Arduino IDE ) есть роутер Microtik(к которому подключается ESP), после установления соединения ping нормально проходит с обоих сторон. Однако подключиться к MQTT брокеру не получается, использую Mosquitto(запускаю через командную строку mosquitto -v). Через MQTT SPY подключаюсь к брокеру нормально.Питаю esp через USB-ttl , доп. питания нет. В wireshark при каждой попытке подключения ловлю TCP от esp на порт mosquitto использую следующий скетч :
[HASHTAG]#include[/HASHTAG] <ESP8266WiFi.h>
[HASHTAG]#include[/HASHTAG] <PubSubClient.h>

// Update these with values suitable for your network.

const char* ssid = "SotsbiClass";
const char* password = "SotsbiMikClass";
const char* mqtt_server = "192.168.88.254";

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;

void setup() {
pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}

void setup_wifi() {

delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload);
}
Serial.println();

// Switch on the LED if an 1 was received as first character
if ((char)payload[0] == '1') {
digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level
// but actually the LED is on; this is because
// it is acive low on the ESP-01)
} else {
digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH
}

}

void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESP8266Client")) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("outTopic", "hello world");
// ... and resubscribe
client.subscribe("inTopic");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void loop() {

if (!client.connected()) {
reconnect();
}
client.loop();

long now = millis();
if (now - lastMsg > 2000) {
lastMsg = now;
++value;
snprintf (msg, 75, "hello world #%ld", value);
Serial.print("Publish message: ");
Serial.println(msg);
client.publish("outTopic", msg);
}
}
 

Вложения

Сергей_Ф

Moderator
Команда форума
@tim9433 минимально нормальное питание == 3 батареи по 1.5 в + lm1117 + 1 конденсатор на 47 мкФ или больше, очень желательно танталовый.

Две свежие батарейки, можно только для теста попробовать.
 
Последнее редактирование:

guinpin

New member
Вы бы лучше логи москита показали. Вполне возможно, что у вас там лезет:
Invalid protocol "MQTT" in CONNECT from 192.168....
А это лечится указанием версии протокола.
 
Сверху Снизу