Smart Plant IoT: Vernetztes Gewächshaus mit Arduino, Helium & Azure
Komponenten und Materialien
- 1 × Arduino UNO
- 1 × Seeed Base Shield V2
- 1 × Seeed Grove Relais
- 1 × Seeed Grove Temperatursensor
- 1 × Helium Starter Kit (Legacy: Atom + Element + Arduino Breakout)
- Feuchtesensor, UV-Lichtsensor, Peristaltikpumpe (12 V), Grove OLED-Display
Software & Cloud-Dienste
- Microsoft Azure (IoT Hub, SQL Database, Functions)
- Microsoft Visual Studio 2015+
- Helium Dashboard (Network/Access Point Management)
- Arduino IDE
Projektbeschreibung
Ein IoT-fähiges Pflanzenüberwachungssystem: Sensoren (Bodenfeuchte, Temperatur, Luftfeuchte, UV-Licht) senden Daten via Helium-Netzwerk (LoRaWAN) an Azure IoT Hub. Azure Functions speichern die Daten in Azure SQL. Eine HTTP-Trigger-Function stellt die Daten für eine Android-App bereit. Die Pumpe wird automatisch (bei Trockenheit) oder per App ferngesteuert. Das Projekt ist serverless – nur Arduino-Code & Azure Functions nötig.
Architektur
- Arduino + Helium Atom: Liest Sensoren, sendet per Helium-Netzwerk.
- Helium Element (Access Point): Leitet Daten an Helium Cloud.
- Helium Cloud → Azure IoT Hub: Via konfigurierbarer Connection (Shared Access Policy).
- Azure Function (Event Hub Trigger): Parst MQTT-Payload → INSERT in Azure SQL.
- Azure Function (HTTP Trigger): Stellt JSON-Daten für App bereit.
- Android App: Zeigt Sensorwerte, löst Pumpe aus.
Schritt-für-Schritt
1. Hardware aufbauen
Base Shield auf Arduino, Sensoren an Grove-Ports, Helium Atom auf Breakout-Board. Pumpe (12 V) über Relais an externer 12 V Quelle (z. B. Netzteil) – Relais schaltet Plus-Leitung.
2. Helium-Netzwerk einrichten
- Atom im Helium Dashboard registrieren.
- Element als Access Point registrieren.
- Channel „Azure IoT App“ erstellen.
3. Azure IoT Hub einrichten
- IoT Hub erstellen (Free/Standard Tier).
- Shared Access Policy „RegistryReadWrite“ → Connection String (Primary Key) kopieren.
- Test-Device anlegen.
4. Helium → Azure Verbindung
- Im Helium Dashboard: „Connections“ → „Add Connection“ → Azure IoT Hub → Connection String einfügen.
- MQTT-Topics werden automatisch generiert.
5. Azure SQL Database
- SQL Database erstellen (Basic Tier).
- Tabelle anlegen:
CREATE TABLE SmartPlant ( id BIGINT IDENTITY(1,1) PRIMARY KEY, Temperature INT NOT NULL, Humidity INT NOT NULL, Moisture INT NOT NULL, UVLight INT NOT NULL, DateCreated DATETIME DEFAULT CURRENT_TIMESTAMP ); - Connection String (ADO.NET) kopieren.
6. Azure Function App (Serverless)
- Function App erstellen (Consumption Plan).
- Application Setting
sqldb_connection= SQL-Connection-String. - Function 1 (Event Hub Trigger, C#): Empfängt IoT Hub Messages, parst Key-Value-Pairs, INSERT in SmartPlant.
- Function 2 (HTTP Trigger, C#): GET
/api/smartplant→ letztes Record als JSON. - Function 3 (HTTP Trigger, Shortcut): Direkter INSERT via Query-Parameter (für Tests).
7. Arduino-Code
#include "Arduino.h"
#include "Board.h"
#include "Helium.h"
#include "HeliumUtil.h"
#include
#include
#include
#include
#define CHANNEL_NAME "Azure IoT App"
Helium helium(&atom_serial);
Channel channel(&helium);
int relay = 5;
void setDisplayToOriginalState() {
SeeedGrayOled.init(SSD1327);
}
void setup() {
Serial.begin(9600);
pinMode(relay, OUTPUT);
delay(150);
TH02.begin();
delay(100);
Serial.println("TH02_dev is available.");
helium.begin(HELIUM_BAUD_RATE);
helium_connect(&helium);
channel_create(&channel, CHANNEL_NAME);
Wire.begin();
}
void loop() {
// Sensoren mitteln (32 Samples)
int moisture = 0, uvlight = 0;
for (int i = 0; i < 32; i++) {
moisture += analogRead(A0);
uvlight += analogRead(A1);
}
float temper = TH02.ReadTemperature();
float humidity = TH02.ReadHumidity();
// Payload bauen
String dataString = "Moisture=" + String(moisture) +
"&UVLight=" + String(uvlight) +
"&Temperature=" + String(temper) +
"&Humidity=" + String(humidity);
char data[dataString.length() + 1];
dataString.toCharArray(data, sizeof(data));
channel_send(&channel, CHANNEL_NAME, data, strlen(data));
Serial.println(data);
// OLED anzeigen
setDisplayToOriginalState();
SeeedGrayOled.clearDisplay();
SeeedGrayOled.setNormalDisplay();
SeeedGrayOled.setVerticalMode();
SeeedGrayOled.setTextXY(0, 0); SeeedGrayOled.putString("Moisture: " + String(moisture));
SeeedGrayOled.setTextXY(2, 0); SeeedGrayOled.putString("UVLight: " + String(uvlight));
SeeedGrayOled.setTextXY(4, 0); SeeedGrayOled.putString(String(temper) + " C");
SeeedGrayOled.setTextXY(6, 0); SeeedGrayOled.putString("Humid: " + String(humidity));
// Auto-Bewässerung
if (moisture < 100) {
digitalWrite(relay, HIGH);
delay(5000);
digitalWrite(relay, LOW);
}
delay(60000); // 1 Min Intervall
}
8. Android App (UI)
Einfache App, die alle 60 s die HTTP-Function abfragt und vier Sensorwerte anzeigt. Button für manuelle Bewässerung. Screenshots im Originalprojekt.
9. Optional: Alexa-Integration
Über zusätzliche Azure Function + Alexa Skill Kit möglich (nicht im Detail gezeigt).
Projekt-Repository
Schaltplan / Architektur

Herstellungsprozess
- Smart Data: Die nächste Frontier von IoT und Big Data navigieren
- Intelligenter Mülleimer: Zellulare IoT-Lösung für automatisiertes Abfallmanagement
- Smart Bartender: Eigenen Raspberry Pi Cocktail-Roboter bauen
- GE Appliances eröffnet smartes, Industrie-4.0-fähiges Kühlwerk in Decatur, Alabama
- Smart Hospitals von morgen: Die kritische Rolle intelligenter Software
- Wie Smart Cities IoT, Microservices und Dashboards für effizientes Asset Management nutzen
- ROI bei IoT-Investitionen maximieren: Ein praktischer Leitfaden
- Optimiertes Smart Warehouse mit robuster IoT-Ökosystem aufbauen
- Smarte Geräte sicher machen: Best Practices für IoT-Sicherheit
- Modernste IoT-Innovationen und reale Anwendungen entdecken