ESP32 Arduino MQTT: несколько методов связи MQTT с примерами кода

«ESP32 Arduino MQTT» — это тема, связанная с использованием платы микроконтроллера ESP32 с платформой Arduino для установления связи с брокером MQTT (транспорт телеметрии очереди сообщений). MQTT — это облегченный протокол обмена сообщениями, обычно используемый в приложениях IoT (Интернета вещей). Вот несколько способов реализации MQTT на ESP32 с использованием Arduino, а также примеры кода:

Метод 1: использование библиотеки PubSubClient
Библиотека PubSubClient — это популярная клиентская библиотека MQTT для Arduino. Вот пример его использования с ESP32:

#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "your_wifi_ssid";
const char* password = "your_wifi_password";
const char* mqttServer = "mqtt_server_address";
const int mqttPort = 1883;
const char* mqttUser = "mqtt_username";
const char* mqttPassword = "mqtt_password";
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

  Serial.println("Connected to WiFi");
  client.setServer(mqttServer, mqttPort);

  while (!client.connected()) {
    if (client.connect("ESP32Client", mqttUser, mqttPassword)) {
      Serial.println("Connected to MQTT broker");
    } else {
      Serial.print("Failed with state ");
      Serial.print(client.state());
      delay(2000);
    }
  }

  client.publish("esp32/arduino", "Hello from ESP32");
}
void loop() {
  client.loop();
}

Метод 2: использование библиотеки MQTT
Библиотека MQTT обеспечивает поддержку MQTT для Arduino. Вот пример его использования с ESP32:

#include <WiFi.h>
#include <MQTT.h>
const char* ssid = "your_wifi_ssid";
const char* password = "your_wifi_password";
const char* mqttServer = "mqtt_server_address";
const int mqttPort = 1883;
const char* mqttUser = "mqtt_username";
const char* mqttPassword = "mqtt_password";
WiFiClient net;
MQTTClient client;
void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
  client.begin(mqttServer, net);
  client.connect("ESP32Client", mqttUser, mqttPassword);
  while (!client.connected()) {
    Serial.println("Connecting to MQTT broker...");
    delay(1000);
  }
  Serial.println("Connected to MQTT broker");
  client.publish("esp32/arduino", "Hello from ESP32");
}
void loop() {
  client.loop();
}

Метод 3. Использование библиотеки AsyncMqttClient
Библиотека AsyncMqttClient обеспечивает асинхронную связь MQTT на ESP32. Вот пример использования этой библиотеки:

#include <WiFi.h>
#include <AsyncMqttClient.h>
const char* ssid = "your_wifi_ssid";
const char* password = "your_wifi_password";
const char* mqttServer = "mqtt_server_address";
const int mqttPort = 1883;
const char* mqttUser = "mqtt_username";
const char* mqttPassword = "mqtt_password";
WiFiClient wifiClient;
AsyncMqttClient mqttClient;
void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
  mqttClient.setServer(mqttServer, mqttPort);
  mqttClient.setCredentials(mqttUser, mqttPassword);
  mqttClient.connect();
  mqttClient.publish("esp32/arduino", 0, true, "Hello from ESP32");
}
void loop() {
  // Handle MQTT client events
  mqttClient.loop();
}