Hola, recurro a vosotros nuevamente para intentar solucionar algo que en realidad no he podido solucionar:
Tengo un Esp32 wifi lora v32 con pantalla ole incluida, un sensor humedad de tierra HW-080, el cual pongo a funcionar con 3,3v ya que el moduloesp32 soloadmite por sus entradas 3,3v, estos modulos de humedad no me han dado problemas con placas arduino donde van alimentadas con 5v, pero el problema esta en que al poner el modulo con el esp32 v2 obtengo una lectura de 400 en seco cuando debiera de ser 0, he intentado cambiar los valores, ponerle offset para restar el valor resultante, colocarles resistencias para hacer como un divisor de tension, pero al poner dichas resistencias solo obtengo 0 sin cambios.
cuando he puesto offset, estos en vez de restarse lo que hace es sumarlos al valor resultante que es el que quiero que en seco sea 0 y en humedo 400.
Decir que los valores que he obtenido haciendo las pruevas tanto en seco como en humedo son las siguientes:
valor seco = 400
valor humedo = 170
#include "heltec.h"
#define Sensor0 13
#define Boton 15
// LoRa Band ISM en la Región 868MHz
#define BAND 868E6 // 433E6, 868E6, 915E6
byte spread_factor = 8; // Rango 6-12, por defecto 7
// Mensaje LoRa a enviar con direcciones
byte dir_local = 0xC1; // Dispositivo 1
byte dir_destino = 0xD1; // Dispositivo 2
byte id_msjLoRa = 0; // Conteo de mensajes
// SENSOR Blink
//String sensorEstado = "ON"; // ON/OFF: 1/0
// Tiempo entre lecturas
long tiempo_antes = 0;
long tiempo_intervalo = 60000; // 1 minuto
long tiempo_espera = tiempo_intervalo + random(5000);
// Identificador único del dispositivo
byte identificador = 0x01;
unsigned long tiempo_ultimo_parpadeo = 0;
unsigned long tiempo_inicio_envio = 0;
unsigned long tiempo_anterior = 0;
bool pantalla_encendida = true;
unsigned long tiempo_pantalla = 0;
// Función para leer la humedad del suelo
int leer_humedad() {
int humedad = analogRead(13);
return humedad;
}
// Función para enviar datos vía LoRa
void envia_lora(byte dirDestino, byte dirLocal, byte idMensaje, byte idDispositivo, String datos) {
LoRa.beginPacket();
LoRa.write(dirDestino);
LoRa.write(dirLocal);
LoRa.write(idMensaje);
LoRa.write(idDispositivo);
LoRa.print(datos);
LoRa.endPacket();
}
void setup() {
pinMode(Sensor0, INPUT); // configura el pin del sensor 13 como entrada
pinMode(Boton, INPUT_PULLUP); // configura el pin 15 del boton como entrada pullup
Heltec.begin(true /*DisplayEnable Enable*/, // activamos el modulo esp32 v2
true /*Heltec.Heltec.Heltec.LoRa Disable*/,
true /*Serial Enable*/,
true /*PABOOST Enable*/,
BAND /*long BAND*/);
Heltec.display->init(); // iniciamos el modulo esp32 v2
Heltec.display->flipScreenVertically();
LoRa.setSpreadingFactor(spread_factor);
LoRa.receive(); // Configura LoRa para recibir mensajes
Heltec.display->clear();
Heltec.display->display();
// Mensaje en el monitor serial
Serial.begin(115200);
Serial.println("Configuración finalizada.");
}
void loop() {
// Leer los datos de la humedad del suelo
int humedad = leer_humedad();
int humedad_porcentaje = map(humedad, 0, 1023, 0, 100); // Convertir los datos de humedad a un porcentaje
Serial.println("ID: " + String(identificador));
Serial.println("humedad: " + String(humedad_porcentaje) + "%" ); // Imprimir el valor de humedad en porcentaje con el símbolo de porcentaje
// Datos en la pantalla
if (pantalla_encendida) {
Heltec.display->clear();
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
Heltec.display->setFont(ArialMT_Plain_24);
Heltec.display->drawString(0, 0, "ID: " + String(identificador));
Heltec.display->setFont(ArialMT_Plain_16);
Heltec.display->drawString(0, 30, "humedad: " + String(humedad_porcentaje) + " %");
Heltec.display->display();
}
// Verificar si el pulsador ha sido presionado
if (digitalRead(Boton) == HIGH) {
// Encender la pantalla por un minuto si no está encendida
if (!pantalla_encendida) { // si la pantalla no esta encendida
Heltec.display->displayOn();
tiempo_pantalla = millis() + 60000;
pantalla_encendida = true;
}
// Si la pantalla está encendida y se presiona el botón, apagarla
else if (digitalRead(Boton) == LOW) { // si la pantalla esta encendida
Heltec.display->displayOff();
pantalla_encendida = false;
}
}
// Verificar si es tiempo de apagar el LED
if (digitalRead(LED) == HIGH && millis() - tiempo_inicio_envio >= 500) {
digitalWrite(LED, LOW);
}
// Verificar si es tiempo de enviar los datos vía LoRa
if (millis() - tiempo_inicio_envio >= tiempo_espera) {
// Generar el mensaje a enviar
String mensaje = "ID:" + String(identificador) + ";H:" + String(humedad)+ "%";
envia_lora(dir_destino, dir_local, id_msjLoRa, identificador, mensaje);
// Encender el LED
digitalWrite(LED, HIGH);
// Actualizar los tiempos de espera
tiempo_inicio_envio = millis();
tiempo_espera = tiempo_intervalo + random(5000);
id_msjLoRa++;
}
// Verificar si es tiempo de apagar la pantalla
if (pantalla_encendida && millis() >= tiempo_pantalla) {
Heltec.display->displayOff();
pantalla_encendida = false;
}
}
la seccion es donde sice "Leer los datos de la humedad del suelo". Gracias