#include <WiFi.h>
#include <WiFi.h>
#include "PubSubClient.h"
const char* ssid="Wokwi-GUEST";
const char* password="";
// Configurações de MQTT
const char* BROKER_MQTT = "mqtt.tago.io";
const int BROKER_PORT = 1883;
const char* MQTT_USER = "Victor";//user
const char* PASWORD_MQTT = "ee62751f-07f6-4805-85d5-f17496b1a23b";
const char* MQTT_TOPIC = "tarefa1";
char msg[50];
WiFiClient espClient;
PubSubClient client (espClient);
void setup() {
pinMode(32, INPUT);
pinMode(33, INPUT);
pinMode(34, INPUT);
pinMode(35, INPUT);
pinMode(23, INPUT);
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando ao WiFi...");
}
Serial.println("Conectado ao WiFi");
client.setServer(BROKER_MQTT, BROKER_PORT);
//client.setCallback(callback);
}
void connect_client(){
String client_id = "esp32-client-";
client_id +=String(WiFi.macAddress());
Serial.printf("The client %s connects to the public MQTT broker",client_id.c_str());
if(client.connect(client_id.c_str(),MQTT_USER, PASWORD_MQTT)){
Serial.println("Public EMQX MQTT broker connected");
} else {
Serial.printf("failed with state %d\n", client.state());
delay(2000);
}
}
void loop() {
while(!client.connected()){
connect_client();
}
memset(msg, 0, sizeof(msg));
int tank1_level=map(analogRead(33),0,4095,0,10);
snprintf(msg,sizeof(msg),"[{\"variable\":\"tank1_level\",\"value\":%d}]",tank1_level);
client.publish(MQTT_TOPIC,msg);
delay(100);
float tank1_volume=PI*1*tank1_level;
if(tank1_volume>31.41){
memset(msg, 0, sizeof(msg));
snprintf(msg,sizeof(msg),"[{\"variable\":\"tank1_volume\",\"value\":\"MAX\"}]");
client.publish(MQTT_TOPIC,msg);
}
else{
if(tank1_volume<0.1){
memset(msg, 0, sizeof(msg));
snprintf(msg,sizeof(msg),"[{\"variable\":\"tank1_volume\",\"value\":\"MIN\"}]");
client.publish(MQTT_TOPIC,msg);
}
else{
memset(msg, 0, sizeof(msg));
snprintf(msg,sizeof(msg),"[{\"variable\":\"tank1_volume\",\"value\":%.2f}]",tank1_volume);
client.publish(MQTT_TOPIC,msg);
}
}
delay(100);
int tank2_level=map(analogRead(32),0,4095,0,10);
memset(msg, 0, sizeof(msg));
snprintf(msg,sizeof(msg),"[{\"variable\":\"tank2_level\",\"value\":%d}]",tank2_level);
client.publish(MQTT_TOPIC,msg);
delay(100);
float tank2_volume=PI*1*tank2_level;
if(tank2_volume>31.41){
memset(msg, 0, sizeof(msg));
snprintf(msg,sizeof(msg),"[{\"variable\":\"tank2_volume\",\"value\":\"MAX\"}]");
client.publish(MQTT_TOPIC,msg);
}
else{
if(tank2_volume<0.1){
memset(msg, 0, sizeof(msg));
snprintf(msg,sizeof(msg),"[{\"variable\":\"tank2_volume\",\"value\":\"MIN\"}]");
client.publish(MQTT_TOPIC,msg);
}
else{
memset(msg, 0, sizeof(msg));
snprintf(msg,sizeof(msg),"[{\"variable\":\"tank2_volume\",\"value\":%.2f}]",tank2_volume);
client.publish(MQTT_TOPIC,msg);
}
}
delay(100);
int grain_level=map(analogRead(35),0,4095,0,100);
memset(msg, 0, sizeof(msg));
snprintf(msg,sizeof(msg),"[{\"variable\":\"grain_level\",\"value\":%d}]",grain_level);
client.publish(MQTT_TOPIC,msg);
delay(100);
int temp=map(analogRead(34),0,4095,0,50);
memset(msg, 0, sizeof(msg));
snprintf(msg,sizeof(msg),"[{\"variable\":\"temperature\",\"value\":%d}]",temp);
client.publish(MQTT_TOPIC,msg);
delay(100);
int gate_status=digitalRead(23);
if(digitalRead(23)==1){
memset(msg, 0, sizeof(msg));
snprintf(msg,sizeof(msg),"[{\"variable\":\"door_status\",\"value\":\"Closed\"}]");
client.publish(MQTT_TOPIC,msg);
delay(100);
}
else{
memset(msg, 0, sizeof(msg));
snprintf(msg,sizeof(msg),"[{\"variable\":\"door_status\",\"value\":\"Open\"}]");
client.publish(MQTT_TOPIC,msg);
delay(100);
}
delay(500);
}