// Servo Sweep example for the ESP32
// https://wokwi.com/arduino/projects/323706614646309460
#include <WiFi.h>
#include <ESP32Servo.h>
#include <PubSubClient.h>
const int servoPin = 18;
Servo servo;
// Ini untuk wifi kusus di simulasi wokwi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.mqtt-dashboard.com";
const char *mqtt_user = "";
const char *mqtt_pass = "";
const int mqtt_port = 1883;
//ubah dengan nama topik (namakamu) yg berbeda dengan teman kamu
#define TOPIK "kreatv/servo"
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
delay(10);
// mulai konek ke wifi
Serial.begin(115200);
Serial.println();
Serial.print("Terhubung ke .. ");
Serial.println(ssid);
WiFi.mode(WIFI_STA); //setting wifi chip sebagai station/client
WiFi.begin(ssid, password); //koneksi ke jaringan wifi
while (WiFi.status() != WL_CONNECTED) { //perintah tunggu esp32 sampi terkoneksi ke wifi
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi terhubung");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
//set server dan callback
client.setServer(mqtt_server, mqtt_port);
client.setCallback(mqtt_callback);
servo.attach(servoPin);
}
void reconnectmqtt()
{
//di eksekusi saat mqtt putus
String mqtt_client_name = "Unesa-d4-";
mqtt_client_name += String(random(0xffff), HEX);
Serial.println("Connecting to MQTT server..");
if (client.connect(mqtt_client_name.c_str(),mqtt_user, mqtt_pass)) {
Serial.println("terhubung ke MQTT server");
} else {
Serial.println("gagal terhubung ke MQTT server");
}
if (client.connected()){
Serial.println("subscribe ke topik: ");
Serial.println(TOPIK);
client.subscribe(TOPIK); //subscribe ke topik
}
}
void loop() {
if (!client.connected())
{
reconnectmqtt();
}
else client.loop(); //cek terus kalau ada data masuk
}
//function dibawah ini untuk mengambil data yg masuk dari topik yg telah di SUB
void mqtt_callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
String message;
for (int i = 0; i < length; i++) {
message = message + (char)payload[i]; //Conver *byte to String
}
Serial.print(message);
int pos = message.toInt();
servo.write(pos);
delay(15);
Serial.println();
Serial.println("-----------------------");
}