#include <WiFi.h>
#include <MQTT.h>
#include <ESP32Servo.h>
#include <NusabotSimpleTimer.h>
WiFiClient net;
MQTTClient client;
Servo servo;
NusabotSimpleTimer timer;
const char ssid[]="Wokwi-GUEST";
const char pass[]="";
const int pinMerah = 27;
const int pinHijau = 26;
const int pinBiru = 25;
const int pinLED = 33;
const int pinServo = 18;
const int pinPot = 35;
int pot, oldPot = 0;
void setup() {
// put your setup code here, to run once:
pinMode(pinMerah, OUTPUT);
pinMode(pinHijau, OUTPUT);
pinMode(pinBiru, OUTPUT);
pinMode(pinLED, OUTPUT);
servo.attach(pinServo, 500, 2400);
WiFi.begin(ssid, pass);
client.begin("broker.emqx.io", net);
client.onMessage(subscribe); //mengeksekusi function subsribe setiap data yang masuk//
timer.setInterval (1000,publish);
connect();
}
void loop() {
client.loop();
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}
void connect(){
rgb(1,0,0);
while (WiFi.status() !=WL_CONNECTED){
delay(500);
}
rgb(0,1,0);
while (!client.connect("xserialnumberxxxx")){
delay(500);
}
rgb(0,0,1);
client.subscribe("daffa/#");
}
void publish () {
pot = analogRead(pinPot);
if (pot != oldPot){
client.publish ("daffa/potentiometer", String(pot), false , 1);
oldPot = pot;
}
}
void subscribe (String &topic, String &data){
if(topic == "daffa/led"){
if(data == "nyala"){
digitalWrite(pinLED, 1);
}else{
digitalWrite(pinLED, 0);
}
}
if(topic == "daffa/servo"){
int pos = data.toInt();
servo.write(pos);
}
}
void rgb(bool red, bool green, bool blue){
digitalWrite(pinMerah, red);
digitalWrite(pinHijau, green);
digitalWrite(pinBiru, blue);
}