Buenos días a todos:
Estoy haciendo un proyecto usando dos placas Arduino UNO(una de ellas con una ethernet shield) dos módulos Bluetooth HC-05, y un sensor DHT22.El funcionamiento consiste en que una de las dos placas recoja los datos del sensor DHT22 y por bluetooth los mande a la otra placa que creara una pagina web donde mostrará la temperatura y humedad recogidas por el sensor DHT22.
Mi duda es: ¿Cómo hago que la placa receptora distinga que datos son de humedad y cuales de temperatura?
De momento solo tengo el codigo de la placa que recoge los datos del sensor y los manda por Bluetooth
#include <DHT.h> //Libreria para el sensor DHT
#include <SoftwareSerial.h> //Libreria para el Bluetooth
DHT dht(2, DHT22); //Configura el sensor DHT
SoftwareSerial BT(10, 11); //Configura el Modulo Bluetooth RX||TX
void setup() {
BT.begin(38400); //Inicializa el modulo bluetooh
dht.begin(); //Inicializa el sensor DHT22
}
void loop() {
float temp = dht.readTemperature(); //Recoge los datos del sensor
float hum = dht.readHumidity();
BT.write(temp); //Envía los datos
BT.write(hum);
}
Espero que alguien me pueda ayudar.Muchas gracias de antemano
Para distinguirlos debes enviar algo que reconozca el paquete de datos
Ej: envías : T23.1 para decir temperatura 23.1°C y H72.4 para indicar humedad 72.4%.
Luego en el receptor recibes ya sea TXX.X o HYY.Y por lo que debes quitar la primer letra y con eso sabrás si es Temperatura o Humedad.
También puedes poner un número y no letras, pero algo que distinga los paquetes.
Los paquetes se recepcionan completos, por lo que también deben tener un caracter que diga que han finalizado.
Te dejo el emisor
#include <DHT.h>
#include <SoftwareSerial.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
SoftwareSerial BTSerial(10, 11); // RX, TX
void setup() {
Serial.begin(9600);
BTSerial.begin(9600); // Velocidad de comunicación Bluetooth
dht.begin();
}
void loop() {
delay(2000);
float humedad = dht.readHumidity();
float temperatura = dht.readTemperature();
// Enviar humedad
BTSerial.write('H'); // Identificador de humedad
BTSerial.write((uint8_t *)&humedad, sizeof(float));
// Enviar temperatura
BTSerial.write('T'); // Identificador de temperatura
BTSerial.write((uint8_t *)&temperatura, sizeof(float));
}
En el receptor
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX, TX
float temperatura, humedad;
void setup() {
Serial.begin(9600);
BTSerial.begin(9600); // Velocidad de comunicación Bluetooth
}
void loop() {
if (BTSerial.available()) {
char type = BTSerial.read();
if (type == 'T') {
BTSerial.readBytes((uint8_t *)&temperatura, sizeof(float));
Serial.print("Temperatura: ");
Serial.println(temperatura);
} else if (type == 'H') {
BTSerial.readBytes((uint8_t *)&humedad, sizeof(float));
Serial.print("Humedad: ");
Serial.println(humedad);
}
}
}
Usa la velocidad de comunicación con la que hayas programado los HC-05
Muchas gracias @Surbyte.
Ahora me ha surgido una nueva duda:Quiero ponerle un boton al receptor y cuando este sea pulsado, en la sd que conectare en la ethernet shield registre en un archivo .txt la temperatura y la humedad que ha recibido.Mi duda es, como uso el lector incorporado en la ethernet shield, ¿Que pin pongo como Slave Select?
Si usas un UNO/NANO el pin suele ser el 4.
El 10 se usa con la parte Ethernet pero esta por defecto.
Tmb suele estar por defecto el pin de la interfaz SD, pero si debes indicarlo es el 4.
Corre un ejemplo individualmente y asegúrate que funciona. Algo como que te de info de la SD ya formateada.
Hay un SDCard_Info.ino si mal recuerdo.