Skip to main content

Подключение ESP32 или ESP8266 по MQTT.

Версия: 1.26.0

ESP32 и ESP8266 — одни из самых популярных и хорошо зарекомендовавших себя плат для устройств от Espressif. ESP32 и ESP8266 (и другие типы) можно легко связать с экземпляром OpenRemote с помощью нашего MQTT Broker. Если у вас имеется большее количество подключаемых устройств, возможно, вы захотите использовать процесс автоматической подготовки. Это позволяет вам подготовить ваши устройства таким образом, чтобы они автоматически подключали ваши устройства к OpenRemote, создавали активы определенного вами типа и связывали атрибуты с нужными темами. ESP32 и ESP8266 идеально подходят для его использования.

Вот несколько практических советов и примеров кода, которые помогут вам приступить к работе.

Публикация и подписка на темы через MQTT

Это базовый пример MQTT для подключения к OpenRemote MQTT Broker. Он состоит из двух файлов OpenRemoteESP32.ino и secret.h. Обязательно настройте yourrealm, ClientID, AttributeName и AssetID для каждой темы в соответствии с вашими настройками. Также добавьте действительный сертификат.

OpenRemoteESP32.ino

#include "secret.h"

#if defined(ESP8266)
#include <ESP8266WiFi.h>
#else
#include <WiFi.h>
#endif
#include <WiFiClientSecure.h>
#include <PubSubClient.h>

WiFiClientSecure networkClient;
PubSubClient client(networkClient);

void callback(char* topicName, byte* payload, unsigned int length) {
Serial.print(topicName);
Serial.print(": ");
for (unsigned int i = 0; i < length; i++) Serial.print((char)payload[i]);
Serial.println();
}

void reconnect() {
while (!client.connected()) {
if (client.connect(clientId, username, mqttPassword, lastWillTopic, 1, true, "0")) {
client.subscribe(subscribeTopic);
} else {
delay(5000);
}
}
}

void setup() {
Serial.begin(115200);
WiFi.begin(ssid, wifiPassword);
while (WiFi.status() != WL_CONNECTED) delay(500);

networkClient.setCACert(rootCa);
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
}

void loop() {
if (!client.connected()) reconnect();
client.loop();
client.publish(publishTopic, "1");
delay(10000);
}

Этот код предназначен для ESP32. Если вы используете ESP8266, измените библиотеку Wi-Fi. #include <ESP8266WiFi.h> (см. код)

Для SSL-соединения ESP8266 вам понадобится отпечаток вашего сертификата сервера. Пример: "static const char *fingerprint PROGMEM = "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00";" и в настройке: askClient.setFingerprint(fingerprint);.

Этот скетч демонстрирует основные возможности библиотеки. Затем он подключается к OpenRemote MQTT Broker:

  • публикует логическое значение «1» в вашей теме
  • публикует «Привет» в другой теме
  • подписывается на вашу тему, распечатывая любые сообщения

Он повторно подключится к серверу, если соединение будет потеряно, используя функцию блокировки повторного подключения.

secret.h

#pragma once

const char* ssid = "xxxxxxxxxx";
const char* wifiPassword = "xxxxxxxxxx";
const char* mqttServer = "your-installation.example";
const unsigned int mqttPort = 8883;
const char* username = "yourrealm:service-user";
const char* mqttPassword = "xxxxxxxxxx";
const char* clientId = "device-01";
const char* publishTopic = "yourrealm/device-01/writeattributevalue/AttributeName/AssetID";
const char* subscribeTopic = "yourrealm/device-01/attributevalue/AttributeName/#";
const char* lastWillTopic = "yourrealm/device-01/writeattributevalue/AttributeName/AssetID";

static const char rootCa[] = R"EOF(
-----BEGIN CERTIFICATE-----
Replace this line with the PEM-encoded CA certificate.
-----END CERTIFICATE-----
)EOF";

Отредактируйте secret.h для своих учетных данных.

Если вы подключаетесь к незащищенному брокеру, измените объект «WifiClientSecure» на «WifiClient» и закомментируйте в настройке AskClient.setCACert(local_root_ca); Также измените порт MQTT в secret.h.

Важно: не забудьте добавить PubSubClient в свою библиотеку https://github.com/knolleary/pubsubclient.

Автоматическая подготовка устройств на базе ESP32

OpenRemote поддерживает автоматическую настройку, которую также можно применять с продуктами Espressif. См. Руководство пользователя. Автоматическая инициализация.

Обратите внимание, что вам необходимо добавить сертификат CA и добавить код, чтобы найти соответствующий сертификат CA для сервера, что сделает возможным безопасное соединение.

См. также


Уведомление о лицензии: атрибуция документации OpenRemote