Sadržaj:

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

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

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

Ovaj je projekt 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čkom sučelju korisniku koristimo node-red. Vrlo je prilagođen početnicima.

Za početak trebate:

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

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. U ovom ćemo vodiču pretpostaviti da znate spojiti svoje senzore s mikrokontrolerom. Također već morate znati prenijeti 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: Kodiranje

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; temp. plovka = 0; vlažnost plovka = 0; booleova 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 #MkTeKonTeK #MkTeKonTK 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 bilješka, 8 = osma nota, itd.: int shortTone = 80; int longTone = 200; int standardnaOdgoda = 50; int delayBetweenBars = 50; void setup_wifi () {delay (10); // Počinjemo povezivanjem na WiFi mrežu Serial.println (); Serial.print ("Povezivanje s"); Serijski.println (ssid); WiFi.započni (ssid, lozinka); while (WiFi.status ()! = WL_CONNECTED) {odgoda (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi povezan"); Serial.println ("IP adresa:"); Serial.println (WiFi.localIP ()); } void povratni poziv (char* tema, bajt* korisni teret, duljina nepotpisanog inta) {Serial.print ("Poruka je stigla ["); Serial.print (tema); 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 dok se ponovno 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 ponovno 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 ()) {ponovno povezivanje (); } client.loop (); vlaga = digitalno čitanje (moisPin); svjetlo = analogno čitanje (A0); temp = dht.readTemperature (); vlažnost = dht.readHumidity (); Serial.println ("Temperatura =" + Niz (temp, 1) + "\ nVlažnost =" + Niz (vlažnost, 1) + "\ nVlaga:" + 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); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, longTone); odgoda (longTone); noTone (0); delay (delayBetweenBars); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, longTone); odgoda (longTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_E4, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_E4, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_E4, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_E4, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_E4, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_E4, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_E4, longTone); odgoda (longTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_D4, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_D4, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_D4, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_D4, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_D4, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_D4, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_D4, longTone); odgoda (longTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_A3, longTone); odgoda (longTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, longTone); odgoda (longTone); noTone (0); delay (delayBetweenBars); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, longTone); odgoda (longTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_E4, longTone); odgoda (longTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, longTone); odgoda (longTone); noTone (0); delay (delayBetweenBars); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, shortTone); odgoda (shortTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_B3, longTone); odgoda (longTone); noTone (0); kašnjenje (standardnaOdgoda); ton (0, NOTE_E4, longTone); odgoda (longTone); noTone (0); kašnjenje (standardnaOdgoda); } void starwars () {bip (NOTE_A4, 500); zvučni signal (NAPOMENA_A4, 500); zvučni signal (NAPOMENA_A4, 500); zvučni signal (NAPOMENA_F4, 350); zvučni signal (NAPOMENA_C5, 150); zvučni signal (NAPOMENA_A4, 500); zvučni signal (NAPOMENA_F4, 350); zvučni signal (NAPOMENA_C5, 150); zvučni signal (NAPOMENA_A4, 650); kašnjenje (500); zvučni signal (NAPOMENA_E5, 500); zvučni signal (NAPOMENA_E5, 500); zvučni signal (NAPOMENA_E5, 500); zvučni signal (NAPOMENA_F5, 350); zvučni signal (NAPOMENA_C5, 150); zvučni signal (NAPOMENA_GS4, 500); zvučni signal (NAPOMENA_F4, 350); zvučni signal (NAPOMENA_C5, 150); zvučni signal (NAPOMENA_A4, 650); } void beep (int note, int duration) {// Reproduciraj ton na zujaliciPin ton (0, nota, trajanje); kašnjenje (trajanje); noTone (0); kašnjenje (standardnaOdgoda); } void heartOfCourage () {} void jacques () {bip (NOTE_C4, 500); zvučni signal (NAPOMENA_D4, 500); zvučni signal (NAPOMENA_E4, 500); zvučni signal (NAPOMENA_C4, 500); zvučni signal (NAPOMENA_C4, 500); zvučni signal (NAPOMENA_D4, 500); zvučni signal (NAPOMENA_E4, 500); zvučni signal (NAPOMENA_C4, 500); zvučni signal (NAPOMENA_E4, 500); zvučni signal (NAPOMENA_F4, 500); zvučni signal (NAPOMENA_G4, 500); zvučni signal (NAPOMENA_E4, 500); zvučni signal (NAPOMENA_F4, 500); zvučni signal (NAPOMENA_G4, 500); zvučni signal (NAPOMENA_G4, 500); zvučni signal (NAPOMENA_A4, 500); zvučni signal (NAPOMENA_G4, 500); zvučni signal (NAPOMENA_F4, 500); zvučni signal (NAPOMENA_E4, 500); zvučni signal (NAPOMENA_C4, 500); zvučni signal (NAPOMENA_G4, 500); zvučni signal (NAPOMENA_A4, 500); zvučni signal (NAPOMENA_G4, 500); zvučni signal (NAPOMENA_F4, 500); zvučni signal (NAPOMENA_E4, 500); zvučni signal (NAPOMENA_C4, 500); zvučni signal (NAPOMENA_C4, 500); zvučni signal (NAPOMENA_G4, 500); zvučni signal (NAPOMENA_C4, 500); zvučni signal (NAPOMENA_C4, 500); zvučni signal (NAPOMENA_G4, 500); zvučni signal (NAPOMENA_C4, 500); }

Korak 3: Ibm oblak

Ibm oblak
Ibm oblak

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

Korak 4: Node-RED

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

Korak 5: Node-RED Setup: Svjetlo

Node-RED Setup: Svijetlo
Node-RED Setup: Svijetlo

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 "," logičko sučelje ":" "," 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 "," logičko sučelje ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Dobijte podatke iz 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šalji 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", "logičko sučelje": "", "praviloId": "", "deviceId": "ESP", "applicationId": "", "deviceType": "ESP8266", "eventType": "update", "commandType": "", "format": "json", "name": "Dohvati podatke from 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 sustav za promatranje biljaka.

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