Доброго времени суток.
Брокер на самом деле настроить удалось. Вот практически стандартный код:
Функция [inline]ping()[/inline] по-идеи просто должна слать пакеты с интервалом 10 секунд. Но не в этом дело.
Локальная сеть через роутер Tp-Link. Порт для ESP в роутере проброшен и ESP выделен отдельный локальный IP (то есть фаервол по-идеи отключен). IP для ESP 192.168.0.200. Телнет с ноутбука к брокеру подключается (IP ноутбука/брокера 192.168.0.101). Порт брокера стандартный 1883. В ESP используется библиотека https://github.com/Imroy/pubsubclient .
Проблема заключается в следующем: ESP иногда подключается, иногда нет. Как это выглядит:
1) Запускаю redis для брокера
2) Запускаю брокер, он рапартует что запущен и работает
3) Прошиваю скетч в ESP, происходит подключение к Wi-Fi
4) И в цикле (максимум 10 раз) пробует подключиться к брокеру. И вот здесь интересный момент. Если я перезагружаю роутер то иногда на 1-3 раз ESP все таки подключается к брокеру. Но когда я перепрошиваю или перезагружаю ESP- то вероятность подключения ESP к брокеру очень сильно снижается. То есть после перепрошивки или перезагрузки у меня всего 1 раз подключился.
Если использовать внешний брокер, например: 85.119.83.194 (test.mosquitto.org) тогда подключается стабильно на 2-3 раз.
В чем может быть причина такой не стабильной работы в локальной сети?
Проблема в брокере? В роутере? В библиотеке PubSubClient?
Примерный код инициализации клиента в ESP:
Брокер на самом деле настроить удалось. Вот практически стандартный код:
JavaScript:
var mosca = require('mosca')
var ascoltatore = {
type: 'redis',
redis: require('redis'),
db: 12,
port: 6379,
return_buffers: true, // to handle binary payloads
host: "localhost"
};
var moscaSettings = {
port: 1883,
backend: ascoltatore,
keepalive: 5,
persistence: {
factory: mosca.persistence.Redis
}
};
var server = new mosca.Server(moscaSettings);
server.on('ready', setup);
server.on('clientConnected', function(client) {
console.log('client connected', client.id);
});
// fired when a message is received
server.on('published', function(packet, client) {
console.log('Published', packet.payload);
});
// fired when the mqtt server is ready
function setup() {
console.log('Mosca server is up and running')
function ping() {
var message = {
topic: 'test/mqttclient/topic1',
payload: 'abcde', // or a Buffer
qos: 0, // 0, 1, or 2
retain: false // or true
};
server.publish(message, function() {
console.log('done!');
});
console.log('ping..');
setTimeout(ping, 10000);
}
//ping();
}
Локальная сеть через роутер Tp-Link. Порт для ESP в роутере проброшен и ESP выделен отдельный локальный IP (то есть фаервол по-идеи отключен). IP для ESP 192.168.0.200. Телнет с ноутбука к брокеру подключается (IP ноутбука/брокера 192.168.0.101). Порт брокера стандартный 1883. В ESP используется библиотека https://github.com/Imroy/pubsubclient .
Проблема заключается в следующем: ESP иногда подключается, иногда нет. Как это выглядит:
1) Запускаю redis для брокера
2) Запускаю брокер, он рапартует что запущен и работает
3) Прошиваю скетч в ESP, происходит подключение к Wi-Fi
4) И в цикле (максимум 10 раз) пробует подключиться к брокеру. И вот здесь интересный момент. Если я перезагружаю роутер то иногда на 1-3 раз ESP все таки подключается к брокеру. Но когда я перепрошиваю или перезагружаю ESP- то вероятность подключения ESP к брокеру очень сильно снижается. То есть после перепрошивки или перезагрузки у меня всего 1 раз подключился.
Если использовать внешний брокер, например: 85.119.83.194 (test.mosquitto.org) тогда подключается стабильно на 2-3 раз.
В чем может быть причина такой не стабильной работы в локальной сети?
Проблема в брокере? В роутере? В библиотеке PubSubClient?
Примерный код инициализации клиента в ESP:
Код:
uint8_t mac[6];
WiFi.macAddress(mac);
String macString = macToStr(mac);
// prepare mqtt id
String mqttId = "";
mqttId.concat(config.email);
mqttId.concat("--");
mqttId.concat(macString);
mqttId.concat("--");
mqttId.concat(name);
#ifdef DEBUG
Serial.println("mqttId: " + mqttId);
#endif
// connect to mqtt
int retries = 0;
while (retries < RETRIES_LEN) {
if (mqttClient.connect(mqttId)) {
mqttClient.publish("test/mqttclient/publish1", "hello world");
mqttClient.subscribe("test/mqttclient/topic1");
//@TODO
#ifdef DEBUG
Serial.println("MQTT connected.");
#endif
break;
} else {
#ifdef DEBUG
Serial.println("MQTT connect fail.");
#endif
}
retries++;
delay(500);
}