ESTOY USANDO UNA PLACA ESP32 Y NO PUEDO ENCENDER UN LED DESDE UBIDOTS MEDIANTE UN DASHBOARD DE SWITCH , TAMPOCO PUEDO MOVER UN SERVOMOTOR CON EL DASHBOARD DE SLIDER, LO QUE PASA ES QUE ESTOY REFLEJANDO OTROS DATOS DE DOS SENSORES MAS QUE ES UN SENSOR ULTRASONICO Y UN POTENCIOMETRO, POR LA CUAL AL MANDAR LOS DATOS DE LOS SENSORES SI SE REFLEJAN EN UBIDOTS PERO AL MOMENTO DE YO QUEERER MANDAR DATOS DESDE UBIDOTS PARA PODER ENCENDER EL LED NO ME FUNCIONA , YA VERIFIQUE LAS VARIABLES Y COINCIDEN DE LOS DOS LADOS
ESTE ES EL CODIGO QUE ESTOY USANDO
#include “UbidotsEsp32Mqtt.h”
#include “wifiM.h”
#include <ESP32Servo.h>
#include <ESP32PWM.h>
#include <Ticker.h>
#include “UltrasonicSensor.h”
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
const char *UBIDOTS_TOKEN = “BBUS-hkg4Dov3yEitAflT9IrHH6iqe2tARy”;
const char *DEVICE_LABEL = “espEu”;
const char *VARIABLE_LABEL = “pin_poten”;
const char *VARIABLE_LABEL_LED = “led”;
const char *VARIABLE_LABEL_SERVO = “servo”;
const char *VARIABLE_LABEL_DISTANCE = “pin_distancia”;
const int PUBLISH_FREQUENCY = 5000;
unsigned long timer = 0;
const uint8_t analogPin = 35;
const uint8_t ledPin = 12;
const uint8_t servoPin = 4;
const int buttonPin = 32;
int ledState = LOW;
int potValue = 0;
int servoValue = 0;
float distanceValue = 0;
int lcdState = 0;
int newButtonState = 0;
int oldButtonState = 0;
Ubidots ubidots(UBIDOTS_TOKEN);
UltrasonicSensor ultrasonico(5, 18);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo myServo;
Ticker tickLimite, tickDistancia, tickPantalla;
void actualizaDistancia() {
distanceValue = ultrasonico.getDistance();
}
void actualizaLimite() {
int lim = analogRead(analogPin);
potValue = map(lim, 0, 4095, 0, 1023);
}
void enviarDatos() {
ubidots.add(VARIABLE_LABEL, potValue);
ubidots.add(VARIABLE_LABEL_DISTANCE, distanceValue);
ubidots.publish(DEVICE_LABEL);
Serial.println(“LED:” + String(ledState));
Serial.println("Potenciometro: " + String(potValue));
Serial.println(“Servo:” + String(servoValue));
Serial.println(“Distancia:” + String(distanceValue));
}
void actualizaPantalla() {
lcd.clear();
switch (lcdState) {
case 0:
lcd.setCursor(0, 0);
lcd.print(“led:”);
lcd.setCursor(0, 1);
lcd.print(ledState == HIGH ? “ON” : “OFF”);
break;
case 1:
lcd.setCursor(0, 0);
lcd.print(“Servo:”);
lcd.setCursor(0, 1);
lcd.print(servoValue);
break;
case 2:
lcd.setCursor(0, 0);
lcd.print(“Distancia:”);
lcd.setCursor(0, 1);
lcd.print(distanceValue);
break;
case 3:
lcd.setCursor(0, 0);
lcd.print(“Potenciometro:”);
lcd.setCursor(0, 1);
lcd.print(potValue);
break;
case 4:
lcd.setCursor(0, 0);
lcd.print(“IP:”);
lcd.print(WiFi.localIP());
lcd.setCursor(0, 1);
lcd.print(“Red:”);
lcd.print(WiFi.SSID());
break;
case 5:
lcd.setCursor(0, 0);
lcd.print(“Nombre: EULOGIO”);
lcd.setCursor(0, 1);
lcd.print(“MEDINA”);
break;
}
}
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print(“Mensaje recibido [”);
Serial.print(topic);
Serial.print("] ");
String message;
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.println(message);
String expectedTopicLed = String(“/v1.6/devices/”) + String(DEVICE_LABEL) + “/” + String(VARIABLE_LABEL_LED) + “/lv”;
String expectedTopicServo = String(“/v1.6/devices/”) + String(DEVICE_LABEL) + “/” + String(VARIABLE_LABEL_SERVO) + “/lv”;
if (String(topic).equals(expectedTopicLed)) {
int mess = message.toInt();
ledState = (mess == 1) ? HIGH : LOW;
digitalWrite(ledPin, ledState);
} else if (String(topic).equals(expectedTopicServo)) {
int serValue = message.toInt();
if (serValue >= 0 && serValue <= 180) {
myServo.write(serValue);
servoValue = serValue;
}
}
}
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(ledPin, OUTPUT);
pinMode(buttonPin,INPUT);
myServo.attach(servoPin);
myServo.write(servoValue);
conectaWifi_Gabriel();
ubidots.setCallback(callback);
ubidots.setup();
ubidots.reconnect();
String topicLed = “/v1.6/devices/” + String(DEVICE_LABEL) + “/” + VARIABLE_LABEL_LED + “/lv”;
ubidots.subscribe(topicLed.c_str());
String topicServo = “/v1.6/devices/” + String(DEVICE_LABEL) + “/” + VARIABLE_LABEL_SERVO + “/lv”;
ubidots.subscribe(topicServo.c_str());
timer = millis();
tickLimite.attach(0.8, actualizaLimite);
tickDistancia.attach(0.8, actualizaDistancia);
tickPantalla.attach(0.5, actualizaPantalla);
}
void loop() {
newButtonState = digitalRead(buttonPin);
if (newButtonState != oldButtonState) {
Serial.print(“Boton presionado”);
oldButtonState = newButtonState;
if (newButtonState == LOW) {
Serial.print("Boton ");
lcdState++;
if (lcdState > 5) {
lcdState = 0;
Serial.print(lcdState);
Serial.print(lcdState +“opcion de boton”);
}
}
delay(200);
}
if (!ubidots.connected()) {
ubidots.reconnect();
}
if (millis() - timer >= PUBLISH_FREQUENCY) {
enviarDatos();
timer = millis();
}
ubidots.loop();
}