Код: Выделить всё
// Callback when an MQTT message arrives for one of our subscriptions
void mqttData(void* response) {
ELClientResponse *res = (ELClientResponse *)response;
Serial.print("Received: topic=");
String topic = res->popString();
Serial.println(topic);
Serial.print("data=");
String data = res->popString();
Serial.println(data);
}
Код: Выделить всё
void loop() {
esp.Process();
if (connected && (millis()-last) > 4000) {
Serial.println("publishing");
char buf[12];
itoa(count++, buf, 10);
mqtt.publish("/esp-link/1", buf);
А если сделать так:starshoy81 писал(а):Переменные topic и data используются только в пределах этой функции.
Для этого уже давно есть решение на модуле SIM800, но используемая библиотека так же поддерживает и ESP8266starshoy81 писал(а):Интересует именно управление через mqtt.
я пробовал - не прокатывает.Anydy писал(а):А если сделать так:
В Declare обьявить
String yes;
а в функции добавить:
yes = data;
может проканает?
в этой библиотеке используется эмуляция есп как модема через АТ команды. То есть часть сетевой нагрузки висит на ардуине. Плюс еспшка через АТ команды работает неоптимально. Фишка ESP-link в том, что сетевая часть висит на есп, а ардуина даже не подозревает об этом, общается только через уарт с еспшкой.Anydy писал(а):Для этого уже давно есть решение на модуле SIM800, но используемая библиотека так же поддерживает и ESP8266
Сцылка
От правка на брокер без проблем идёт. Вопрос в обработке полученных данных.Anydy писал(а):MQTT я проверял, работало))
Да, именно этим и приглянулась данная прошивка!starshoy81 писал(а):Фишка ESP-link в том, что сетевая часть висит на есп, а ардуина даже не подозревает об этом, общается только через уарт с еспшкой.
Проверил, переменная data из функции прекрасно переносится в void loop! (как я выше написал - работает)starshoy81 писал(а):Однако как эти полученные данные использовать дальше в программе и откуда их взять для обработки я не могу понять - знаний не хватает. Переменные topic и data используются только в пределах этой функции.
Отлично! У меня заработало, присвоил переменной topic1 значение topic, а переменной data1 значение data. И замигал светодиодом . Видимо раньше я что то не так делал, потому что состояние светодиода не менялось от разных команд.Anydy писал(а):Проверил, переменная data из функции прекрасно переносится в void loop! (как я выше написал - работает)
Дальше используйте как хотите!
Код: Выделить всё
void mqttData(void* response) {
ELClientResponse *res = (ELClientResponse *)response;
Serial.print("Received: topic=");
String topic = res->popString();
Serial.println(topic);
topic1=topic;
String data = res->popString();
Serial.println(data);
data1=data;
}
Код: Выделить всё
if (topic1 == "/esp-link/2" ) { //если пришло сообщение от топика
if (data1 == "on"){
digitalWrite(13, 1);
}
if (data1 == "off"){
digitalWrite(13, 0);
}
}
Молодец! Точно так же сделал!starshoy81 писал(а):Отлично! У меня заработало
В общем отправка данных на брокер требует некоторой подготовки данных. Данные отправляемые должны быть стринг, но конструкция которую делает Флпрогstarshoy81 писал(а):От правка на брокер без проблем идёт.
Код: Выделить всё
data_134000959_1 = (String(_gtv2, DEC));
Код: Выделить всё
char buf[10];
itoa(_gtv2, buf, 10);
mqtt.publish("temp", buf);
Код: Выделить всё
String primer = "Preobrazovanie";
mqtt.publish("/topic/dom/wifi", (char*) primer.c_str());
Ну наверное поросить у них искодники и установить у себя дома сервер!jonik22sm писал(а):Через облочный сервис RemoteXY работает, а если нет интернета то как заканектица напрямую к ESP 8266