#include <WiFi.h>
#include "PubSubClient.h"
//setting awal MQTT
char* mqttServer = "broker.emqx.io"; //sesuai dengan aplikasi yang dipakai
int mqttPort = 1883;
String myClientID = "091";
String Topic_1 = "alat/data/adc";
String Topic_2 = "alat/data/lux";
//Membuat object MQTT client dan jenis koneksi
WiFiClient wifi;
PubSubClient mqttClient(wifi);
char* ssid = "Wokwi-GUEST";
char* pass = "";
void setup() {
pinMode(32, INPUT);
Serial.begin(115200);
WiFi.mode(WIFI_STA); //agar ESP jadi mode station
WiFi.begin(ssid,pass); //untuk meminta ESP connect
while(WiFi.status()!= WL_CONNECTED){
delay(100);
Serial.println("wait a minute...");
}
Serial.println("ESP 32 already connected");
//memerintahkan ESP untuk mengetahui alamat broker
init_to_broker(mqttServer, mqttPort);
//memerintahkan untuk connect broker
connect_to_broker(myClientID);
}
void loop() {
// These constants should match the photoresistor's "gamma" and "rl10" attributes
const float GAMMA = 0.7;
const float RL10 = 50;
// Convert the analog value into lux value:
int analogValue = analogRead(32);
float voltage = analogValue / 4096. * 5;
float resistance = 2000 * voltage / (1 - voltage/ 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.print("Nilai ADC =");
Serial.println(analogValue);
delay(500);
Serial.print("Nilai Lux =");
Serial.println(lux);
mqtt_publish(Topic_1, analogValue);
mqtt_publish(Topic_2, lux);
delay(1000);
}
void init_to_broker(char* myMqttServer, int myMqttPort) {
mqttClient.setServer(myMqttServer, myMqttPort); // Mengatur detail broker target yang digunakan
// jika kita ingin menerima pesan untuk langganan yang dibuat oleh klien sebagai subscriber
// mqttClient.setCallback(callback);
}
void connect_to_broker(String clientName) {
Serial.println("Connecting to MQTT Broker...");
String clientId = "ESP32Client-" + clientName;
mqttClient.connect(clientId.c_str()); // Connecting to Broker
while (!mqttClient.connected()) {
Serial.print("failed, rc=");
Serial.println(mqttClient.state());
Serial.println("Reconnecting to MQTT Broker..");
delay(1000);
}
Serial.print(clientId);
Serial.println(" Device to Broker Connected.");
}
void mqtt_publish(String yourTopic, float yourPayload){
char yourPayloadString[8];
dtostrf(yourPayload, 1, 2, yourPayloadString);
mqttClient.publish(yourTopic.c_str(), yourPayloadString);
Serial.print(yourTopic);
Serial.print(" ==> ");
Serial.println(yourPayload);
}