Hallo liebes Forum,
ich habe für eine Wetterstation vor mit Hilfe eines Arduino UNO und einem DHT22 Sensor die Wetterdaten (Von außerhalb des Hauses) mit Hilfe eines HC-12 Funkmoduls an einem Arduino MEGA zu senden. zusätzlich will ich am Arduino MEGA noch einen DHT22 Sensor anschließen, um die Wetterdaten von innerhalb des Hauses sowie die von außerhalb im folgenden Format Seriell anzeigen zu lassen:
OUT: 18.0 °C
OUT: 70 %RH
IN: 22.0 °C
IN: 60 %RH
Zudem nutze ich für den HC-12 Funkmodul die SoftwareSerial Library, dazu wollte ich wissen, ob eine alternative Library besser geeignet wäre.
Außerdem möchte ich Dieses Display verwenden.
Dazu wollte ich noch Fragen inwiefern des Sketches dafür angepasst werden müssen?
Der Sender (Arduino UNO)
#include <SoftwareSerial.h>
SoftwareSerial hc12(10, 11); // RX = Pin 10, TX = Pin 11
#include <INTERVAL.h>
#include <DHT.h>
#define DHTPIN 2 // Sensor = Pin 2
#define DHTTYPE DHT22 // Typ des Sensors: DHT22
DHT dht(DHTPIN, DHTTYPE); // Sensor wird mit „dht“ angesprochen
void setup()
{
dht.begin(); // DHT22 starten
Serial.begin(9600);
hc12.begin(9600);
}
void loop()
{
INTERVAL(180000UL) // 3 Minuten Pause
{
sendeTemperatur();
delay(5);
sendeLuftfeuchtigkeit();
}
}
void sendeTemperatur()
{
float Temperatur = dht.readTemperature(); // als "Temperatur" speichern
if (!isnan(Temperatur)) // auf gültigkeit überprüfen
{
char msg[8]; // Puffer groß genug für eine 7-stellige Fließkommazahl
dtostrf(Temperatur, 4, 1, msg); // In Zeichenkette konvertieren
char result[30] = "OUT: ";
strcat(result, msg);
strcat(result, " °C");
Serial.println(result);
hc12.println(result); // Übertrage die Daten über HC-12
}
else
{
Serial.println("Fehler beim Lesen der Temperatur!");
}
}
void sendeLuftfeuchtigkeit()
{
float Luftfeuchtigkeit = dht.readHumidity(); // als "Temperatur" speichern
if (!isnan(Luftfeuchtigkeit)) // auf gültigkeit überprüfen
{
char msg[8]; // Puffer groß genug für eine 7-stellige Fließkommazahl
dtostrf(Luftfeuchtigkeit, 4, 1, msg); // In Zeichenkette konvertieren
char result[30] = "OUT: ";
strcat(result, msg);
strcat(result, " %RH");
Serial.println(result);
hc12.println(result); // Übertrage die Daten über HC-12
}
else
{
Serial.println("Fehler beim Lesen der Luftfeuchtigkeit!");
}
}
Der Empfänger (Arduino MEGA)
#include <SoftwareSerial.h>
SoftwareSerial hc12(10, 11); // Pin 10 = TX des HC-12 / Pin 11 ist = RX des HC-12-Transceivers
#include "DHT.h"
#define DHTPIN 2 // DHT-Sensor = Pin 2
#define DHTTYPE DHT22 // Typ des Sensors: DHT22
DHT dht(DHTPIN, DHTTYPE); // Sensor wird mit „dth“ angesprochen
void setup()
{
Serial.begin(9600);
hc12.begin(9600);
dht.begin();
Serial.println("Alles OK");
}
void readAndPrintSensorData()
{
float Temperatur = dht.readTemperature(); // Als "Temperatur" Speichern
float Luftfeuchtigkeit = dht.readHumidity(); // Als "Luftfeuchtigkeit" Speichern
String sensorData = "IN: " + String(Temperatur, 1) + "°C - IN: " + String(Luftfeuchtigkeit, 1) + "%RH";
// IN = Indoor (Ersetzbar durch z.B. Innen-Temperatur etc)
Serial.println(sensorData);
}
void loop()
{
if (hc12.available())
{
String receivedData = hc12.readString();
Serial.print("Received Data: ");
Serial.println(receivedData);
readAndPrintSensorData(); // Sensorwerte lesen und ausgeben
}
}
Zudem habe ich mir über das Layout des Displays Gedanken gemacht und es würde mich interessieren, inwiefern man das Layout individuell anpassen kann oder ob dies von der Library vorgegeben wird?
Falls ja, wie? und ggf. mit welcher Software?
Hier das Layout:
Zudem wollte ich einen taster verwenden der das Display erwachen lässt und sich nach 10 Sek. abschaltet.
Schonmal vielen dank im Vorraus
EDIT: Zudem wird die SoftwareSerial Lib auf unterschiedlichsten Seiten im Netz des öfteren verwendet und wollte auf Grund dieser tatsache wissen ob die SoftwareSerial Lib die richtige ist?
Quelle 1 Quelle 2