Batteriebetriebene Wetterstation mit MKR FOX 1200 selbst bauen
Komponenten und Zubehör
| Komponente | Anzahl |
|---|---|
| Arduino MKR FOX 1200 | 1 |
| SparkFun Atmospheric Sensor Breakout – BME280 | 1 |
| TSL2561 digitaler Helligkeitssensor | 1 |
| HTU21D Feuchtigkeitssensor | 1 |
Apps und Online-Dienste
- Arduino Web Editor
- ThingSpeak API
- Sigfox Backend
Projektbeschreibung
Hinweis: Dieses Tutorial könnte veraltet sein. Eine aktuellere Version finden Sie hier.
In diesem Projekt zeigen wir, wie Sie einen MKR FOX 1200 und mehrere I2C-Sensoren zu einer einfachen, batteriebetriebenen Wetterstation zusammenbauen.
Verwendete Sensoren
- Onboard-Temperatursensor (geringe Genauigkeit, ± 1 °C)
- HTU21D (I2C) für Luftfeuchtigkeit
- Bosch BMP280 (bzw. BME280) für präzise Temperatur und Luftdruck
- TSL2561 für Helligkeit / Luminosität
Hardware-Aufbau
Alle Sensoren nutzen das I2C-Protokoll und arbeiten mit 3,3 V. Die Verdrahtung ist sehr einfach: Vom MKR FOX 1200 werden nur vier Leitungen benötigt – GND, 3,3 V, SDA (Pin 11) und SCL (Pin 12). Da jeder Sensor eine eigene I2C-Adresse besitzt, können alle drei parallel an denselben Bus angeschlossen werden; die Bibliotheken kümmern sich um die Adressierung.
Die Stromversorgung erfolgt über zwei AA- oder AAA-Alkalibatterien in Reihe (ca. 3 V), die an den Schraubklemmen des Boards angeschlossen werden.
Sigfox-Nachrichten optimieren
Das Sigfox-Netzwerk erlaubt maximal 140 Nachrichten pro Tag. Daher werden die Messwerte in ein kompaktes Binärformat gepackt. Eine Nachricht darf höchstens 12 Byte groß sein. Ein float belegt 4 Byte, weshalb wir die Werte in kleinere Darstellungen überführen (z. B. int16 oder uint16) und im Backend wieder in die ursprünglichen Werte zurückrechnen. Die Grenzen werden basierend auf dem Einsatzort festgelegt.
Konfiguration der Cloud-Dienste
Wir nutzen zwei Cloud-Dienste:
- Sigfox Backend
- ThingSpeak
- Registrieren Sie Ihr Board im Sigfox Backend mithilfe der PAC und ID aus dem FirstConfiguration-Beispiel (kann übersprungen werden, falls bereits geschehen).
- Erstellen Sie zwei Channels in ThingSpeak: einen für Rohdaten (
readChannelID) und einen für skalierte Daten (writeChannelID). - Laden Sie den Sketch über den Arduino Create Editor hoch. Setzen Sie
oneshot = false, sobald die Backend-Infrastruktur korrekt läuft. - Öffnen Sie das Sigfox Backend und richten Sie einen Callback ein:
- Gerätetyp → Liste → Ihr Board → Bearbeiten
- Callbacks → Neu → Custom Callback
- Callback-Konfiguration:
- TYPE:
DATA/UPLINK - Channel:
URL - HTTP Method:
GET
- TYPE:
- Custom Payload:
status::uint:8 temp1::int:16:little-endian temp2::int:16:little-endian press::uint:16:little-endian hum::uint:16:little-endian light::uint:16:little-endian lastMsg::uint:8 - URL Pattern (ThingSpeak Write API Key einsetzen):
https://api.thingspeak.com/update?api_key=XXXXXXXXXXXX&field1={customData#temp1}&field2={customData#press}&field3={customData#temp2}&field4={customData#hum}&field5={customData#light}&field6={customData#status}&field7={customData#lastMsg}
Von Rohdaten zu Grafiken
Die Daten landen nun im ThingSpeak-Kanal, liegen aber noch im Rohformat vor. Zur Umrechnung nutzen wir das ThingSpeak-Analyse-Tool (MATLAB-Code):
% TODO: readChannelID, writeChannelID, readAPIKey, writeAPIKey eintragen
readChannelID = []; readAPIKey = 'T6UK7XO6A4H2AGT7';
writeChannelID = []; writeAPIKey = 'XU4TGY261P6B5USN';
data = thingSpeakRead(readChannelID, 'ReadKey', readAPIKey, 'OutputFormat', 'table');
analyzedData = data;
INT16_MAX = 32767; UINT16_MAX = 65536;
analyzedData.('Temperature1') = data.('Temperature1') / INT16_MAX * 120;
analyzedData.('Temperature2') = data.('Temperature2') / INT16_MAX * 120;
analyzedData.('Pressure') = data.('Pressure') / UINT16_MAX * 200000;
analyzedData.('Light') = data.('Light') / UINT16_MAX * 100000;
analyzedData.('Humidity') = data.('Humidity') / UINT16_MAX * 110;
thingSpeakWrite(writeChannelID, analyzedData, 'WriteKey', writeAPIKey);
% Zeitplan: React → alle 10 Minuten
Ersetzen Sie die Platzhalter durch Ihre Channel-IDs und API-Keys. Planen Sie die Analyse-Aktion über React alle 10 Minuten ein, damit sie regelmäßig ausgeführt wird. Anschließend stehen Ihnen aussagekräftige Diagramme zur Verfügung.
Code
Der vollständige Sketch (WeatherMonitor) ist im Abschnitt „Code“ des Originalprojekts verfügbar. Er umfasst Initialisierung aller Sensoren, Datenaufbereitung, Sigfox-Versand und Energiesparmodi.
Herstellungsprozess
- Raspberry Pi Wetterstation bauen, die tägliche Wetterdaten per E-Mail sendet
- Wettermonitor – DIY Raspberry Pi Wetterstation mit Dropbox-Upload
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- K30 CO₂-Sensor: Echtzeit-Luftqualitätsmessung mit Arduino
- Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
- Kompakte Wetterstation: Arduino Nano & ESP8266 mit BMP280 Barometrischem Sensor & OLED/Nokia LCD Display
- Digitales Stadiometer bauen: Körpergröße messen mit Arduino & Lasersensor VL53L0X
- DFRobot Kapazitiver Fingerabdrucksensor mit Arduino oder ESP8266 einbinden
- Sensorturm mit Arduino Cloud: Temperatur, Bewegung & Gase überwachen
- Präzisen Luftqualitäts-Monitor mit Sharp GP2Y1010AU0F Sensor bauen