Sadržaj:

PInt@t10n: Pametni sistem za nadzor postrojenja: 9 koraka
PInt@t10n: Pametni sistem za nadzor postrojenja: 9 koraka

Video: PInt@t10n: Pametni sistem za nadzor postrojenja: 9 koraka

Video: PInt@t10n: Pametni sistem za nadzor postrojenja: 9 koraka
Video: The Choice is Ours (2016) Official Full Version 2024, Novembar
Anonim
PInt@t10n: Pametni sistem za nadzor postrojenja
PInt@t10n: Pametni sistem za nadzor postrojenja

Ovaj projekat je nastao kao test za ibm iot oblak. Koristimo esp-8266 za slanje i primanje podataka u ibm oblak i iz njega. Komunikacija između esp -a i ibm oblaka odvija se putem MQTT -a.

Za obradu svih podataka i predstavljanje korisničkog sučelja korisniku koristimo node-red. Vrlo je prilagođen početnicima.

Za početak vam je potrebno:

  • Esp-8266
  • dht 11/22 senzor temperature/vlage
  • fotoosjetljiva dioda (mjerenje svjetlosti)
  • zujalica
  • senzor vlažnosti tla
  • ibm cloud nalog

Korak 1: Povežite svoje senzore

Povežite svoje senzore
Povežite svoje senzore
Povežite svoje senzore
Povežite svoje senzore
Povežite svoje senzore
Povežite svoje senzore

Kao što smo već spomenuli, koristit ćemo esp8266 za čitanje i slanje podataka senzora. Za ovaj vodič ćemo pretpostaviti da znate kako spojiti svoje senzore na vaš mikro kontroler. Takođe morate znati kako otpremiti kôd na esp8266.

Naš esp model ima samo jedan analogni priključak pa smo odlučili primati analogne informacije od našeg svjetlosnog senzora jer tada možemo pratiti koliko svjetla biljka dobiva.

Svi ostali senzori povezani su digitalno. Naš DHT11 senzor šalje podatke digitalno, a mi koristimo dht biblioteku za tumačenje podataka senzora.

Gore možete pronaći dijagram spojeva za senzore koje smo koristili. No, imajte na umu da senzori koje smo koristili često dolaze s modulom tako da ga možete jednostavno povezati s mikrokontrolerom bez svih dodatnih otpornika koje smo uključili u dijagram.

Korak 2: Kodirajte

Ovo je arduino skica koju smo koristili. O tome kako kôd funkcionira možete saznati ako pročitate komentare.

#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 moisPin 4 #define DHTType DHT11 DHT dht (DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; float temp = 0; vlažnost plovka = 0; logička vlaga = lažno; int svjetlo = 0; const char* ssid = STASSID; const char* lozinka = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; PubSubClient klijent (espClient); long lastMsg = 0; char msg [50]; int vrijednost = 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-autHTT #MkTeKonTK #MkTcQTKoT MKTc # iot-2/evt/status/fmt/json "#define MQTT_TOPIC_DISPLAY" iot-2/cmd/update/fmt/json "#include" pitches.h "// bilješke u melodiji: // trajanje note: 4 = četvrtina napomena, 8 = osma nota, itd.: int shortTone = 80; int longTone = 200; int standardnaDelay = 50; int delayBetweenBars = 50; void setup_wifi () {delay (10); // Počinjemo povezivanjem na WiFi mrežu Serial.println (); Serial.print ("Povezivanje sa"); Serial.println (ssid); WiFi.begin (ssid, lozinka); while (WiFi.status ()! = WL_CONNECTED) {kašnjenje (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi povezan"); Serial.println ("IP adresa:"); Serial.println (WiFi.localIP ()); } nevažeći povratni poziv (char* tema, bajt* korisni teret, nepotpisana dužina inta) {Serial.print ("Poruka je stigla ["); Serial.print (topic); Serial.print ("]"); for (int i = 0; i <length; i ++) {Serial.print ((char) korisni teret ); } Serial.println (); StaticJsonDocument jsonBuffer; deserializeJson (jsonBuffer, korisni teret); JsonObject korijen = jsonBuffer.as (); if (root ["song"] == "darude") {darude (); } if (root ["song"] == "starwars") {starwars (); } if (root ["song"] == "jacques") {Serial.println ("jakakakakakkakaka"); jacques (); }} void reconnect () {// Petlja sve dok se ponovo ne povežemo while (! client.connected ()) {Serial.print ("Pokušaj MQTT veze …"); // Pokušaj povezivanja if (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) {Serial.println ("connected"); client.subscribe (MQTT_TOPIC_DISPLAY); } else {Serial.print ("nije uspjelo, rc ="); Serial.print (client.state ()); Serial.println ("pokušajte ponovo za 5 sekundi"); // Pričekajte 5 sekundi prije ponovnog pokušaja odgode (5000); }}} void setup () {Serial.begin (9600); pinMode (moisPin, INPUT); dht.begin (); pinMode (0, OUTPUT); setup_wifi (); client.setServer (mqtt_server, MQTT_PORT); client.setCallback (povratni poziv); kašnjenje (20); } void loop () {if (! client.connected ()) {reconnect (); } client.loop (); vlaga = digitalno čitanje (oznaka vlage); light = analogRead (A0); temp = dht.readTemperature (); vlažnost = dht.readHumidity (); Serial.println ("Temperatura =" + niz (temp, 1) + "\ nVlažnost =" + niz (vlažnost, 1) + "\ nVlaža:" + niz (vlaga) + "\ nSvjetlo:" + niz (svjetlo)); Niz korisnog opterećenja = "{" ts / ": {" t / ":"+Niz (temp, 1)+", \" h / ":"+Niz (vlažnost, 1)+"}, \" ms / ": {" m / ":"+Niz (vlaga)+"}, \" ls / ": {" l / ":"+Niz (svjetlo)+"}}"; Serial.println (korisni teret); if (client.publish (MQTT_TOPIC, (char*) payload.c_str ())) {Serial.println ("objavi u redu"); } else {Serial.println ("objavljivanje nije uspjelo"); } kašnjenje (2000); } void darude () {ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, longTone); kašnjenje (longTone); noTone (0); delay (delayBetweenBars); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, longTone); kašnjenje (longTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_E4, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_E4, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_E4, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_E4, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_E4, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_E4, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_E4, longTone); kašnjenje (longTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_D4, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_D4, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_D4, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_D4, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_D4, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_D4, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_D4, longTone); kašnjenje (longTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_A3, longTone); kašnjenje (longTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, longTone); kašnjenje (longTone); noTone (0); delay (delayBetweenBars); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, longTone); kašnjenje (longTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_E4, longTone); kašnjenje (longTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, longTone); kašnjenje (longTone); noTone (0); delay (delayBetweenBars); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, shortTone); kašnjenje (shortTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_B3, longTone); kašnjenje (longTone); noTone (0); kašnjenje (standardna odgoda); ton (0, NOTE_E4, longTone); kašnjenje (longTone); noTone (0); kašnjenje (standardna odgoda); } void starwars () {bip (NOTE_A4, 500); zvučni signal (NAPOMENA_A4, 500); zvučni signal (NAPOMENA_A4, 500); zvučni signal (NOTE_F4, 350); zvučni signal (NOTE_C5, 150); zvučni signal (NAPOMENA_A4, 500); zvučni signal (NOTE_F4, 350); zvučni signal (NOTE_C5, 150); zvučni signal (NAPOMENA_A4, 650); kašnjenje (500); zvučni signal (NOTE_E5, 500); zvučni signal (NOTE_E5, 500); zvučni signal (NOTE_E5, 500); zvučni signal (NOTE_F5, 350); zvučni signal (NOTE_C5, 150); zvučni signal (NOTE_GS4, 500); zvučni signal (NOTE_F4, 350); zvučni signal (NOTE_C5, 150); zvučni signal (NAPOMENA_A4, 650); } void bip (int note, int duration) {// Pusti ton na zujaliciPin ton (0, note, duration); kašnjenje (trajanje); noTone (0); kašnjenje (standardna odgoda); } void heartOfCourage () {} void jacques () {bip (NOTE_C4, 500); zvučni signal (NOTE_D4, 500); zvučni signal (NOTE_E4, 500); zvučni signal (NOTE_C4, 500); zvučni signal (NOTE_C4, 500); zvučni signal (NOTE_D4, 500); zvučni signal (NOTE_E4, 500); zvučni signal (NOTE_C4, 500); zvučni signal (NOTE_E4, 500); zvučni signal (NOTE_F4, 500); zvučni signal (NOTE_G4, 500); zvučni signal (NOTE_E4, 500); zvučni signal (NOTE_F4, 500); zvučni signal (NOTE_G4, 500); zvučni signal (NOTE_G4, 500); zvučni signal (NAPOMENA_A4, 500); zvučni signal (NOTE_G4, 500); zvučni signal (NOTE_F4, 500); zvučni signal (NOTE_E4, 500); zvučni signal (NOTE_C4, 500); zvučni signal (NOTE_G4, 500); zvučni signal (NAPOMENA_A4, 500); zvučni signal (NOTE_G4, 500); zvučni signal (NOTE_F4, 500); zvučni signal (NOTE_E4, 500); zvučni signal (NOTE_C4, 500); zvučni signal (NOTE_C4, 500); zvučni signal (NOTE_G4, 500); zvučni signal (NOTE_C4, 500); zvučni signal (NOTE_C4, 500); zvučni signal (NOTE_G4, 500); zvučni signal (NOTE_C4, 500); }

Korak 3: Ibm Cloud

Ibm Cloud
Ibm Cloud

Morate postaviti instancu IBM-cloud. Informacije o ovome možete pronaći na ovoj vezi: github.

Korak 4: Node-RED

Node-red koristimo za rukovanje općom poslovnom logikom i za vizualizaciju ovih podataka u intuitivnom korisničkom sučelju.

Korak 5: Node-CRVENA postavka: Lagano

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

Uvezite sljedeći kôd u svoj 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 "," logickiInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Dobijte podatke od ESP -a", "service": "registrirano", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 120, "y": 62, "žice":

Korak 6: Node-RED Setup: Temperatura

Node-RED Setup: Temperatura
Node-RED Setup: Temperatura

Uvezite sljedeći kôd u svoj projekt.

[{"id": "fbad3799.f0e0e", "type": "tab", "label": "Temperatura", "disabled": false, "info": ""}, {"id": "b8618eb9. 1c9288 "," type ":" ibmiot in "," z ":" fbad3799.f0e0e "," authentication ":" boundService "," apiKey ":" "," inputType ":" evt "," logickiInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Dobijte podatke od ESP -a", "service": "registrirano", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 145,5, "y": 49, "žice":

Korak 7: Node-RED Setup: Vlažnost

Node-RED Setup: Vlažnost
Node-RED Setup: Vlažnost

Uvezite sljedeći kôd u svoj projekt.

[{"id": "144cd53b.c00473", "type": "tab", "label": "Vlažnost", "disabled": false, "info": ""}, {"id": "d958f58b. 2678e "," type ":" ibmiot in "," z ":" 144cd53b.c00473 "," authentication ":" boundService "," apiKey ":" "," inputType ":" evt "," logickiInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Dobijte podatke od ESP -a", "service": "registrirano", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 142, "y": 87, "žice":

Korak 8: Node-RED Setup: Vlaga

Node-RED Setup: Vlaga
Node-RED Setup: Vlaga

Uvezite sljedeći kôd u svoj projekt.

[{"id": "4ee73536.ec6fc4", "type": "tab", "label": "Vlaga", "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 ":" Pošaljite naredbu ESP -u "," service ":" registered "," x ": 804.1944580078125," y ": 383.0000305175781," wires ": }, {" id ":" 4134fdb7.18e9b4 "," type ":" ibmiot in ", "z": "4ee73536.ec6fc4", "autentifikacija": "boundService", "apiKey": "", "inputType": "evt", "logickiInterface": "", "ruleId": "", "deviceId": "ESP", "applicationId": "", "deviceType": "ESP8266", "eventType": "update", "commandType": "", "format": "json", "name": "Preuzmite podatke od ESP "," service ":" registered "," allDevices ": false," allApplications ":" "," allDeviceTypes ": false," allLogicalInterfaces ":" "," allEvents ": true," allCommands ":" ", "allFormats": false, "qos": 0, "x": 115, "y": 76, "žice":

Korak 9: Gotovi ste

Čestitamo! sada imate radni sistem za posmatranje biljaka.

Ako imate bilo kakvih pitanja, ne ustručavajte se kontaktirati nas!