Innehållsförteckning:

PInt@t10n: Smart Plant Monitoring System: 9 steg
PInt@t10n: Smart Plant Monitoring System: 9 steg

Video: PInt@t10n: Smart Plant Monitoring System: 9 steg

Video: PInt@t10n: Smart Plant Monitoring System: 9 steg
Video: 35 New Ways To Use Common Things 2024, Juli
Anonim
PInt@t10n: Smart Plant Monitoring System
PInt@t10n: Smart Plant Monitoring System

Detta projekt skapades som ett test för ibm iot -molnet. Vi använder en esp-8266 för att skicka och ta emot data till och från ibm-molnet. Kommunikationen mellan esp och ibm -molnet sker via MQTT.

För att hantera all data och för att presentera användaren med ett användargränssnitt använder vi nod-rött. Det är mycket nybörjarvänligt.

För att komma igång behöver du:

  • Esp-8266
  • dht 11/22 temp/fuktgivare
  • ljuskänslig diod (ljusmätning)
  • summer
  • markfuktighetssensor
  • ibm molnkonto

Steg 1: Anslut dina sensorer

Anslut dina sensorer
Anslut dina sensorer
Anslut dina sensorer
Anslut dina sensorer
Anslut dina sensorer
Anslut dina sensorer

Som vi nämnde tidigare kommer vi att använda esp8266 för att läsa och skicka sensordata. För denna handledning antar vi att du vet hur du ansluter dina sensorer till din mikrokontroller. Du behöver också redan veta hur du laddar upp kod till en esp8266.

Vår esp -modell har bara en analog port så vi valde att ta emot analog information från vår ljussensor för då kan vi övervaka hur mycket ljus anläggningen får.

Alla andra sensorer är digitalt anslutna. Vår DHT11 -sensor skickar data digitalt och vi använder dht -biblioteket för att tolka sensordata.

Ovan hittar du ett kretsschema för de sensorer vi använde. Men kom ihåg att de sensorer vi använde ofta kommer med en modul så att du enkelt kan ansluta den till din mikrokontroller utan alla extra motstånd som vi inkluderade i diagrammet.

Steg 2: Kod

Detta är arduino -skissen som vi använde. Du kan lära dig mer om hur koden fungerar om du läser kommentarerna.

#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 moistPin 4 #define DHTType DHT11 DHT dht (DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; float temp = 0; flottörfuktighet = 0; boolsk fukt = falsk; int ljus = 0; const char* ssid = STASSID; const char* lösenord = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; PubSubClient -klient (espClient); lång lastMsg = 0; char msg [50]; int värde = 0; #define MQTT_HOST "cmfwqk.messaging.internetofthings.ibmcloud.com" "#define MQTT_PORT 1883 #define MQTT_DEVICEID" d: cmfwqk: ESP8266: ESP "#define MQTT_UST" MOT_ENT "MOT_ENT" #Token_MT "#Token_MTT_UST" #"Token_MTT_UST" #"" iot-2/evt/status/fmt/json "#define MQTT_TOPIC_DISPLAY" iot-2/cmd/update/fmt/json "#include" pitches.h "// noter i melodin: // notlängd: 4 = kvartal not, 8 = åttonde not, etc.: int shortTone = 80; int longTone = 200; int standardDelay = 50; int delayBetweenBars = 50; void setup_wifi () {delay (10); // Vi börjar med att ansluta till ett WiFi -nätverk Serial.println (); Serial.print ("Ansluter till"); Serial.println (ssid); WiFi.begin (ssid, lösenord); medan (WiFi.status ()! = WL_CONNECTED) {fördröjning (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi ansluten"); Serial.println ("IP -adress:"); Serial.println (WiFi.localIP ()); } ogiltig återuppringning (karaktär* ämne, byte* nyttolast, osignerad int längd) {Serial.print ("Meddelande kom ["); Serial.print (ämne); Serial.print ("]"); for (int i = 0; i <length; i ++) {Serial.print ((char) nyttolast ); } Serial.println (); StaticJsonDocument jsonBuffer; deserializeJson (jsonBuffer, nyttolast); JsonObject root = jsonBuffer.as (); if (root ["sång"] == "darude") {darude (); } if (root ["song"] == "starwars") {starwars (); } if (root ["song"] == "jacques") {Serial.println ("jakakakakakkakaka"); jacques (); }} void reconnect () {// Loop tills vi återansluts medan (! client.connected ()) {Serial.print ("Försöker MQTT -anslutning …"); // Försök att ansluta om (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) {Serial.println ("ansluten"); klient. prenumerera (MQTT_TOPIC_DISPLAY); } annat {Serial.print ("misslyckades, rc ="); Serial.print (client.state ()); Serial.println ("försök igen om 5 sekunder"); // Vänta 5 sekunder innan försöket försöker igen (5000); }}} void setup () {Serial.begin (9600); pinMode (fuktPin, INGÅNG); dht.begin (); pinMode (0, OUTPUT); setup_wifi (); client.setServer (mqtt_server, MQTT_PORT); client.setCallback (återuppringning); fördröjning (20); } void loop () {if (! client.connected ()) {reconnect (); } client.loop (); fukt = digitalRead (fuktPin); light = analogRead (A0); temp = dht.readTemperature (); fuktighet = dht.readHumidity (); Serial.println ("Temperatur =" + Sträng (temp, 1) + "\ nFuktighet =" + Sträng (fuktighet, 1) + "\ nFukt:" + Sträng (fukt) + "\ nLjus:" + Sträng (ljus)); String nyttolast = "{" ts / ": {" t / ":"+String (temp, 1)+", \" h / ":"+Sträng (fuktighet, 1)+"}, \" ms / ": {" m / ":"+Sträng (fukt)+"}, \" ls / ": {" l / ":"+Sträng (ljus)+"}}"; Serial.println (nyttolast); if (client.publish (MQTT_TOPIC, (char*) payload.c_str ())) {Serial.println ("publicera ok"); } else {Serial.println ("publicera misslyckades"); } fördröjning (2000); } void darude () {ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, longTone); delay (longTone); noTone (0); delay (delayBetweenBars); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, longTone); delay (longTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_E4, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_E4, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_E4, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_E4, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_E4, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_E4, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_E4, longTone); delay (longTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_D4, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_D4, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_D4, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_D4, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_D4, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_D4, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_D4, longTone); delay (longTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_A3, longTone); delay (longTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, longTone); delay (longTone); noTone (0); delay (delayBetweenBars); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, longTone); delay (longTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_E4, longTone); delay (longTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, longTone); delay (longTone); noTone (0); delay (delayBetweenBars); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, shortTone); fördröjning (shortTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_B3, longTone); delay (longTone); noTone (0); fördröjning (standardDelay); ton (0, NOTE_E4, longTone); delay (longTone); noTone (0); fördröjning (standardDelay); } void starwars () {pip (NOTE_A4, 500); pip (NOTE_A4, 500); pip (NOTE_A4, 500); pip (NOTE_F4, 350); pip (NOTE_C5, 150); pip (NOTE_A4, 500); pip (NOTE_F4, 350); pip (NOTE_C5, 150); pip (NOTE_A4, 650); fördröjning (500); pip (NOTE_E5, 500); pip (NOTE_E5, 500); pip (NOTE_E5, 500); pip (NOTE_F5, 350); pip (NOTE_C5, 150); pip (NOTE_GS4, 500); pip (NOTE_F4, 350); pip (NOTE_C5, 150); pip (NOTE_A4, 650); } ogiltigt pip (int not, int varaktighet) {// Spela ton på buzzerPin ton (0, not, varaktighet); fördröjning (varaktighet); noTone (0); fördröjning (standardDelay); } void heartOfCourage () {} void jacques () {pip (NOTE_C4, 500); pip (NOTE_D4, 500); pip (NOTE_E4, 500); pip (NOTE_C4, 500); pip (NOTE_C4, 500); pip (NOTE_D4, 500); pip (NOTE_E4, 500); pip (NOTE_C4, 500); pip (NOTE_E4, 500); pip (NOTE_F4, 500); pip (NOTE_G4, 500); pip (NOTE_E4, 500); pip (NOTE_F4, 500); pip (NOTE_G4, 500); pip (NOTE_G4, 500); pip (NOTE_A4, 500); pip (NOTE_G4, 500); pip (NOTE_F4, 500); pip (NOTE_E4, 500); pip (NOTE_C4, 500); pip (NOTE_G4, 500); pip (NOTE_A4, 500); pip (NOTE_G4, 500); pip (NOTE_F4, 500); pip (NOTE_E4, 500); pip (NOTE_C4, 500); pip (NOTE_C4, 500); pip (NOTE_G4, 500); pip (NOTE_C4, 500); pip (NOTE_C4, 500); pip (NOTE_G4, 500); pip (NOTE_C4, 500); }

Steg 3: Ibm Cloud

Ibm Cloud
Ibm Cloud

Du måste konfigurera en IBM-molninstans. Du hittar information om detta via denna länk: github.

Steg 4: Nod-RÖD

Vi använder nod-rött för att hantera vår allmänna affärslogik och för att visualisera dessa data i ett intuitivt användargränssnitt.

Steg 5: Node-RED Setup: Light

Node-RED Setup: Light
Node-RED Setup: Light

Importera följande kod till ditt 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": "Hämta data från ESP", "service": "registrerad", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 120, "y": 62, "wires":

Steg 6: Node-RED Setup: Temperatur

Node-RED Setup: Temperatur
Node-RED Setup: Temperatur

Importera följande kod till ditt 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": "Hämta data från ESP", "service": "registrerad", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 145.5, "y": 49, "wires":

Steg 7: Node-RED Setup: Luftfuktighet

Node-RED Setup: Fuktighet
Node-RED Setup: Fuktighet

Importera följande kod till ditt projekt.

[{"id": "144cd53b.c00473", "type": "tab", "label": "Fuktighet", "inaktiverad": 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": "Hämta data från ESP", "service": "registrerad", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 142, "y": 87, "wires":

Steg 8: Node-RED Setup: Fukt

Node-RED Setup: Fukt
Node-RED Setup: Fukt

Importera följande kod till ditt projekt.

[{"id": "4ee73536.ec6fc4", "type": "tab", "label": "Fukt", "inaktiverad": 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 ":" Send command to ESP "," service ":" registrerad "," 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": "Hämta data från ESP "," service ":" registrerad "," allDevices ": false," allApplications ":" "," allDeviceTypes ": false," allLogicalInterfaces ":" "," allEvents ": true," allCommands ":" ", "allFormats": false, "qos": 0, "x": 115, "y": 76, "wires":

Steg 9: Du är klar

Grattis! du har nu ett fungerande anläggningsobservationssystem.

Om du har några frågor, tveka inte att kontakta oss!