Tx
#include <DHT.h>
#include <RF24.h>
#define DHTPIN 13
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
RF24 radio(16, 17); // CE, CSN
struct SensorData {
float temperatura;
float umidita;
};
void setup() {
radio.begin();
dht.begin();
}
void loop() {
delay(2000);
SensorData data;
data.temperatura = dht.readTemperature();
data.umidita = dht.readHumidity();
radio.openWritingPipe(0xF0F0F0F0E1LL); // Indirizzo di destinazione
radio.write(&data, sizeof(SensorData));
}
Rx
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
#include <SPI.h>
#include <SD.h>
#include <LiquidCrystal_I2C.h>
#include <RF24.h>
#include <SimpleDHT.h>
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
SimpleDHT11 dhtInternal(9); // Pin 8 for the internal DHT11 sensor
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin, BACKLIGHT_PIN, POSITIVE);
RF24 radio(4, 5); // CE, CSN
struct SensorData {
float temperatura;
float umidita;
};
File logfile;
void setup() {
Serial.begin(9600);
Wire.begin();
rtc.begin();
lcd.begin(16, 2);
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
if (!SD.begin(10)) {
Serial.println("Initialization failed!");
while (1);
}
radio.begin();
radio.openReadingPipe(1, 0xF0F0F0F0E1LL); // Set the address to match the transmitter
radio.startListening();
pinMode(6, OUTPUT);
lcd.clear();
lcd.print("Card Logger");
delay(2000);
lcd.clear();
}
void loop() {
if (radio.available()) {
SensorData data;
radio.read(&data, sizeof(SensorData));
DateTime now = rtc.now();
float internalTemp, internalHum;
// Read data from internal DHT11 sensor
dhtInternal.read2(&internalTemp, &internalHum, NULL);
logdata(now, internalTemp, data.temperatura, internalHum, data.umidita);
}
delay(5000); // Wait before checking for new data
}
void logdata(DateTime now, float internalTemp, float externalTemp, float internalHum, float externalHum) {
String dateTime = String(pad2(now.day())) + "/" +
String(pad2(now.month())) + "/" +
String(now.year()).substring(2) + " " +
String(pad2(now.hour())) + ":" +
String(pad2(now.minute())) + ":" +
String(pad2(now.second()));
String tempHumInternal = "Int T: " + String(internalTemp) + "C H: " + String(internalHum) + "%";
String tempHumExternal = "Ext T: " + String(externalTemp) + "C H: " + String(externalHum) + "%";
Serial.println(dateTime + " " + tempHumInternal + " | " + tempHumExternal);
// Concatenate date, time, internal temperature, and humidity on the top line,
// and external temperature and humidity on the bottom line
String displayText = tempHumInternal + "\n" + tempHumExternal;
// Show scrolling text on the LCD
lcd.clear();
lcd.print(displayText);
int len = displayText.length();
for (int i = 0; i < len + 16; i++) {
delay(500); // Increased scrolling speed
lcd.scrollDisplayLeft();
}
// Write data to the log file on the SD card
logfile = SD.open("templog.txt", FILE_WRITE | O_APPEND);
digitalWrite(6, HIGH);
if (logfile) {
logfile.println(dateTime + " " + tempHumInternal + " | " + tempHumExternal);
logfile.close();
}
}
String pad2(int n) {
return (n < 10) ? "0" + String(n) : String(n);
}