#include <PubSubClient.h>
#include <WiFi.h>
#include <Wire.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqttServer = "ny3.blynk.cloud";
const int mqttPort = 1883;
const char* mqttUser = "device";
const char* mqttPassword = "eTabJf9whrnK1dbOd32rT14A712d5lqT";
int sensorTemperatura = 34;
int sensorTurbidez = 35;
int sensorPh = 32;
int sensorNivel = 33;
int leituraSensorTemperatura;
int leituraSensorTurbidez;
int leituraSensorPh;
int leituraSensorNivel;
unsigned long tempoDebounce = millis();
unsigned long tempoDebounce2 = millis();
unsigned long tempoDebounce3 = millis();
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("Connecting to WiFi:");
Serial.println(ssid);
}
Serial.println("Connected to the WiFi network");
Serial.println("");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
while (!client.connected()) {
Serial.println("Connecting to MQTT…");
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str(), mqttUser, mqttPassword )) {
//if (client.connect(clientId.c_str())) {
Serial.println("connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
Serial.print("Tentando enviar a mensagem");
client.subscribe("downlink/#");
client.subscribe("ds/#");
char envioDados[300];
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.println("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message: ");
char mensagem[length];
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
mensagem[i] = (char)payload[i];
}
Serial.println("");
String topico = String(topic);
/* if(topico == "downlink/ds/led"){
if((char)payload[0] == '1'){
digitalWrite(LED_BUILTIN, HIGH);
}
if((char)payload[0] == '0'){
digitalWrite(LED_BUILTIN, LOW);
}
} */
}
void loop() {
leituraSensorTemperatura = analogRead(sensorTemperatura);
leituraSensorTurbidez = analogRead(sensorTurbidez);
leituraSensorPh = analogRead(sensorPh);
leituraSensorNivel = analogRead(sensorNivel);
int temperatura = map(leituraSensorTemperatura, 0, 4095, 0, 100);
int turbidez = map(leituraSensorTurbidez, 0, 4095, 0, 100);
int ph = map(leituraSensorPh, 0, 4095, 0, 14);
int nivel = map(leituraSensorNivel, 0, 4095, 0, 50);
Serial.println("Temperatura: " + String(temperatura) + " C ");
Serial.println("Turbidez: " + String(turbidez) + " NTU");
Serial.println("Nivel da Agua: " + String(nivel) + "m");
Serial.println("PH: " + String(ph));
Serial.println("");
char cstr[16];
char cstr1[16];
char cstr2[16];
char cstr3[16];
itoa(temperatura, cstr, 10);
itoa(turbidez, cstr1, 10);
itoa(nivel, cstr2, 10);
itoa(ph, cstr3, 10);
client.publish("ds/temperatura", cstr);
client.publish("ds/turbidez", cstr1);
client.publish("ds/nivel", cstr2);
client.publish("ds/ph", cstr3);
delay(1000);
}