Wie nutzt man Arduino für IoT-Anwendungen?
Globaler Lieferant elektronischer Komponenten AMPHEO PTY LTD: Umfangreiches Inventar für One-Stop-Shopping. Einfache Anfragen, schnelle, individuelle Lösungen und Angebote.
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.
1) Das richtige Arduino auswählen (nach Konnektivität + Energiebedarf)
-
Wi-Fi: ESP32 oder Nano ESP32 → Heim-/Büro-Netzwerke, viele Funktionen.
-
BLE: Arduino Nano 33 BLE → Smartphone-nahe Anwendungen, kurze Reichweite.
-
Mobilfunk: Arduino MKR GSM 1400 / Arduino MKR NB 1500 → entlegene Standorte ohne WLAN.
-
LoRa/LoRaWAN: Arduino MKR WAN 1310 oder ESP32 + LoRa-Modul → große Reichweite, niedriger Energieverbrauch.
-
Ethernet/PoE: Arduino UNO R4 + Ethernet Shield → feste, zuverlässige Verbindung.
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.
Verwandte Artikel
- ·STM32 + LoRa Drahtloses Sensornetzwerk (WSN) — Komplettes Design
- ·Wie erstelle ich ein physisches Mikrocontrollerprojekt mit nuller Grundlage?
- ·Warum sind 4-Bit-Mikrocontroller noch nicht abgeschafft?
- ·Wie benutzt man Beschleunigungsmesser mit Arduino?
- ·Was ist der Unterschied zwischen Programmiermikrocontrollern und DSPs?
- ·Was sind die beliebtesten IoT Development Boards?
- ·Wie reduzieren Sie den Stromverbrauch in Arduino-Projekten?
- ·Wie verwenden Sie Luftqualitätssensoren mit Arduino oder Pi?
- ·Wie lese ich Temperatur- und Luftfeuchtigkeitsdaten auf einem Mikrocontroller?