Heim Der Blog Blog Details

Wie nutzt man Arduino für IoT-Anwendungen?

August 28 2025
Ampheo

Anfrage

Globaler Lieferant elektronischer Komponenten AMPHEO PTY LTD: Umfangreiches Inventar für One-Stop-Shopping. Einfache Anfragen, schnelle, individuelle Lösungen und Angebote.

SCHNELLE ANFRAGE
ZUR RFQ-LISTE HINZUFÜGEN
Hier ist eine praxisnahe, durchgehende Anleitung, wie man Arduino für IoT-Anwendungen nutzt – von der Auswahl der Hardware über Sensoren und Cloud-Anbindung bis hin zu Sicherheit und Zuverlässigkeit.

Hier ist eine praxisnahe, durchgehende Anleitung, wie man Arduino für IoT-Anwendungen nutzt – von der Auswahl der Hardware über Sensoren und Cloud-Anbindung bis hin zu Sicherheit und Zuverlässigkeit.

Wie nutzt man Arduino für IoT-Anwendungen?


1) Das richtige Arduino auswählen (nach Konnektivität + Energiebedarf)


2) Sensoren & Aktoren

  • Sensoren: Temperatur/Luftfeuchte (DHT22/BME280), Licht (TSL2591), Bewegung (PIR), Strom/Spannung (INA219/INA226).

  • Aktoren: Relais, MOSFETs, Servos, LEDs.

  • Tipps: I/O-Spannung beachten, Pull-ups bei I²C, Level-Shifting bei 3,3 V/5 V-Mix.


3) Kommunikationswege zur Cloud

  • Protokolle:

    • MQTT (leichtgewichtig, ideal für IoT)

    • HTTP/REST (einfach, aber mehr Overhead)

    • WebSockets (bidirektional, Live-Daten)

  • Datenformate: JSON (lesbar), CBOR/MsgPack (effizient).

  • Cloud-Ziele: Mosquitto Broker, AWS IoT, Azure IoT Hub, Google Cloud IoT, oder selbst gehostet (Node-RED + Mosquitto + InfluxDB + Grafana).


4) Minimal-Architektur (Merkbild)

Sensor → Arduino-Firmware → (Wi-Fi/Mobilfunk) → MQTT-Broker/HTTP-API → Datenbank/Regeln → Dashboard/Alarme


5) Beispiel: ESP32 + MQTT + DHT22

Verdrahtung: DHT22 DATA → GPIO 4, VCC → 3V3, GND → GND, 10 kΩ Pull-up von DATA zu 3V3.

Bibliotheken installieren (Arduino IDE → Bibliotheksverwalter):

  • „DHT sensor library“ (Adafruit)

  • „PubSubClient“ (MQTT)

  • „ArduinoJson“ (für JSON)

 

#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <ArduinoJson.h>

#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

const char* WIFI_SSID     = "YOUR_WIFI_SSID";
const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD";

// Use your own broker (recommended). For quick tests, set your broker's host/IP:
const char* MQTT_BROKER   = "YOUR_MQTT_BROKER_HOST";
const int   MQTT_PORT     = 1883;
const char* MQTT_CLIENTID = "esp32-sensor-01";
const char* MQTT_USER     = "";   // optional
const char* MQTT_PASS     = "";   // optional

WiFiClient wifiClient;
PubSubClient mqtt(wifiClient);

unsigned long lastPub = 0;
const unsigned long pubIntervalMs = 10 * 1000;

void ensureWifi() {
  if (WiFi.status() == WL_CONNECTED) return;
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) { delay(500); }
}

void ensureMqtt() {
  if (mqtt.connected()) return;
  while (!mqtt.connected()) {
    mqtt.connect(MQTT_CLIENTID, MQTT_USER, MQTT_PASS);
    delay(500);
  }
  // subscribe to control topic for downstream commands
  mqtt.subscribe("home/lab/esp32/ctrl");
}

void onMqtt(char* topic, byte* payload, unsigned int len) {
  String msg;
  for (unsigned int i=0; i<len; i++) msg += (char)payload[i];
  if (String(topic) == "home/lab/esp32/ctrl" && msg == "led:on") {
    // TODO: digitalWrite(LED_BUILTIN, HIGH);
  }
}

void setup() {
  // pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(115200);
  dht.begin();
  ensureWifi();
  mqtt.setServer(MQTT_BROKER, MQTT_PORT);
  mqtt.setCallback(onMqtt);
}

void loop() {
  ensureWifi();
  ensureMqtt();
  mqtt.loop();

  unsigned long now = millis();
  if (now - lastPub > pubIntervalMs) {
    lastPub = now;

    float t = dht.readTemperature();   // Celsius
    float h = dht.readHumidity();
    if (isnan(t) || isnan(h)) return;

    StaticJsonDocument<200> doc;
    doc["device"] = MQTT_CLIENTID;
    doc["ts"]     = (uint32_t)(millis()/1000);
    doc["temp_c"] = t;
    doc["hum_pct"]= h;

    char buff[200];
    size_t n = serializeJson(doc, buff);

    mqtt.publish("home/lab/esp32/telemetry", buff, n);
  }
}


6) Sicherheit

  • Eindeutige Zugangsdaten pro Gerät (Benutzer/Passwort oder Zertifikate).

  • TLS verwenden (MQTTS Port 8883 / HTTPS). Zertifikate prüfen.

  • Last Will & Testament (LWT) setzen, damit Broker weiß, wenn Gerät offline ist.

  • Geheimnisse nicht im Klartext veröffentlichen → Provisioning oder Secure Element (ATECC608A).


7) OTA-Updates (Over-the-Air)

  • ESP32 unterstützt ArduinoOTA oder HTTP OTA.

  • Firmware-Version in JSON-Manifest hinterlegen → Gerät prüft regelmäßig auf Updates.


8) Stromversorgung & Zuverlässigkeit

  • Deep Sleep nutzen (ESP32 ~10 µA).

  • Daten bündeln und seltener senden.

  • Watchdog und Brown-out-Reset aktivieren.

  • TVS-Dioden + Entkopplungskondensatoren + ESD-Schutz für robuste Hardware.


9) Edge-Logik

  • Rohdaten filtern (Moving Average).

  • Hysterese für Alarme → kein Flattern.

  • Zeitstempel mit RTC oder NTP.


10) Dashboards & Benachrichtigungen

  • Lokal: Node-RED, InfluxDB + Grafana.

  • Cloud: AWS, Azure, Google oder ThingsBoard, Ubidots.

  • Alarme: E-Mail/Slack/Telegram über Regeln oder Serverless-Funktionen.


11) Test-Checkliste

  • Sensor-Verdrahtung getestet (I²C-Scan).

  • Eindeutige Geräte-ID gesetzt.

  • WLAN + MQTT reconnect nach Neustart geprüft.

  • LWT funktioniert (Status = offline bei Stromverlust).

  • OTA-Update getestet.

  • Stromverbrauch aktiv vs. Sleep gemessen.

  • Daten erscheinen mit richtigen Einheiten & Zeitstempeln im Dashboard.

Ampheo