// ============ Include Library ===================
#include <WiFi.h>
#include <PubSubClient.h>
#include <Arduino_JSON.h>
// ============ End Include Library ===================
// ============ Define Pin ===================
#define LED 13
#define ADC 34
// ============ End Define Pin ==============
// ============ Variabel ===================
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ============ MQTT ===============
const char* mqtt_server ="broker.mqtt-dashboard.com";
const char* topic_led = "led_topic_caio_joao_f2_Q8";
const char* topic_adc = "adc_topic_caio_joao_f2_Q9";
int port = 1883;
// ============ End MQTT ===============
unsigned long lastTime = 0;
unsigned long intervalTime = 1000;
uint32_t adc_value = 0;
char cstr[16];
// ============ End Variabel ===================
// ============ Class ===================
WiFiClient Client;
PubSubClient client(Client);
// ============ End Class ===================
// ============ Function ===================
void wifi_init();
void mqtt_init();
void led_init();
void analog_init();
void led_action(boolean action);
void process_data();
// ============ End Function ===================
void setup() {
Serial.begin(115200);
wifi_init();
mqtt_init();
led_init();
analog_init();
}
void loop() {
client.loop();
if (!client.connected()) {
mqtt_init();
}
if (millis() - lastTime > 500)
{
lastTime = millis();
adc_value = analogRead(ADC);
Serial.print("ADC Value: ");
Serial.println(adc_value);
itoa(adc_value, cstr, 10);
client.publish(topic_adc, cstr);
}
}
void wifi_init() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" Connected!");
}
void mqtt_init() {
client.setServer(mqtt_server, port);
client.setCallback(callback);
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "AulaIoT-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if(client.connect(clientId.c_str())) {
Serial.println("connected to the Broker");
client.subscribe("led_topic_caio_joao_f2_Q8"); //Tópico que o ESP subscreve.
} 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) {
String sMsg;
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
sMsg += (char) payload[i];
}
JSONVar objMsg = JSON.parse(sMsg);
process_data(objMsg);
Serial.println();
Serial.println("-----------------------");
if(sMsg == "1" || sMsg == "true" )
{
led_action(true);
}
else
{
led_action(false);
}
}
void led_init() {
pinMode(LED, OUTPUT);
}
void led_action(boolean action) {
if(action)
{
digitalWrite(LED, LOW);
}
else
{
digitalWrite(LED, HIGH);
}
}
void process_data(JSONVar jsonObject){
if (JSON.typeof(jsonObject) == "undefine") {
Serial.println("Gagal mendapatkan data karena type undefine");
return;
}
Serial.println("jsonObject :");
Serial.println(jsonObject);
Serial.println("");
}
void analog_init() {
pinMode(ADC, INPUT);
adc_value = analogRead(ADC);
}