Das HC-12 ist ein 433 Mhz Funkmodul von denen es einige auf dem Markt gibt. Mit seinen bis zu 1800 Metern Reichweite ist es doch schon eines der Leistungsstärkeren.

Die Idee ist über eine größere Strecke Wetterdaten zu übertragenwo zum Beispiel das eigene W-Lan nicht mehr hinreicht.
Der Sender

Der Aufbau ist relativ simpel.
Für den Sender werden benötigt:
1 Steckbrett
1 Arduino Nano
1 HC-12
1 DHT 11
1 Wiederstand 220 Ohm
und ein paar Jumperkabel

#include "DHT.h" #include <SoftwareSerial.h> SoftwareSerial HC12(10,11); #define DHTPIN 4 #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); HC12.begin(9600); dht.begin(); } void loop() { // Wait a few seconds between measurements. delay(2000); float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println(F("Failed to read from DHT sensor!")); return; } // Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false); Serial.print(F("Humidity: ")); Serial.print(h); Serial.print(F("% Temperature: ")); Serial.print(t); Serial.print(F("°C ")); // Transmit the temperature and humidity values via HC-12 module HC12.print(F("Temperature: ")); HC12.print(t); HC12.print(F("°C ")); HC12.print(F(" ")); HC12.print(F("Humidity: ")); HC12.print(h); HC12.print(F(" % ")); HC12.print(F("Fahrenheit: ")); HC12.print(f); HC12.print(F(" F")); HC12.print(F(" ")); // Wait for 1 seconds before sending next readings delay(1000); }
Der Empfänger

Für den Empfänger werden benötigt:
1 Steckbrett
1 Arduino Nano
1 0,96° Oled 128×64
1 HC-12
und ein paar Jumperkabel

#include <SoftwareSerial.h> #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) // The pins for I2C are defined by the Wire-library. // On an arduino UNO/NANO: A4(SDA), A5(SCL) // On an arduino MEGA 2560: 20(SDA), 21(SCL) // On an arduino LEONARDO: 2(SDA), 3(SCL), #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); SoftwareSerial HC12(10, 11); // HC-12 TX Pin, HC-12 RX Pin void setup() { Serial.begin(9600); HC12.begin(9600); display.begin(); Serial.println("Device Starting"); } void loop() { display.clearDisplay(); display.setRotation(0); display.setTextSize(0.5); display.setTextColor(WHITE); display.setCursor(1, 8); String receivedData; while (HC12.available()) { char c = HC12.read(); receivedData += c; Serial.write(c); } Serial.println(""); display.println(receivedData); // Display the received data while (Serial.available()) { char c = Serial.read(); HC12.write(c); } delay(10000); display.display(); }
Zu sagen bleibt wer diese Schaltung nachbaut und berteibt verstößt in Deutschland gegen die gesetzlichen Bestimmungen zur Nutzung des 433 MHz Frequenzbandes!
Dieses kann man hier nachlesen.
Danke an:
Das Funkmastbild stammt von Pixabay und wurde fotografiert von stux.
Und einen großen Dank an Wolles-Elektronikkiste bei dem ich mir sehr viele Anregungen und Tipps geholt habe.