#include <WiFi.h>
#include <MQTT.h>
#include <WiFiClient.h>
#include <ESP32Servo.h>
const int LED1 = 26;
const int pinR = 17;
const int pinG = 18;
const int pinB = 19;
int i = 0;
WiFiClient TCPclient;
MQTTClient mqtt;
Servo sm;
void setColor(String hex) {
int redValue = strtol(hex.substring(0, 2).c_str(), NULL, 16);
int greenValue = strtol(hex.substring(2, 4).c_str(), NULL, 16);
int blueValue = strtol(hex.substring(4, 6).c_str(), NULL, 16);
analogWrite(pinR, redValue);
analogWrite(pinG, greenValue);
analogWrite(pinB, blueValue);
}
void printMessage(String topic, String payload) {
Serial.print("Прийнято повідомлення за темою: ");
Serial.println(topic);
Serial.print("Вміст: ");
Serial.println(payload);
Serial.print("\n");
}
void handleMessage(String &topic, String &payload) {
printMessage(topic, payload);
}
void toggleLED(String &topic, String &payload) {
printMessage(topic, payload);
int value = payload.toInt();
if (value == 0) {
digitalWrite(LED1, LOW);
} else if (value == 1) {
digitalWrite(LED1, HIGH);
}
}
void servo(String &topic, String &payload) {
printMessage(topic, payload);
int angle = payload.toInt();
if(angle == 1) {
sm.write(90);
}
}
void color(String &topic, String &payload) {
printMessage(topic, payload);
String hexColor = payload.substring(1);
hexColor.trim();
setColor(hexColor);
}
void setup() {
pinMode(LED1, OUTPUT);
pinMode(pinR, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(pinB, OUTPUT);
digitalWrite(LED1, LOW);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
sm.attach(14);
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println(" Connected!");
mqtt.begin("yuki-smart-home.cloud.shiftr.io", 1883, TCPclient);
Serial.print("\nConnecting to broker");
while(!mqtt.connect("SmartHome", "yuki-smart-home", "FIeSpBqRvxpyXFXd")) {
Serial.print(".");
delay(1000);
}
Serial.println(" Connected!");
//Завдання №2
// mqtt.publish("/it126", "Hello!");
//Завдання №4-5
// mqtt.onMessage(handleMessage);
// mqtt.subscribe("/it126/handle/");
//Завдання №6
// mqtt.onMessage(toggleLED);
// mqtt.subscribe("/yuki/light");
//Завдання №7
mqtt.onMessage(servo);
mqtt.subscribe("/yuki/feeder");
//Завдання №8
// mqtt.onMessage(color);
// mqtt.subscribe("/it126/color/");
}
void loop() {
mqtt.loop(); //Завдання №3-4-5-6-7-8
delay(1000); //Завдання №4-5-6-7-8
//Завдання №3
// i++;
// mqtt.publish("/it126/numbers/", String(i));
// delay(5000);
}