• Система автоматизации с открытым исходным кодом на базе 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 протокол подразумевает работу с брокером. Друг с другом есп работать не будут, только через брокера.
 
Сверху Снизу