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

Вопрос Mqtt и несколько esp.

ilesk

New member
Здравствуйте.
Помогите решить вопрос с взаимодействием двух есп.
Нужно, чтобы они могли принимать и отправлять друг-другу данные.
Код:
int knopka = 5;
int R;
int G;
int B;

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char *ssid =  "";  // Имя вайфай точки доступа
const char *pass =  ""; // Пароль от точки доступа

const char *mqtt_server = ""; // Имя сервера MQTT
const int mqtt_port = ; // Порт для подключения к серверу MQTT
const char *mqtt_user = ""; // Логи от сервер
const char *mqtt_pass = ""; // Пароль от сервера

#define BUFFER_SIZE 100

// Функция получения данных от сервера

void callback(const MQTT::Publish& pub)
{
  Serial.print(pub.topic());   // выводим в сериал порт название топика
  Serial.print(" => ");
  Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных
 
  String payload = pub.payload_string();
 
  if(String(pub.topic()) == "test/led") // проверяем из нужного ли нам топика пришли данные
  {
  int stled = payload.toInt(); // преобразуем полученные данные в тип integer
  digitalWrite(15,R);
  digitalWrite(14,G);
  digitalWrite(12,B);
  }
}



WiFiClient wclient;    
PubSubClient client(wclient, mqtt_server, mqtt_port);

void setup() {
  pinMode(15, 1);
  pinMode(12, 1);
  pinMode(14, 1);
  pinMode(knopka, INPUT_PULLUP);
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.println();
}

void loop() {
  // подключаемся к wi-fi
  if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Connecting to ");
    Serial.print(ssid);
    Serial.println("...");
    WiFi.begin(ssid, pass);

    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.subscribe("test/led"); // подписывааемся по топик
      } else {
        Serial.println("Could not connect to MQTT server"); 
      }
    }

    if (client.connected()){
      client.loop();
      rand_send();
  }
 
}
} // конец основного цикла


// Функция отправки
void rand_send(){
int  d = digitalRead(knopka);
  if(d == 0){
     R = random(255);
     G = random(255);
     B = random(255);
   
  client.publish("test/led", String(R)); // отправляем в топик
  client.publish("test/led", String(G));
  client.publish("test/led", String(B));
  }
  delay(1000);
}
 
Последнее редактирование:

andrik_zp

Member
MQTT протокол подразумевает работу с брокером. Друг с другом есп работать не будут, только через брокера.
 
Сверху Снизу