Inhaltsverzeichnis:
- Schritt 1: Schließen Sie Ihre Sensoren an
- Schritt 2: Code
- Schritt 3: IBM Cloud
- Schritt 4: Knoten-RED
- Schritt 5: Node-RED-Setup: Licht
- Schritt 6: Node-RED-Setup: Temperatur
- Schritt 7: Node-RED-Setup: Feuchtigkeit
- Schritt 8: Node-RED-Setup: Feuchtigkeit
- Schritt 9: Sie sind fertig
Video: PInt@t10n: Intelligentes Anlagenüberwachungssystem - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
Dieses Projekt wurde als Test für die ibm iot Cloud erstellt. Wir verwenden einen ESP-8266, um Daten an die und von der IBM Cloud zu senden und zu empfangen. Die Kommunikation zwischen ESP und IBM Cloud erfolgt über MQTT.
Um alle Daten zu verarbeiten und dem Benutzer eine Benutzeroberfläche zu präsentieren, verwenden wir node-red. Es ist sehr anfängerfreundlich.
Um loszulegen benötigen Sie:
- Esp-8266
- dht 11/22 Temperatur-/Feuchtigkeitssensor
- lichtempfindliche Diode (Lichtmessung)
- Summer
- Bodenfeuchtesensor
- IBM Cloud-Konto
Schritt 1: Schließen Sie Ihre Sensoren an
Wie bereits erwähnt, verwenden wir den esp8266 zum Lesen und Senden von Sensordaten. Für dieses Tutorial gehen wir davon aus, dass Sie wissen, wie Sie Ihre Sensoren an Ihren Mikrocontroller anschließen. Sie müssen auch bereits wissen, wie Sie Code auf einen esp8266 hochladen.
Unser ESP-Modell hat nur einen analogen Anschluss, daher haben wir uns dafür entschieden, analoge Informationen von unserem Lichtsensor zu erhalten, da wir dann überwachen können, wie viel Licht die Pflanze bekommt.
Alle anderen Sensoren sind digital angeschlossen. Unser DHT11-Sensor sendet Daten digital und wir verwenden die dht-Bibliothek, um die Sensordaten zu interpretieren.
Oben finden Sie einen Schaltplan für die von uns verwendeten Sensoren. Beachten Sie jedoch, dass die von uns verwendeten Sensoren oft mit einem Modul geliefert werden, sodass Sie es ohne all die zusätzlichen Widerstände, die wir im Diagramm enthalten, problemlos an Ihren Mikrocontroller anschließen können.
Schritt 2: Code
Dies ist die Arduino-Skizze, die wir verwendet haben. In den Kommentaren erfahren Sie, wie der Code funktioniert.
#include ArduinoJson.h#include DHT_U.h #include DHT.h #include ESP8266WiFi.h #include ESP8266WiFiMulti.h #include PubSubClient.h
#define STASSID "ucll-projectweek-IoT" #define STAPSK "Foo4aiHa" #define DHTPin 5 #define MoisturePin 4 #define DHTType DHT11 DHT dht(DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; Schwimmertemperatur = 0; Schwebefeuchte = 0; boolesche Feuchtigkeit = false; int Licht = 0; const char* ssid = STASSID; const char* Passwort = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; PubSubClient-Client (espClient); lange letzteNachricht = 0; Zeichennachricht[50]; int-Wert = 0; #define MQTT_HOST "cmfwqk.messaging.internetofthings.ibmcloud.com" #define MQTT_PORT 1883 #define MQTT_DEVICEID "d:cmfwqk:ESP8266:ESP" #define MQTT_USER "use-token-auth" #define MQTT_TO_KENTO "MQTTQTO_KENTO" " iot-2/evt/status/fmt/json" #define MQTT_TOPIC_DISPLAY "iot-2/cmd/update/fmt/json" #include "pitches.h" // Noten in der Melodie: // Notendauer: 4 = Viertel Note, 8 = Achtelnote usw.: int shortTone = 80; int longTone = 200; int Standardverzögerung = 50; int delayBetweenBars = 50; Void setup_wifi () { Verzögerung (10); // Wir beginnen mit der Verbindung zu einem WiFi-Netzwerk Serial.println (); Serial.print ("Verbinden mit"); Serial.println (ssid); WiFi.begin(ssid, Passwort); Während (WiFi.status () != WL_CONNECTED) { Verzögerung (500); Serial.print("."); } Serial.println(""); Serial.println ("WiFi verbunden"); Serial.println("IP-Adresse:"); Serial.println (WiFi.localIP()); aufrechtzuerhalten. Void Rückruf (char * Thema, Byte * Nutzlast, vorzeichenlose Int-Länge) { Serial.print ("Nachricht angekommen ["); Serial.print (Thema); Serial.print("]"); für (int i = 0; i < Länge; i ++) {Serial.print ((char) payload ); } Serial.println(); StaticJsonDocument jsonBuffer; deserializeJson(jsonBuffer, Nutzlast); JsonObject-Stamm = jsonBuffer.as(); if(root["lied"]=="darude"){ darude(); } if(root["song"]=="starwars"){ starwars(); } if (root["song"]=="jacques") {Serial.println ("jakakakakakkakaka"); jaques(); aufrechtzuerhalten. aufrechtzuerhalten. aufrechtzuerhalten. aufrechtzuerhalten. // Versuch, eine Verbindung herzustellen, wenn (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) {Serial.println ("verbunden"); client.subscribe(MQTT_TOPIC_DISPLAY); } sonst {Serial.print ("fehlgeschlagen, rc = "); Serial.print (client.state ()); Serial.println ("versuchen Sie es in 5 Sekunden erneut"); // 5 Sekunden warten, bevor es erneut versucht wird delay(5000); } } } Void setup () { Serial.begin (9600); pinMode (Feuchtigkeitspin, EINGANG); dht.begin(); pinMode (0, AUSGANG); setup_wifi(); client.setServer(mqtt_server, MQTT_PORT); client.setCallback (Rückruf); Verzögerung (20); aufrechtzuerhalten. Void Schleife () { if (!client.connected ()) { reconnect (); } client.loop(); Feuchtigkeit = digitalRead (Feuchtigkeitsstift); Licht = analogRead (A0); temp = dht.readTemperature(); Feuchtigkeit = dht.readHumidity(); Serial.println("Temperatur =" + String(temp, 1) + "\nFeuchtigkeit =" + String(Luftfeuchtigkeit, 1) + "\nFeuchtigkeit: "+String(Feuchtigkeit)+"\nLicht: "+String(Licht)); String-Nutzlast = "{"ts\":{"t\": "+String(temp, 1)+", \"h\": "+String(humidity, 1)+"}, \"ms \":{"m\": "+String(Feuchtigkeit)+"}, \"ls\":{"l\":"+String(Licht)+"}}"; Serial.println (Nutzlast); if (client.publish(MQTT_TOPIC, (char*) payload.c_str())) {Serial.println("publish ok"); } sonst { Serial.println ("Veröffentlichen fehlgeschlagen"); } Verzögerung (2000); aufrechtzuerhalten. Void darude () { Ton (0, NOTE_B3, ShortTone); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, langer Ton); Verzögerung (longTone); kein Ton(0); Verzögerung (VerzögerungBetweenBars); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, langer Ton); Verzögerung (longTone); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_E4, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_E4, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_E4, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_E4, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_E4, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_E4, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_E4, langer Ton); Verzögerung (longTone); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_D4, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_D4, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_D4, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_D4, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_D4, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_D4, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_D4, langer Ton); Verzögerung (longTone); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_A3, langer Ton); Verzögerung (longTone); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, langer Ton); Verzögerung (longTone); kein Ton(0); Verzögerung (VerzögerungBetweenBars); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, langer Ton); Verzögerung (longTone); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_E4, langer Ton); Verzögerung (longTone); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, langer Ton); Verzögerung (longTone); kein Ton(0); Verzögerung (VerzögerungBetweenBars); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, kurzer Ton); Verzögerung (kurzer Ton); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_B3, langer Ton); Verzögerung (longTone); kein Ton(0); Verzögerung (Standardverzögerung); Ton (0, NOTE_E4, langer Ton); Verzögerung (longTone); kein Ton(0); Verzögerung (Standardverzögerung); aufrechtzuerhalten. Void Starwars () { Beep (NOTE_A4, 500); Signalton (HINWEIS_A4, 500); Signalton (HINWEIS_A4, 500); Signalton (HINWEIS_F4, 350); Signalton (HINWEIS_C5, 150); Signalton (HINWEIS_A4, 500); Signalton (HINWEIS_F4, 350); Signalton (HINWEIS_C5, 150); Signalton (HINWEIS_A4, 650); Verzögerung (500); Signalton (HINWEIS_E5, 500); Signalton (HINWEIS_E5, 500); Signalton (HINWEIS_E5, 500); Signalton (HINWEIS_F5, 350); Signalton (HINWEIS_C5, 150); Signalton (HINWEIS_GS4, 500); Signalton (HINWEIS_F4, 350); Signalton (HINWEIS_C5, 150); Signalton (HINWEIS_A4, 650); aufrechtzuerhalten. Void Beep (int Note, Int Dauer) {// Ton auf BuzzerPin Tone (0, Note, Dauer); Verzögerung (Dauer); kein Ton(0); Verzögerung (Standardverzögerung); aufrechtzuerhalten. Void heartOfCourage () {} Void jacques () { Beep (NOTE_C4, 500); Signalton (HINWEIS_D4, 500); Signalton (HINWEIS_E4, 500); Signalton (HINWEIS_C4, 500); Signalton (HINWEIS_C4, 500); Signalton (HINWEIS_D4, 500); Signalton (HINWEIS_E4, 500); Signalton (HINWEIS_C4, 500); Signalton (HINWEIS_E4, 500); Signalton (HINWEIS_F4, 500); Signalton (HINWEIS_G4, 500); Signalton (HINWEIS_E4, 500); Signalton (HINWEIS_F4, 500); Signalton (HINWEIS_G4, 500); Signalton (HINWEIS_G4, 500); Signalton (HINWEIS_A4, 500); Signalton (HINWEIS_G4, 500); Signalton (HINWEIS_F4, 500); Signalton (HINWEIS_E4, 500); Signalton (HINWEIS_C4, 500); Signalton (HINWEIS_G4, 500); Signalton (HINWEIS_A4, 500); Signalton (HINWEIS_G4, 500); Signalton (HINWEIS_F4, 500); Signalton (HINWEIS_E4, 500); Signalton (HINWEIS_C4, 500); Signalton (HINWEIS_C4, 500); Signalton (HINWEIS_G4, 500); Signalton (HINWEIS_C4, 500); Signalton (HINWEIS_C4, 500); Signalton (HINWEIS_G4, 500); Signalton (HINWEIS_C4, 500); }
Schritt 3: IBM Cloud
Sie müssen eine IBM-Cloud-Instanz einrichten. Informationen dazu finden Sie unter diesem Link: github.
Schritt 4: Knoten-RED
Wir verwenden node-red, um unsere allgemeine Geschäftslogik zu handhaben und diese Daten in einer intuitiven Benutzeroberfläche zu visualisieren.
Schritt 5: Node-RED-Setup: Licht
Importieren Sie den folgenden Code in Ihr Projekt.
[{"id":"deb0d57.1c46528", "type":"tab", "label":"Light", "disabled":false, "info":""}, {"id":"8a0fcaac. 4e54", "type":"ibmiot in", "z":"deb0d57.1c46528", "authentication":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":" ", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"+", "commandType":"", "format":"json", "name":"Daten von ESP abrufen", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":120, "y":62, "wires":
Schritt 6: Node-RED-Setup: Temperatur
Importieren Sie den folgenden Code in Ihr Projekt.
[{"id":"fbad3799.f0e0e", "type":"tab", "label":"Temperature", "disabled":false, "info":""}, {"id":"b8618eb9. 1c9288", "type":"ibmiot in", "z":"fbad3799.f0e0e", "authentication":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":" ", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"+", "commandType":"", "format":"json", "name":"Daten von ESP abrufen", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":145.5, "y":49, "wires":
Schritt 7: Node-RED-Setup: Feuchtigkeit
Importieren Sie den folgenden Code in Ihr Projekt.
[{"id":"144cd53b.c00473", "type":"tab", "label":"Luftfeuchtigkeit", "disabled":false, "info":""}, {"id":"d958f58b. 2678e", "type":"ibmiot in", "z":"144cd53b.c00473", "authentication":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":" ", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"+", "commandType":"", "format":"json", "name":"Daten von ESP abrufen", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":"", "qos":0, "x":142, "y":87, "wires":
Schritt 8: Node-RED-Setup: Feuchtigkeit
Importieren Sie den folgenden Code in Ihr Projekt.
[{"id":"4ee73536.ec6fc4", "type":"tab", "label":"Feuchtigkeit", "disabled":false, "info":""}, {"id":"a6daac3e. 2d5268", "type":"ibmiot out", "z":"4ee73536.ec6fc4", "authentication":"boundService", "apiKey":"", "outputType":"cmd", "deviceId":" ESP", "deviceType":"ESP8266", "eventCommandType":"update", "format":"json", "data":"msg", "qos":0, "name":"Befehl an ESP senden ", "service":"registered", "x":804.1944580078125, "y":383.0000305175781, "wires":}, {"id":"4134fdb7.18e9b4", "type":"ibmiot in", "z":"4ee73536.ec6fc4", "authentication":"boundService", "apiKey":"", "inputType":"evt", "logicalInterface":"", "ruleId":"", "deviceId":"ESP", "applicationId":"", "deviceType":"ESP8266", "eventType":"update", "commandType":"", "format":"json", "name":"Daten abrufen from ESP", "service":"registered", "allDevices":false, "allApplications":"", "allDeviceTypes":false, "allLogicalInterfaces":"", "allEvents":true, "allCommands":"", "allFormats":false, "qos":0, "x":115, "y":76, "wires":
Schritt 9: Sie sind fertig
Herzliche Glückwünsche! Sie haben jetzt ein funktionierendes Pflanzenbeobachtungssystem.
Wenn Sie Fragen haben, zögern Sie nicht, uns zu kontaktieren!