App inventor--- mostrar datos leidos de arduino sensor temperatura y humedad

Saludos terricolas----
estoy haciendo un proyecto en donde tengo, entre otros sensores y leds,... un sensor de temperatura y humedad... hasta ahora he podido hacer via bluetooth con app inventor que me encienda y apague ciertos puertos o leds... lo que quiero hacer ahora es que en la app me muestre los indices de temperatura y humedad .. he logrado que los muestre en arduino, en la pantalla lcd.. pero no logro los muestre en una app.... gracias a quienes me puedan ayudar o tengan algun totorial simple que enseñe como mostrar datos de sensores....
por lo pronto les muestro como tengo mis codigos..

CODIGO ARDUINO:

#include <Wire.h>    // incluye libreria para interfaz I2C
#include <RTClib.h>   // incluye libreria para el manejo del modulo RTC
#include <LiquidCrystal_I2C.h> // Libreria para LCD 
#include <DHT.h>    // importa la Librerias DHT
#include <DHT_U.h>
#include <SoftwareSerial.h>  // libreria que permite establecer pines digitales

// Definimos el pin digital donde se conecta el sensor DHT TEMPERATURA HUMEDAD
#define DHTPIN 2
// Dependiendo del tipo de sensor
#define DHTTYPE DHT11

SoftwareSerial miBT(11, 12);   // pin 11 como RX, pin 12 como TX


RTC_DS3231 rtc;     // crea objeto del tipo RTC_DS3231
bool evento_inicio = true;  // variable de control para inicio de evento con valor true
bool evento_fin = true;   // variable de control para finalizacion de evento con valor true

# define RELE 4     // CINTA LED (+) - pin digital 4
int FOCOTEMP = 5;     // LED / FOCO TEMPERATURA (+) - ENCIENDE O APAGA SEGUN TEMPERATURA

int TRIG = 10; //DISTANCIA ULTRASONIDO
int ECHO = 9; 
int LEDROJO = 3;
int LEDAMARILLO = 6;
int DURACION;
int DISTANCIA;

/// BLUETOOTH
char DATO = 0;      // variable para almacenar caracter recibido


LiquidCrystal_I2C lcd(0x27, 16, 2); //PANTALLA LCD)

// defino los nuevo caracter o imagenes
        byte letra1[8] = { B11111, B10101, B10101, B10001, B10001, B10101, B10101, B11111 }; // HUMEDAD
        byte letra2[8] = { B11111, B10001, B11011, B11011, B11011, B11011, B11011, B11111 }; // TEMPERATURA
        byte letra3[8] = { B00000, B10001, B11111, B11111, B11111, B11111, B11111, B00000 }; // NIVEL LLENO
        byte letra8[8] = { B00000, B10001, B10001, B10001, B10001, B10001, B11111, B00000 }; // nivel vacio
        
        byte letra4[8] = { B01110, B11111, B11111, B11011, B11011, B01110, B01110, B00100 }; // light off
        byte letra5[8] = { B01110, B10001, B10001, B10101, B10101, B01110, B01110, B00100 }; // light on

        byte letra6[8] = { B11100, B10100, B11100, B00000, B00111, B00100, B00100, B00111 }; // GRADOS CELCIUS
        byte letra7[8] = { B10010, B00100, B01000, B10010, B00000, B01010, B01110, B01010 }; // % HUMEDAD


        
///DHT11

        int SENSOR = 2;     // pin DATA de DHT22 a pin digital 2
        int TEMPERATURA;
        int HUMEDAD;
        DHT dht(DHTPIN, DHTTYPE);   // creacion del objeto, cambiar segundo parametro        // por DHT11 si se utiliza en lugar del DHT22

///fin DHT22

void setup(){
//pruebas
  pinMode(LEDAMARILLO, OUTPUT); //pin 6 led amarillo LED
  
//bluetooth
  miBT.begin(38400);    // comunicacion serie entre Arduino y el modulo a 38400 bps
  pinMode(LEDROJO, OUTPUT); // pin 3 como salida

// INICIAR DHT
      dht.begin();      // inicializacion de sensor

// inicializar LCD: 
      lcd.begin();
      lcd.backlight();
      lcd.clear();
          lcd.createChar(1, letra1);      // asigna los nuevos caracteres por numeros
          lcd.createChar(2, letra2);
          lcd.createChar(3, letra3);
          lcd.createChar(4, letra4);
          lcd.createChar(5, letra5);
          lcd.createChar(6, letra6);
          lcd.createChar(7, letra7);
          lcd.createChar(8, letra8);
     
//DISTANCIA ULTRASONIDO
      pinMode (TRIG, OUTPUT);
      pinMode (ECHO, INPUT);
      pinMode (LEDROJO, OUTPUT);
      Serial.begin(9600);

// CINTA LUZ LED

// FOCO TEMPERATURA (+)
 pinMode(FOCOTEMP, OUTPUT);   // pin 5 como salida FOCO TEMPERATURA



 if (! rtc.begin()) {       // si falla la inicializacion del modulo
 Serial.println("Modulo RTC no encontrado !");  // muestra mensaje de error
 while (1);         // bucle infinito que detiene ejecucion del programa
 }
//rtc.adjust(DateTime(__DATE__, __TIME__)); // funcion que permite establecer fecha y horario
            // al momento de la compilacion. Comentar esta linea
}

void loop(){

// pruebas
 pinMode(RELE, OUTPUT);   // pin 4 como salida CINTA LUZ

  
//BLUETOOTH
if (miBT.available()){      // si hay informacion disponible desde modulo
  DATO = miBT.read();   // almacena en DATO el caracter recibido desde modulo

  if( DATO == '1' )       // si el caracter recibido es el numero 1
  digitalWrite(LEDAMARILLO, !digitalRead(LEDAMARILLO)); // escribe valor opuesto al leido del LED rojo

}

//DISTANCIA ULTRASONIDO
  digitalWrite(TRIG, HIGH);
  delay(1);
  digitalWrite(TRIG, LOW);
  DURACION = pulseIn(ECHO, HIGH);
  DISTANCIA = DURACION / 5.82;
  Serial.println(DISTANCIA);




 DateTime fecha = rtc.now();        // funcion que devuelve fecha y horario en formato
              // DateTime y asigna a variable fecha
 
 if ( fecha.hour() == 12 && fecha.minute() == 40 ){ // si hora = 14 y minutos = 30
    if ( evento_inicio == true ){     // si evento_inicio es verdadero
      digitalWrite(RELE, HIGH);       // activa modulo de rele con nivel alto
      Serial.println( "Rele encendido" );   // muestra texto en monitor serie
      evento_inicio = false;        // carga valor falso en variable de control
    }             // para evitar ingresar mas de una vez
  }

 if ( fecha.hour() == 12 && fecha.minute() == 45 ){ // si hora = 15 y minutos = 30
    if ( evento_fin == true ){        // si evento_fin es verdadero
      digitalWrite(RELE, LOW);        // desactiva modulo de rele con nivel bajo
      Serial.println( "Rele apagado" );     // muestra texto en monitor serie
      evento_fin = false;       // carga valor falso en variable de control
    }             // para evitar ingresar mas de una vez
  }

 Serial.print(fecha.day());       // funcion que obtiene el dia de la fecha completa
 Serial.print("/");         // caracter barra como separador
 Serial.print(fecha.month());       // funcion que obtiene el mes de la fecha completa
 Serial.print("/");         // caracter barra como separador
 Serial.print(fecha.year());        // funcion que obtiene el año de la fecha completa
 Serial.print(" ");         // caracter espacio en blanco como separador
 Serial.print(fecha.hour());        // funcion que obtiene la hora de la fecha completa
 Serial.print(":");         // caracter dos puntos como separador
 Serial.print(fecha.minute());        // funcion que obtiene los minutos de la fecha completa
 Serial.print(":");         // caracter dos puntos como separador
 Serial.print(fecha.second());      // funcion que obtiene los segundos de la fecha completa
 

  if ( fecha.hour() == 2 && fecha.minute() == 0 ){  // si hora = 2 y minutos = 0 restablece valores de
    evento_inicio = true;       // variables de control en verdadero
    evento_fin = true;
  }


// Imprimir en la primera línea del LCD 

      lcd.setCursor(0,0);    
      lcd.clear();
      lcd.print(fecha.day());       // funcion que obtiene el dia de la fecha completa
      lcd.print("/");         // caracter barra como separador
      lcd.print(fecha.month());       // funcion que obtiene el mes de la fecha completa
      lcd.print("/");         // caracter barra como separador
      //lcd.print(fecha.year());        // funcion que obtiene el año de la fecha completa
      lcd.print(fecha.year() % 100);
      lcd.print(" ");         // caracter espacio en blanco como separador
      lcd.print(fecha.hour());        // funcion que obtiene la hora de la fecha completa
      lcd.print(":");         // caracter dos puntos como separador
      lcd.print(fecha.minute());        // funcion que obtiene los minutos de la fecha completa
      lcd.print(":");         // caracter dos puntos como separador
      lcd.print(fecha.second());      // funcion que obtiene los segundos de la fecha completa


//loop DHT 
  TEMPERATURA = dht.readTemperature();  // obtencion de valor de temperatura
  HUMEDAD = dht.readHumidity();   // obtencion de valor de humedad
  Serial.print("Temperatura: ");  // escritura en monitor serial de los valores
  Serial.print(TEMPERATURA);
  Serial.print("|");
  Serial.print(" Humedad: ");
  Serial.println(HUMEDAD);

  lcd.setCursor(0, 1);   // Posicion TEMPERATURA
  lcd.print(TEMPERATURA);
  lcd.write(byte(6));
  lcd.print(" ");

  lcd.print(HUMEDAD);
  lcd.write(byte(7));
  lcd.print(" ");

  if (TEMPERATURA < 24){
      digitalWrite(FOCOTEMP, HIGH);   
  }
  else{
      digitalWrite(FOCOTEMP, LOW);
  }


// LOOP DISTANCIA

  if (DISTANCIA >=40){
      digitalWrite(LEDROJO, HIGH);
      lcd.write(byte(8)); 
      lcd.print(DISTANCIA);
      lcd.print(" ");    
  }
  else{
      digitalWrite(LEDROJO, LOW);
      lcd.write(byte(3)); 
      lcd.print(DISTANCIA);    
      lcd.print(" ");
  }

  
  if( digitalRead(RELE) ){   //if high
    lcd.write(byte(5));
  }
  else{
    lcd.write(byte(4));
  }
  
delay(1000);

}

ACA COMO TENGO EL APP INVENTOR...

image

LO QUE QUIERO ES QUE ME MUESTRE LOS DATOS DONDE APARECE "text for lebel8... 10 y 12"
image

Pero tu duda tiene que ver específicamente con código bloque de la App inventor, no es una duda referente a Arduino.
Esto es una cuestión específica de esa App, la cual tiene su apartado de soporte, tutoriales, etc.

Por cierto, para aquellos que quieran que sus proyectos sean usados desde apps hay algo llamado flutter y con ese SDK es muy fácil hacer apps tanto para IOs cómo Android sin depender de cosas creadas por terceros (con la flexibilidad que ello garantiza) o incluso una app que luego puedas distribuir para tus proyectos (muy habitual cuando se usan los ESP32 / ESP32-CAM)

:slight_smile: yo maldigo a quien creo los códigos bloques :slight_smile: (Sé que se hicieron para que los niños programasen pero me resulta ilegible tanta pieza de puzzle coloreada)

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.