Arduino Nano 33 iot / nrf24 / Arduino MKR Wifi 1010

Me he encontrado con problemas tratando de enviar un paquete de datos recogidos por un DHT22 a modo wireless.

Tengo una Arduino Nano 33 iot con un módulo nrf24l01 y una mkr wifi con mismo módulo.

Arduino Nano IoT 33 está como transmiter conectada al nrf24 junto a un sensor dht22

NRF24l01 :

CE → pin7
CNS → pin8
SCK → pin13
MOSI → pin11
MISO → pin12

Arduino MKR WiFi
NRF24l01 :

CE → pin 6
CNS → pin 7
SCK → pin 9
MOSI → pin 8
MISO → pin 10

Código Nano 33 IOT

//
// Sketch Arduino que obtiene la temperatura y humedad desde un sensor DHTxx
// y la envia en forma inalambrica usando un modulo NRF2401L a otro Arduino
//


// Libreria para controlar el modulo nRF24L01
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"


// Libreria para controlar Sensores DHTxx
#include "DHT.h"

// Declaracion de variables globales
int messageCounter = 0;

struct package
{
  float temperature ;
  float humidity ;
  int centinela ;
};

typedef struct package Package;
Package data;

#define DHTPIN 2     

// Descomentar segun el tipo de sensor DHTxx usado
#define DHTTYPE DHT22     


// Configuracion de modulo de radio nRF24
// Pines CE y CSN
#define CE_PIN   7
#define CSN_PIN 8
// Canal de transmision o 'tuberia' Nota: Las "LL" al final de la constante indican que el tipo es "LongLong"
const uint64_t pipe = 0xE8E8F0F0E1LL; 

// Inicializa modulo de radio nRF24L01
RF24 radio(CE_PIN,CSN_PIN);

// Inicializa el sensor DHTxx
DHT dht(DHTPIN, DHTTYPE);

// Declaracion de Funciones


// setupRadio: Configura el dispositivo de radio 
void setupRadio()
{
 // Inicializa la radio
 radio.begin();
 // Define el numero de reintentos
 radio.setRetries(15,15);
 // Define el canal de radio para broadcast (0 - 127)
 radio.setChannel(30);
 // Define el bitrate (usar para tarjetas de bajo bitrate)
 radio.setDataRate(RF24_250KBPS);
 // Define el nivel de apmplificador del modulo de radio (RF24_PA_MIN para pruebas, RF24_PA_HIGH para distancias largas)
 radio.setPALevel(RF24_PA_MIN);
 // Habilita payloads dinamicos para los paquetes
 radio.enableDynamicPayloads();
}

void setupSensor()
{
  // Inicializa el sensor
  dht.begin();
  // Espera dos segundos antes de realizar la primera medición.
  data.humidity = 0;
  data.temperature = 0;
  
  delay(2000);
  
}

// setup: Funcion de inicializacion de Arduino
void setup()
{ 
  // Inicializa la conexion serial
  Serial.begin(9600);
  Serial.println("Inicializa puerto serial");
  
  // Configura el sensor
  setupSensor();
  // Configura el modulo de radio
  setupRadio();
}


void readSensor()
{
 data.humidity = dht.readHumidity();
 data.temperature = dht.readTemperature();
  // Control de errores, valida que se obtuvieron valores para los datos medidos
  if (isnan(data.humidity) || isnan(data.temperature)) {
    Serial.println("Falla al leer el sensor DHT!");
    return;
  }
 data.centinela = messageCounter;
}


// loop: Funcion loop de Arduino
void loop()
{
  digitalWrite(LED_BUILTIN, HIGH); // Flash a light to show transmitting
  
  readSensor();

  
  // Abre un canal de escritura utilizando la radio
  radio.openWritingPipe(pipe);
  
  Serial.println(data.humidity);
  Serial.println(data.temperature); 

  // Escribe los datos en el canal

  radio.write(&data, sizeof(data)); 
  digitalWrite(LED_BUILTIN, LOW);
  messageCounter++;

  delay(1000);
}

Código MKR

//
// Sketch Arduino que obtiene la temperatura y humedad desde un sensor DHTxx
// y la envia en forma inalambrica usando un modulo NRF2401L a otro Arduino
//

// Libreria para controlar el modulo nRF24L01
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

// Declaracion de variables globales
// Configuracion de modulo de radio nRF24
// Pines CE y CSN


#define CE_PIN   7
#define CSN_PIN 8
// Canal de transmision o 'tuberia' Nota: Las "LL" al final de la constante indican que el tipo es "LongLong"
const uint64_t pipe = 0xE8E8F0F0E1LL; 
// Inicializa modulo de radio nRF24L01
RF24 radio(CE_PIN,CSN_PIN);

// Inicializa el contador de paquetes
int packetCounter = 0;


struct package
{
  float temperature ;
  float humidity ;
  int centinela ;
};

float previousRemoteHumidity = 0.1;
float previousRemoteTemperature = 0.1;
float remoteHumidity = 0.0;
float remoteTemperature = 0.0;
typedef struct package Package;
Package data;

// Funciones
// setupRadio: Configura el dispositivo de radio  
void setupRadio()
{
 // Inicializa la radio
 radio.begin();
 
 // Define el numero de reintentos
 radio.setRetries(15,15);
 
 // Define el canal de radio para broadcast (0 - 127)
 // Debe ser el mismo en el emisor y receptor
 radio.setChannel(30);
 
 // Define el bitrate (usar para tarjetas de bajo bitrate)
 radio.setDataRate(RF24_250KBPS);
 
 // Define el nivel de apmplificador del modulo de radio (RF24_PA_MIN para pruebas, RF24_PA_HIGH para distancias largas)
 radio.setPALevel(RF24_PA_MIN);
 
 // Habilita payloads dinamicos para los paquetes
 radio.enableDynamicPayloads();
 
 // Abre el canal para escucha
 radio.openReadingPipe(1, pipe);
 
 // Comienza escuchando paquetes
 radio.startListening();
}

void setup()
{
  // Inicializa la conexion serial
  Serial.begin(57600);
  
  // Configura el modulo de radio
  setupRadio();
}

void loop() { 
  // Chequea si la radio ha recibido datos
  Serial.println("ESTA WENO");
  if(radio.available()) {
      Serial.println("Radio avalaible");
      radio.read( &data, sizeof(data) );
      previousRemoteTemperature = remoteTemperature;
      previousRemoteHumidity = remoteHumidity;
      remoteTemperature = data.temperature;
      remoteHumidity = data.humidity;
      int centi = data.centinela;
      Serial.println(centi);
    
  }
    Serial.print("\nPackage:");
    Serial.print("\n");
    Serial.println(data.temperature);
    Serial.println(data.humidity);


    // Espera antes de seguir recibiendo paquetes
    delay(100);
}
Monitor peripheral nano 33:
49.20
24.20
49.20
24.20
48.10
24.20
48.10
24.20



Monitor MKR

Primera vez trabajando con estas placas o arduino, agradezco algún insigight.

Moderador:
Hola, bienvenido al foro Arduino.
En la sección proyectos tienes estos dos hilos que debiste haber leído antes de postear

Como tu consulta es para otra sección lo muevo a Software.
Agradezco que hayas posteado debidamente el código. Solo ubicaste mal tu tópico.

Normas del foro