Modul 2: Parkplatzsensor¶
In Modul 2 werden Parkplatzsensoren ausgelesen und unter dem MQTT-Topic city/parking/1 bzw. city/parking/2 bereitgestellt.
Vorbereitung¶
Zum Programmieren des Arduino verwendest du die Arduino IDE:

Im Hauptfenster kannst du Code eingeben. Der Code in setup wird genau einmal beim Start ausgeführt, der unter loop dauerhaft in einer Endlosschleife.
Füge nun folgenden Code ein, um die interne LED blinken zu lassen:
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
Als nächstes wollen wir den Arduino mit unserem MQTT-Broker verbinden.
Dafür verbinden wir uns zunächst mit dem freien WLAN-Hotspot otto hotspot:
#include <WiFi.h>
void setup() {
Serial.begin(9600);
WiFi.begin("otto hotspot");
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("Connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
}
Wenn du in der Ausgabe Connected! siehst, hast du dich erfolgreich mit dem Hotspot verbunden.
Als nächstes verbindest du dich mit dem MQTT-Broker:
#include <WiFiS3.h>
#include <ArduinoMqttClient.h>
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
void connectWiFi() {
Serial.print("Connecting WiFi");
WiFi.begin("otto hotspot");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("Connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void connectMQTT() {
Serial.print("Connecting MQTT");
mqttClient.setId("uno-r4-lab");
while (!mqttClient.connect("imiq-lab.et.uni-magdeburg.de", 21883)) {
Serial.print("MQTT connection failed, error = ");
Serial.println(mqttClient.connectError());
delay(5000);
}
Serial.println("MQTT connected!");
}
void setup() {
Serial.begin(9600);
connectWiFi();
connectMQTT();
// Publish a test message
mqttClient.beginMessage("city/parking/1");
mqttClient.print("Hello!");
mqttClient.endMessage();
}
void loop() {
}
Info
Warte nun, bis alle Teilnehmenden sich mit dem Broker verbunden haben.
Der Parkplatzsensor¶
Den Parkplatzsensor bauen wir mit einem Fotowiderstand:

Dieser kann die Helligkeit des Lichtes messen, das auf ihn fällt. Wenn also ein Auto über dem Sensor parkt, dann wird es dunkler und wir melden den Parkplatz als belegt.
Zum Verkabeln verwenden wir ein Steckbrett:

Baue nun folgende Schaltung auf:

Nun musst du den Helligkeitswert auslesen:
void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
}
void loop() {
int val = analogRead(A0);
Serial.println(val);
delay(1000);
}
Warning
Der Fotowiderstand benötigt immer einen Vorwiderstand. Andernfalls wird er beschädigt. Lass dir im Zweifel deine Schaltung vorher abnehmen.
Experimentiere mit den Fotowiderstand, welche Werte als "belegt" gelten sollten.
Deine Aufgabe¶
Setze nun alle Puzzleteile zusammen, um den Parkplatzsensor mti der Smart City zu verbinden:
- Verbinde dich zum WLAN und zum MQTT-Broker
- Lies kontinuierlich den Fotowiderstand aus
- Wenn der Parkplatz frei / belegt wird, dann sende dies an den MQTT-Broker auf dem Topic
city/parking/1
Du solltest den Fotowiderstand nur einmal pro Sekunde auslesen und dem Broker nur mitteilen, wenn sich der Status wirklich geändert hat. Wiederhole das Ganze auch für den zweiten Sensor. Überprüfe mithilfe des MQTT Viewer, ob der Wert korrekt gesetzt ist.