problema al enviar float por i2c

muy buenas a todos:

a ver si me podeis echar una mano por que no tengo ni idea de lo que puede estar pasando. El asunto es que necesito pasar unas cuantas variables float de un arduino a otro a través de i2c. Para ello las había descompuesto byte a byte para meterlas en un array y poder enviarlas. y luego una vez recibidas en el otro, recomponerlas y poder operar con ellas. el asunto es que no hay forma que funcione. el ejemplo le encontré googleando por ahí hace tiempo (creo que en este mismo foro pero el ingles ahora no he sido capaz de encontralo de nuevo). el asunto es que tanto el código maestro y esclavo compilan y se ejecutan pero en el momento de realizar la comunicación se quedan ambos bloqueados y no responden. he estado marcando diferentes pruebas y la verdad no se me ocurre nada.
este es el código del esclavo

#include <Wire.h>



float temperatura_1=00.0;

byte Datos_recibidos[4];

void setup(){
  Serial.begin(9600);
  
  Wire.begin(2);
  delay(2000);
  
  Wire.onReceive(receiveEvent);

}

void receiveEvent(int datos_recibir){
  Serial.println("recibimos la petición");//este mensaje no sale en el monitor serial
  byte Datos_recibidos[4];
  int i=0;
  while(Wire.available()){
    Datos_recibidos[i]=Wire.read();
    i=i+1;
    }
  
  union temperatura_1_tag{
    byte temperatura_1_b[4];
    float temperatura_1_fval;
  }
  temperatura_1_Union;
  temperatura_1_Union.temperatura_1_b[0]=Datos_recibidos[0];
  temperatura_1_Union.temperatura_1_b[1]=Datos_recibidos[1];
  temperatura_1_Union.temperatura_1_b[2]=Datos_recibidos[2];
  temperatura_1_Union.temperatura_1_b[3]=Datos_recibidos[3];
  temperatura_1=temperatura_1_Union.temperatura_1_fval;
    
}

void loop(){
  
  Serial.println(temperatura_1);
}

y este es el del maestro

#include <Wire.h>

float temperatura_1=00.0;

byte Datos_enviar[4];

byte* temperatura_1FloatPtr;

void setup(){
  Serial.begin(9600);
  Wire.begin();
  delay(500);
}

void loop(){
  
  temperatura_1FloatPtr=(byte*)&temperatura_1;
  
  Datos_enviar[0]=temperatura_1FloatPtr[0];
  Datos_enviar[1]=temperatura_1FloatPtr[1];
  Datos_enviar[2]=temperatura_1FloatPtr[2];
  Datos_enviar[3]=temperatura_1FloatPtr[3];
  
  
  Wire.beginTransmission(2);
  Wire.write(Datos_enviar,4);
  delay(5);
  Serial.println("datos enviados");//el programa llega hasta aquí este mensaje si sale en el monitor serial
  Wire.endTransmission();
  Serial.println("fin transmisión");//este mensaje ya no sale en el monitor serial
  delay(5);
    
  temperatura_1=temperatura_1+0.1;
  
  delay(5000);
}

onemikeoscar: Has probado a poner un println en el master para ver si está enviando? ¿has probado a quitar el Serial.println(temperatura_1); en el slave? Eso podría dar fallo, si es así te explicaré cual es la razón.

si he probado todo

he puesto println en cada linea del maestro. es mas si te fijas en el codigo de maestro, el println "datos enviados" lo veo en pantalla pero el println "fin de transmisión" no sale.

en el esclavo he hecho lo mismo he puesto un println en cada linea para ver donde se atascaba pero es que no sale ni el primer println "recibimos la peticion"

el tema es que quiero mandar unas cuantas variables seguidas, por eso pensaba en descomponerlas, cargarlas en el array y enviar el array luego en el esclavo rejuntarlas y listo, pero claro si con una no me lo hace...