Tragbare IoT-Wetterstation mit Arduino Nano 33 IoT
Komponenten und Zubehör
| Arduino Nano 33 IoT | × | 1 |
| BME280 Wettersensor (Temp, Feuchte, Druck) | × | 1 |
| 0,96″ OLED Display 128×64 | × | 1 |
| Kunststoffgehäuse 3,9″ × 2,7″ | × | 1 |
| Micro-USB-Kabel | × | 1 |
| Männlich-Weiblich-Breadboard-Jumperkabel | × | 1 |
| USB-Netzteil | × | 1 |
Benötigte Werkzeuge
- Heißklebepistole (besser Epoxid für Außeneinsatz im Sommer)
Apps & Online-Dienste
- Arduino IDE
- Blynk
Über dieses Projekt
Viele Apps verbinden Smartphone mit IoT – die meisten enttäuschten. Blynk ist anders: flexibel, schöne UI, unterstützt viele IoT-Plattformen, läuft auf Android & iOS, für Hobbyisten kostenlos. Dieses Projekt nutzt Blynk zur Anzeige der Wetterdaten auf dem Smartphone.
Hardware
Einfach: Arduino Nano 33 IoT (WLAN onboard), BME280-Sensorplatine (Temperatur, Luftfeuchte, Luftdruck), 1″ OLED-Display. Alle bei 3,3 V. Display optional – Ziel ist Smartphone-Anzeige. Aber: Erst auf OLED zum Laufen bringen, dann Blynk/Smartphone.
Schaltbild: Sensor & Display per I²C. Theoretisch ein I²C-Bus für beide, aber Library-Konflikte → zwei getrennte I²C-Ports:
- Sensor: Standard-I²C an analog Pins A4 (SDA) & A5 (SCL)
- Display: Sekundäres I²C an digital Pins 4 (SCL) & 5 (SDA) – achtung: vertauscht, SDA ist Digitalpin 5!

Gehäuse: Kleines Kunststoffgehäuse mit klarer Front (Display sichtbar). Kunststoff = RF-durchlässig für WLAN. Wetterfest, aber Sensor durch 12 mm Loch im Boden nach außen geführt (Sensor sitzt direkt dahinter). Alles mit Heißkleber fixiert (Epoxid besser für Sommerhitze).
Stromversorgung per USB-Kabel (Programmieren am PC, Betrieb am USB-Netzteil).
Software
Arduino-Sketch = Kombination der Library-Beispiele für Sensor, Display, Blynk. Libraries:
- Adafruit_BME280_Library (Sensor)
- ss_oled (Display)
- Blynk (Blynk)
Alle über Arduino Library Manager installierbar. Jeweils einzeln testen empfohlen.
Blynk-Beispiele: examples.blynk.cc. Nano 33 IoT nicht direkt gelistet, aber Blynk unterstützt WiFiNINA (genutzt vom Nano 33 IoT). Zwei Includes lösen das:
#include <WiFiNINA.h>
#include <BlynkSimpleWiFiNINA.h>
Zusätzlich: #include <avr/dtostrf.h> für Float→String-Konvertierung (OLED-Darstellung). Blynk nimmt Strings & Zahlen, aber Graphen brauchen echte Zahlen – daher getrennte Variablen.
Luftdruck-Korrektur: Normalerweise auf Meereshöhe reduziert. Pro 1000 ft (≈305 m) Höhe ~1 inHg (≈33,9 hPa) abziehen. Im Code: +1.3 für meine 1300 ft (≈396 m). Anpassen an eigenen Standort! Genauere Korrektur via Online-Tabellen.
Wetterstation ohne Blynk
Hardware aufbauen, angehängte Software nutzen, Blynk.begin() in setup() auskommentieren → Station läuft standalone auf OLED. (Ohne Auskommentieren hängt Sketch bei fehlender Blynk-Verbindung.)
Blynk einrichten
Blynk-App installieren (iOS/Android), Doku: docs.blynk.cc. Hier Kurzanleitung (iPhone, Android ähnlich).
- Account erstellen
- Neues Projekt anlegen → Auth-Code erhalten (Hardware↔Projekt verknüpfen)
- Hardware per WLAN mit Blynk verbinden: Test mit Blynk Blink (examples.blynk.cc) – onboard LED (Pin 13) schalten. In Sketch:
ESP8266WiFi.h/BlynkSimpleEsp8266.hdurchWiFiNINA.h/BlynkSimpleWiFiNINA.hersetzen. WLAN-Daten & Auth-Token eintragen. Serial Monitor: Verbindung zum Blynk-Cloud-Server beobachten.
App-Bedienung: Links oben = Projekte/Ausloggen, Rechts oben = Edit-Modus, Mitte = kontextabhängig.

Edit-Modus → Widgets (links per Wisch). Button wählen → auf Hauptbildschirm → konfigurieren: Push→Switch, Pin: Digital 13 (Onboard-LED). OK, Edit-Modus verlassen → Button steuert LED.
Wetterstation mit Blynk
Angehängten Sketch öffnen, Blynk.begin() einkommentieren, Auth-Code & WLAN-Daten eintragen, hochladen.

App: Edit-Modus, alten Button löschen. Toolbox: Labeled Value (unter Displays). Konfigurieren: Pin → Virtual V3. Label: Temp /pin.#/ deg.F (.# = 1 Nachkommastelle). Große Schrift, Refresh: Push, Farbe: Grün. OK. Widget ziehen (langsam anklicken, nicht Config öffnen) → Breite ~¾ Bildschirm. Edit verlassen → Temperatur sichtbar.
Virtual Pins: Blynk nutzt virtuelle Pins für Variablen (nicht direkt Hardware-Pins). Im Sketch: Temperatur °F → Virtual Pin V3 zuweisen. App liest V3.
Refresh Interval – Push: Arduino pusht Daten (hier 1×/Min). Pull-Modus auch möglich (App fragt zyklisch).
Zwei weitere Labeled Value: Luftfeuchte % (Virtual V4, Gold, 1 Nachkomma), Luftdruck inHg (Virtual V5, Rot, 2 Nachkommastellen).
SuperChart für Verlauf: Widget hinzufügen, nach unten ziehen. Konfigurieren: X-Achse an, Auflösungen: live, 1h, 6h, 1d, 1w, 1mo, 3mo. 3 Datenströme (V3, V4, V5). Y-Skalierung: Height. Temp: 67–100, Feuchte: 34–66, Druck: 0–33. Farben passend. Y-Achse an. Edit verlassen → Dashboard wie im Bild. Graphen brauchen etwas Zeit (Live/1h für schnellen Start).
Teilen: Edit-Modus → Projekteinstellungen (Mitte oben) → Sharing an → Link/QR-Code generieren. Empfänger braucht Blynk-App, aber keinen Account. App hat „Load QR Code“ für fremde Projekte.
Blynk ist „fast“ kostenlos: 2500 Energy-Punkte gratis (reicht für dieses Projekt). Widgets/Teilen verbrauchen Punkte. Ich zahlte $6 für 5000 Extra-Punkte. Für weitere Projekte evtl. nachkaufen.
Code
Tiny Internet Weather Station
/* Arduino Nano 33 IoT + BME280 + 0.96" 128x64 OLED + WiFi → Blynk Cloud → Smartphone */
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BME280.h>
#include <avr/dtostrf.h>
#include <ss_oled.h>
#include <WiFiNINA.h>
#include <BlynkSimpleWiFiNINA.h>
char auth[] = "YourBlynkProjectCode";
char ssid[] = "YourWifiID";
char pass[] = "YourWiFiPassword";
Adafruit_BME280 bme;
Adafruit_Sensor *bme_temp = bme.getTemperatureSensor();
Adafruit_Sensor *bme_pressure = bme.getPressureSensor();
Adafruit_Sensor *bme_humidity = bme.getHumiditySensor();
#define SDA_PIN 5
#define SCL_PIN 4
#define RESET_PIN -1
#define OLED_ADDR -1
#define FLIP180 0
#define INVERT 0
#define USE_HW_I2C 0
#define MY_OLED OLED_128x64
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
SSOLED ssoled;
BlynkTimer timer;
void setup() {
if (!bme.begin(0x76)) { while (1) delay(10); }
bme_temp->printSensorDetails();
bme_pressure->printSensorDetails();
bme_humidity->printSensorDetails();
oledInit(&ssoled, MY_OLED, OLED_ADDR, FLIP180, INVERT, USE_HW_I2C, SDA_PIN, SCL_PIN, RESET_PIN, 400000L);
oledFill(&ssoled, 0x0, 1);
Blynk.begin(auth, ssid, pass); // auskommentieren für Standalone-Betrieb
timer.setInterval(60000L, myupdate);
myupdate();
}
void loop() {
Blynk.run();
timer.run();
}
void myupdate() {
sensors_event_t temp_event, pressure_event, humidity_event;
bme_temp->getEvent(&temp_event);
bme_pressure->getEvent(&pressure_event);
bme_humidity->getEvent(&humidity_event);
float ctemp = temp_event.temperature;
float ftemp = 32 + (9*ctemp)/5;
float hum = humidity_event.relative_humidity;
float ppress = pressure_event.pressure;
float mpress = 1.3 + ppress/33.8939; // inHg + Höhenkorrektur (hier 1.3 für 1300 ft)
char mytemp[8], myhum[8], mypress[8];
dtostrf(ftemp, 6, 2, mytemp);
dtostrf(hum, 6, 2, myhum);
dtostrf(mpress, 6, 2, mypress);
// OLED aktualisieren
oledWriteString(&ssoled, 0,2,1,(char*)"Weather Station", FONT_NORMAL, 0, 1);
oledWriteString(&ssoled, 0,2,3,(char*)"Temp = ", FONT_NORMAL, 0, 1);
oledWriteString(&ssoled, 0,50,3,(char*)mytemp, FONT_NORMAL, 0, 1);
oledWriteString(&ssoled, 0,105,3,(char*)"F", FONT_NORMAL, 0, 1);
oledWriteString(&ssoled, 0,2,5,(char*)"Humid=", FONT_NORMAL, 0, 1);
oledWriteString(&ssoled, 0,50,5,(char*)myhum, FONT_NORMAL, 0, 1);
oledWriteString(&ssoled, 0,105,5,(char*)"%", FONT_NORMAL, 0, 1);
oledWriteString(&ssoled, 0,2,7,(char*)"Press=", FONT_NORMAL, 0, 1);
oledWriteString(&ssoled, 0,50,7,(char*)mypress, FONT_NORMAL, 0, 1);
oledWriteString(&ssoled, 0,105,7,(char*)"in", FONT_NORMAL, 0, 1);
// An Blynk senden
Blynk.virtualWrite(V3, ftemp);
Blynk.virtualWrite(V4, hum);
Blynk.virtualWrite(V5, mpress);
}
Schaltplan

Herstellungsprozess
- Integrierte Schaltkreise (ICs): Kompakte, leistungsstarke Chips, die moderne Elektronik antreiben
- DIY Solar-betriebene Wetterstation mit Raspberry Pi
- Outdoor-Wetterstation mit Raspberry Pi 2 & ADS-WS1 bauen
- Raspberry Pi Wetterstation bauen, die tägliche Wetterdaten per E-Mail sendet
- Wetterstation mit CWOP integrieren: Praktischer Leitfaden
- Fortgeschrittene Wetterstation v2.0: Echtzeit Temperatur, Druck, Feuchte & Höhe Monitoring
- Modellbahn DCC-Zentrale selbst bauen mit Arduino – Kostenlose App inklusive
- Arduino-gesteuerte 6-Shot-Getränkemischstation – Bauen Sie Ihren eigenen Cocktail-Automaten
- MotionSense: Smarte Einbruchserkennung mit Arduino & ESP8266
- Hochleistungs-Datenlogger für Arduino-Wetterballons