#include <PubSubClient.h>
#include <WiFi.h>
#include <ArduinoJson.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 = "N3jFCNr2Mwo_868EzKwqjVZakb27sReD";
int LED_BUILTIN = 22;
int botao = 23;
int botaoDesliga = 19;
unsigned long tempoDebounce = millis();
unsigned long tempoDebounce2 = millis();
unsigned long tempoDebounce3 = millis();
bool leiturabotaoDesliga;
bool leiturabotaoLiga;
WiFiClient espClient;
PubSubClient client(espClient);
void leituraAnalogica();
void botaoLigado();
void botaoDesligado();
void setup() {
digitalWrite(LED_BUILTIN, HIGH);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(25, OUTPUT);
pinMode(botao, INPUT);
pinMode(botaoDesliga, INPUT);
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() {
client.loop();
leituraAnalogica();
botaoLigado();
botaoDesligado();
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);
}
}
}
void leituraAnalogica(){
if((millis() - tempoDebounce3) > 3000){
int leitura = analogRead(34);
int umidadeSolo = map(leitura,0,4095,100,0);
analogWrite(25, leitura/16);
char cstr[16];
itoa(umidadeSolo, cstr, 10);
client.publish("ds/umidade", cstr);
tempoDebounce3 = millis();
}
}
void botaoLigado(){
if((millis() - tempoDebounce) > 300){
if(leiturabotaoLiga != digitalRead(botao)){
char cstr[16];
itoa(digitalRead(botao), cstr, 10);
client.publish("ds/botaoDesliga", cstr);
leiturabotaoLiga = digitalRead(botao);
tempoDebounce = millis();
}
}
}
void botaoDesligado(){
if((millis() - tempoDebounce2) > 300){
if(leiturabotaoDesliga != digitalRead(botaoDesliga)){
char cstr[16];
itoa(digitalRead(botaoDesliga), cstr, 10);
client.publish("ds/botaoLiga", cstr);
leiturabotaoDesliga = digitalRead(botaoDesliga);
tempoDebounce2 = millis();
}
}
}