#include <ArduinoJson.h>
#include <PubSubClient.h>
#include "DHTesp.h"
#include <WiFi.h>
#include <ThingsBoard.h>
#include <ESP32Servo.h>
#define WIFI_AP "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TOKEN "nvMC8PXXCHBqlTvSnmCz" // Set Demo ThingsBoard device token
Servo myservo;
StaticJsonDocument<200> doc;
StaticJsonDocument<200> doc2;
const int DHT_PIN = 15;
DHTesp dhtSensor;
String m_luces = "";
char buffer2[300];
int status = WL_IDLE_STATUS;
String sr2 = "";
char rec[50];
String inputString = "";
float gf = 0.0, vel = 0.0;
int gi = 0;
char thingsboardServer[] = "demo.thingsboard.io";
WiFiClient espClient;
PubSubClient client(espClient);
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
status = WiFi.status();
if ( status != WL_CONNECTED) {
WiFi.begin(WIFI_AP, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
Serial.print("CONECTANDO...");
// Attempt to connect (clientId, username, password)
if ( client.connect("sensor", TOKEN, NULL) ) {
Serial.println( "CONECTADO" );
delay(2000);
// Subscribing to receive RPC requests
client.subscribe("v1/devices/me/rpc/request/+");
} else {
Serial.print( "[FAILED] [ rc = " );
Serial.print( client.state() );
Serial.println( " : retrying in 5 seconds]" );
// Wait 5 seconds before retrying
delay( 1000 );
}
}
}
void setup() {
Serial.begin(115200);
Serial.println();
pinMode(2, OUTPUT);
pinMode(5, OUTPUT);
myservo.setPeriodHertz(50);// Standard 50hz servo
myservo.attach(13, 500, 2400);
client.setServer( thingsboardServer, 1883 );
client.setCallback(callback);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
void loop() {
if ( !client.connected() ) {
reconnect();
}
client.loop();
TempAndHumidity data = dhtSensor.getTempAndHumidity();
doc["Temp"] = data.temperature;
doc["Hum"] = data.humidity;
char buffer[300];
serializeJson(doc, buffer);
client.publish("v1/devices/me/attributes",buffer);
delay(2000);
}
void callback(char* topic, byte* payload, unsigned int length) {
sr2 = "";
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
rec[i] = payload[i];
sr2 += rec[i];
inputString = sr2;
}
char msg2[inputString.length()];
Serial.println(msg2);
inputString.toCharArray(msg2, inputString.length() + 1);
StaticJsonDocument<200> doc2;
DeserializationError error = deserializeJson(doc2, msg2);
// Test if parsing succeeds.
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
String value = doc2["params"];
String method_ = doc2["method"];
if (method_.equals("setValue")) {
if (value.equals("false"))
{
digitalWrite(2, LOW);
}
if (value.equals("true")) {
digitalWrite(2, HIGH);
}
}
if (method_.equals("setServo")) {
Serial.println(value);
Serial.println(method_);
int val_aux=value.toInt();
int val = map(val_aux, 0, 100, 0, 180);
myservo.write(val);
}
if (method_.equals("setValve")) {
}
}