Përmbajtje:
- Hapi 1: Lidhni sensorët tuaj
- Hapi 2: Kodi
- Hapi 3: Ibm Cloud
- Hapi 4: Nyja-KUQ
- Hapi 5: Nyja-RED Setup: Light
- Hapi 6: Nyja-RED Setup: Temperatura
- Hapi 7: Nyja-RED Setup: Lagështia
- Hapi 8: Nyja-RED Setup: Lagështia
- Hapi 9: Ju jeni bërë
Video: PInt@t10n: Sistemi Smart i Monitorimit të Impiantit: 9 Hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:20
Ky projekt u krijua si një provë për cloud ibm iot. Ne përdorim një esp-8266 për të dërguar dhe marrë të dhëna në dhe nga reja ibm. Komunikimi midis esp dhe cloud ibm ndodh përmes MQTT.
Për të trajtuar të gjitha të dhënat dhe për t'i paraqitur përdoruesit një ndërfaqe përdoruesi, ne përdorim node-red. Friendlyshtë shumë miqësore për fillestarët.
Për të filluar ju duhet:
- Esp-8266
- sensori i temperaturës/lagështisë dht 11/22
- diodë fotosensitive (matja e dritës)
- zile
- sensori i lagështisë së tokës
- ibm llogari cloud
Hapi 1: Lidhni sensorët tuaj
Siç e përmendëm më parë, ne do të përdorim esp8266 për të lexuar dhe dërguar të dhëna të sensorit. Për këtë tutorial ne do të supozojmë se ju e dini se si t'i lidhni sensorët tuaj me mikrokontrolluesin tuaj. Ju gjithashtu tashmë duhet të dini se si të ngarkoni kodin në një esp8266.
Modeli ynë esp ka vetëm një port analog, kështu që ne zgjodhëm të marrim informacion analog nga sensori ynë i dritës, sepse atëherë mund të monitorojmë se sa dritë merr bima.
Të gjithë sensorët e tjerë janë të lidhur në mënyrë dixhitale. Sensori ynë DHT11 dërgon të dhëna në mënyrë dixhitale dhe ne përdorim bibliotekën dht për të interpretuar të dhënat e sensorëve.
Më sipër mund të gjeni një diagram qark për sensorët që kemi përdorur. Por ju lutemi mbani në mend se sensorët që kemi përdorur shpesh vijnë me një modul, në mënyrë që ta lidhni me mikrokontrolluesin tuaj pa të gjithë rezistencat shtesë që kemi përfshirë në diagram.
Hapi 2: Kodi
Ky është skica arduino që kemi përdorur. Ju mund të mësoni se si funksionon kodi nëse lexoni komentet.
#përfshi ArduinoJson.h #përfshijë DHT_U.h #përfshi DHT.h #përfshi ESP8266WiFi.h #përfshi ESP8266WiFiMulti.h #include PubSubClient.h
#define STASSID "ucll-projectweek-IoT" #define STAPSK "Foo4aiHa" #përcakto DHTPin 5 #përcakto lagështinëPin 4 #përcakto DHTType DHT11 DHT dht (DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; float temp = 0; lagështia notuese = 0; lagështi boolean = e rreme; int dritë = 0; const char* ssid = STASSID; const char* fjalëkalim = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; Klienti PubSubClient (espClient); e funditMsg = 0; msg msg [50]; vlera int = 0; #define MQTT_HOST "cmfwqk.messaging.internetofthings.ibmcloud.com" #define MQTT_PORT 1883 #define MQTT_DEVICEID "d: cmfwqk: ESP8266: ESP" #define MQTT_USER "MICde" MTQ "#TOQ" MYQ "#TOQ" #TOQ "MYQ" iot-2/evt/status/fmt/json "#define MQTT_TOPIC_DISPLAY" iot-2/cmd/update/fmt/json "#include" pitches.h "// shënime në melodi: // kohëzgjatja e shënimeve: 4 = e katërta shënim, 8 = shënim i tetë, etj.: int shortTone = 80; int longTone = 200; int standardVonesa = 50; int delayBetweenBars = 50; void setup_wifi () {vonesë (10); // Fillojmë duke u lidhur me një rrjet WiFi Serial.println (); Serial.print ("Lidhu me"); Serial.println (ssid); WiFi.filloni (ssid, fjalëkalim); ndërsa (WiFi.status ()! = WL_CONNECTED) {vonesë (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi i lidhur"); Serial.println ("Adresa IP:"); Serial.println (WiFi.localIP ()); } thirrje e pavlefshme e thirrjes (tema e char*, bajti* ngarkesa, gjatësia int e panënshkruar) {Serial.print ("Mesazhi mbërriti ["); Serial.print (tema); Serial.print ("]"); për (int i = 0; i <gjatësia; i ++) {Serial.print ((char) ngarkesa ); } Serial.println (); StaticJsonDocument jsonBuffer; deserializeJson (jsonBuffer, ngarkesë); Rrënja JsonObject = jsonBuffer.as (); if (rrënja ["kënga"] == "darude") {darude (); } if (rrënja ["këngë"] == "starwars") {starwars (); } if (rrënja ["kënga"] == "jacques") {Serial.println ("jakakakakakkakaka"); jacques (); }} void rilidhja () {// Lako derisa të rilidhemi ndërsa (! client.connected ()) {Serial.print ("Përpjekja për lidhje MQTT …"); // Përpjekja për t'u lidhur nëse (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) {Serial.println ("lidhur"); client.subscribe (MQTT_TOPIC_DISPLAY); } else {Serial.print ("dështoi, rc ="); Serial.print (client.state ()); Serial.println ("provo përsëri në 5 sekonda"); // Prisni 5 sekonda para se të provoni vonesën (5000); }}} void setup () {Serial.begin (9600); pinMode (lagështiaPin, HYRJA); dht.filloj (); pinMode (0, OUTPUT); setup_wifi (); client.setServer (mqtt_server, MQTT_PORT); client.setCallback (kthim në telefon); vonesa (20); } void loop () {if (! client.connected ()) {rilidheni (); } client.loop (); lagështi = digitalRead (lagështiPin); dritë = analogRead (A0); temp = dht.readTemperature (); lagështia = dht.readHumidity (); Serial.println ("Temperatura =" + Vargu (temperatura, 1) + "\ nPër lagështia =" + Vargu (lagështia, 1) + "\ n Lagështia:" + Vargu (lagështia) + "\ nDrita:" + Vargu (drita)); String payload = "{" ts / ": {" t / ":"+String (temp, 1)+", \" h / ":"+String (lagështia, 1)+"}, \" ms / ": {" m / ":"+Vargu (lagështia)+"}, \" ls / ": {" l / ":"+Vargu (drita)+"}}"; Serial.println (ngarkesa); if (client.publish (MQTT_TOPIC, (char*) payload.c_str ())) {Serial.println ("publiko në rregull"); } else {Serial.println ("publikimi dështoi"); } vonesa (2000); } void darude () {tone (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (vonesa standarde); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (vonesa standarde); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, longTone); vonesë (longTone); noTone (0); vonesë (delayBetweenBars); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (vonesa standarde); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, longTone); vonesë (longTone); noTone (0); vonesa (vonesa standarde); ton (0, NOTE_E4, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_E4, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); ton (0, NOTE_E4, shortTone); vonesë (shortTone); noTone (0); vonesa (vonesa standarde); ton (0, NOTE_E4, shortTone); vonesë (shortTone); noTone (0); vonesa (vonesa standarde); toni (0, NOTE_E4, shortTone); vonesë (shortTone); noTone (0); vonesa (vonesa standarde); ton (0, NOTE_E4, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_E4, longTone); vonesë (longTone); noTone (0); vonesa (vonesa standarde); toni (0, NOTE_D4, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_D4, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_D4, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); ton (0, NOTE_D4, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); ton (0, NOTE_D4, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_D4, shortTone); vonesë (shortTone); noTone (0); vonesa (vonesa standarde); toni (0, NOTE_D4, longTone); vonesë (longTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_A3, longTone); vonesë (longTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (vonesa standarde); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, longTone); vonesë (longTone); noTone (0); vonesë (delayBetweenBars); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (vonesa standarde); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (vonesa standarde); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, longTone); vonesë (longTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_E4, longTone); vonesë (longTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (vonesa standarde); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (vonesa standarde); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, longTone); vonesë (longTone); noTone (0); vonesë (delayBetweenBars); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, shortTone); vonesë (shortTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_B3, longTone); vonesë (longTone); noTone (0); vonesa (StandardDelay); toni (0, NOTE_E4, longTone); vonesë (longTone); noTone (0); vonesa (StandardDelay); } void starwars () {biep (NOTE_A4, 500); biep (NOTE_A4, 500); biep (NOTE_A4, 500); biep (NOTE_F4, 350); biep (NOTE_C5, 150); biep (NOTE_A4, 500); biep (NOTE_F4, 350); biep (NOTE_C5, 150); biep (NOTE_A4, 650); vonesë (500); biep (NOTE_E5, 500); biep (NOTE_E5, 500); biep (NOTE_E5, 500); biep (NOTE_F5, 350); biep (NOTE_C5, 150); biip (NOTE_GS4, 500); biep (NOTE_F4, 350); biep (NOTE_C5, 150); biep (NOTE_A4, 650); } bioid i pavlefshëm (int shënim, kohëzgjatje int) {// Luani tonin në tingullin e ziles (0, shënim, kohëzgjatje); vonesa (kohëzgjatja); noTone (0); vonesa (StandardDelay); } void heartOfCourage () {} void jacques () {biep (NOTE_C4, 500); biep (NOTE_D4, 500); biep (NOTE_E4, 500); biep (NOTE_C4, 500); biep (NOTE_C4, 500); biep (NOTE_D4, 500); biep (NOTE_E4, 500); biep (NOTE_C4, 500); biep (NOTE_E4, 500); biep (NOTE_F4, 500); biep (NOTE_G4, 500); biep (NOTE_E4, 500); biep (NOTE_F4, 500); biep (NOTE_G4, 500); biep (NOTE_G4, 500); biep (NOTE_A4, 500); biep (NOTE_G4, 500); biep (NOTE_F4, 500); biep (NOTE_E4, 500); biep (NOTE_C4, 500); biep (NOTE_G4, 500); biep (NOTE_A4, 500); biep (NOTE_G4, 500); biep (NOTE_F4, 500); biep (NOTE_E4, 500); biep (NOTE_C4, 500); biep (NOTE_C4, 500); biep (NOTE_G4, 500); biep (NOTE_C4, 500); biep (NOTE_C4, 500); biep (NOTE_G4, 500); biep (NOTE_C4, 500); }
Hapi 3: Ibm Cloud
Ju duhet të konfiguroni një shembull IBM-cloud. Ju mund të gjeni informacion në lidhje me këtë përmes kësaj lidhjeje: github.
Hapi 4: Nyja-KUQ
Ne përdorim nyjen e kuqe për të trajtuar logjikën tonë të përgjithshme të biznesit dhe për të vizualizuar këto të dhëna në një ndërfaqe intuitive të përdoruesit.
Hapi 5: Nyja-RED Setup: Light
Importoni kodin e mëposhtëm në projektin tuaj.
[{"id": "deb0d57.1c46528", "type": "tab", "label": "Light", "disabled": false, "info": ""}, {"id": "8a0fcaac. 4e54 "," type ":" ibmiot in "," z ":" deb0d57.1c46528 "," authentication ":" boundService "," apiKey ":" "," inputType ":" evt "," logicInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Merrni të dhëna nga ESP", "service": "regjistruara", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 120, "y": 62, "tela":
Hapi 6: Nyja-RED Setup: Temperatura
Importoni kodin e mëposhtëm në projektin tuaj.
[{"id": "fbad3799.f0e0e", "type": "tab", "label": "Temperatura", "disabled": false, "info": ""}, {"id": "b8618eb9. 1c9288 "," type ":" ibmiot in "," z ":" fbad3799.f0e0e "," authentication ":" boundService "," apiKey ":" "," inputType ":" evt "," logicInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Merrni të dhëna nga ESP", "service": "regjistruara", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 145.5, "y": 49, "telat":
Hapi 7: Nyja-RED Setup: Lagështia
Importoni kodin e mëposhtëm në projektin tuaj.
[{"id": "144cd53b.c00473", "type": "tab", "label": "Lagështia", "me aftësi të kufizuara": false, "info": ""}, {"id": "d958f58b. 2678e "," type ":" ibmiot in "," z ":" 144cd53b.c00473 "," authentication ":" boundService "," apiKey ":" "," inputType ":" evt "," logicInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Merrni të dhëna nga ESP", "service": "regjistruar", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 142, "y": 87, "tela":
Hapi 8: Nyja-RED Setup: Lagështia
Importoni kodin e mëposhtëm në projektin tuaj.
[{"id": "4ee73536.ec6fc4", "type": "tab", "label": "Lagështia", "me aftësi të kufizuara": false, "info": ""}, {"id": "a6daac3e. 2d5268 "," type ":" ibmiot out "," z ":" 4ee73536.ec6fc4 "," authentication ":" boundService "," apiKey ":" "," outputType ":" cmd "," deviceId ":" ESP "," deviceType ":" ESP8266 "," eventCommandType ":" përditësim "," format ":" json "," data ":" msg "," qos ": 0," name ":" Dërgo komandën në ESP "," service ":" regjistruar "," x ": 804.1944580078125," y ": 383.0000305175781," telat ": }, {" id ":" 4134fdb7.18e9b4 "," type ":" ibmiot in ", "z": "4ee73536.ec6fc4", "vërtetimi": "shërbimi i lidhur", "apiKey": "", "inputType": "evt", "logicInterface": "" "," ruleId ":" "," deviceId ": "ESP", "applicationId": "", "deviceType": "ESP8266", "eventType": "përditësim", "commandType": "", "format": "json", "name": "Merr të dhëna nga ESP "," service ":" regjistruar "," allDevices ": false," allApplications ":" "," allDeviceTypes ": false," allLogicalInterfaces ":" "", "allEvents": true, "allCommands": "", "allFormats": false, "qos": 0, "x": 115, "y": 76, "telat":
Hapi 9: Ju jeni bërë
Urime! tani keni një sistem vëzhgimi të impiantit që punon.
Nëse keni ndonjë pyetje, mos hezitoni të na kontaktoni!