Сейчас много распространились розетки управляемые голосовыми помощниками или с телефона. Но такую розетку можно и самим сделать на esp8266. Для управления розеткой на ESP8266 через MQTT, необходимо выполнить следующие шаги:
- Подключить ESP8266 к Wi-Fi сети и настроить подключение к брокеру MQTT.
- Написать код для управления розеткой. Для этого можно использовать библиотеку PubSubClient, которая обеспечивает взаимодействие с брокером MQTT. В коде нужно определить функции, которые будут отвечать за подключение к брокеру, подписку на нужный топик и обработку сообщений.
- Создать топик, который будет использоваться для управления розеткой. Например, можно создать топик с именем “my_home/room/socket”.
- В зависимости от того, каким образом вы хотите управлять розеткой, вы можете отправлять сообщения с командами в созданный топик. Например, чтобы включить розетку, можно отправить сообщение “on” в топик “my_home/room/socket”.
- В коде ESP8266 необходимо определить функцию, которая будет обрабатывать сообщения, поступающие в топик. Например, если сообщение “on” было отправлено в топик “my_home/room/socket”, функция должна включить розетку.
Вот пример кода для управления розеткой на ESP8266 через MQTT с использованием библиотеки PubSubClient:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Wi-Fi параметры
const char* ssid = "название_вашей_сети";
const char* password = "пароль_от_вашей_сети";
// MQTT параметры
const char* mqtt_server = "адрес_брокера_mqtt";
const int mqtt_port = 1883;
const char* mqtt_username = "имя_пользователя_mqtt";
const char* mqtt_password = "пароль_mqtt";
// Параметры розетки
const char* topic = "my_home/room/socket";
const char* onMessage = "on";
const char* offMessage = "off";
bool socketState = false;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
setupWiFi();
setupMQTT();
}
void loop() {
if (!client.connected()) {
reconnectMQTT();
}
client.loop();
}
void setupWiFi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Wi-Fi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void setupMQTT() {
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
reconnectMQTT();
client.subscribe(topic);
}
void reconnectMQTT() {
while (!client.connected()) {
Serial.print("Connecting to MQTT broker...");
if (client.connect("ESP8266Client", mqtt_username, mqtt_password)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message received: [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
if (strcmp(topic, "my_home/room/socket") == 0) {
if (strcmp((char*)payload, onMessage) == 0) {
socketState = true;
// Включить розетку
Serial.println("Socket turned ON");
} else if (strcmp((char*)payload, offMessage) == 0) {
socketState = false;
// Выключить розетку
Serial.println("Socket turned OFF");
}
}
}
В этом примере ESP8266 подключается к Wi-Fi сети и к брокеру MQTT. Подписывается на топик “my_home/room/socket” и ожидает команды включения или выключения розетки. Если приходит сообщение “on”, розетка включается, а если приходит сообщение “off”, розетка выключается.