Подключение 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 для сервера, что сделает возможным безопасное соединение.
См. также
- Учебное пособие: подключите клиент MQTT
- Руководство пользователя: Менеджер APIs
- Руководство пользователя: автоматическая инициализация
Уведомление о лицензии: атрибуция документации OpenRemote