I've found me with problems trying to send DHT22 sensor data between arduinos.
I have two nrf24l01 modules, one in an Arduino Nano 33 and the other in a mkr wifi 1010.
Nano IOT 33 is the transmiter
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
CODE 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
First time working on ardunos, i will apprecaite any insights.