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

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