Tartalomjegyzék:

PInt@t10n: Intelligens növényfigyelő rendszer: 9 lépés
PInt@t10n: Intelligens növényfigyelő rendszer: 9 lépés

Videó: PInt@t10n: Intelligens növényfigyelő rendszer: 9 lépés

Videó: PInt@t10n: Intelligens növényfigyelő rendszer: 9 lépés
Videó: How To Fix Camera Photos Auto Rotate Problem Solve || Photo Apne Ap hi Ulte ho jate hai 2024, Július
Anonim
PInt@t10n: Intelligens növényfigyelő rendszer
PInt@t10n: Intelligens növényfigyelő rendszer

Ez a projekt az ibm iot felhő tesztjeként jött létre. Az esp-8266 segítségével adatokat küldünk és fogadunk az ibm felhőbe és onnan. Az esp és az ibm felhő közötti kommunikáció az MQTT -n keresztül történik.

Az összes adat kezelésére és a felhasználónak egy felhasználói felület bemutatására a node-red parancsot használjuk. Nagyon kezdőbarát.

A kezdéshez szüksége van:

  • ESP-8266
  • dht 11/22 hőmérséklet/nedvesség érzékelő
  • fényérzékeny dióda (fénymérés)
  • berregő
  • talajnedvesség érzékelő
  • ibm felhő fiók

Lépés: Csatlakoztassa az érzékelőket

Csatlakoztassa érzékelőit
Csatlakoztassa érzékelőit
Csatlakoztassa érzékelőit
Csatlakoztassa érzékelőit
Csatlakoztassa érzékelőit
Csatlakoztassa érzékelőit

Amint azt korábban említettük, az esp8266 -at fogjuk használni az érzékelő adatok olvasására és küldésére. Ebben az oktatóanyagban feltételezzük, hogy tudja, hogyan csatlakoztathatja érzékelőit a mikrovezérlőhöz. Azt is tudnia kell, hogyan kell feltölteni a kódot egy esp8266 -ra.

Az esp modellünknek csak egy analóg portja van, ezért úgy döntöttünk, hogy analóg információkat kapunk a fényérzékelőnkről, mert akkor nyomon követhetjük, hogy mennyi fényt kap a növény.

Minden más érzékelő digitálisan van csatlakoztatva. DHT11 érzékelőnk digitálisan küld adatokat, mi pedig a dht könyvtárat használjuk az érzékelők adatainak értelmezésére.

Fent talál egy kapcsolási rajzot az általunk használt érzékelőkhöz. De ne feledje, hogy az általunk használt érzékelők gyakran tartoznak egy modulhoz, így könnyedén csatlakoztathatja azt a mikrovezérlőhöz a diagramban szereplő összes extra ellenállás nélkül.

2. lépés: Kód

Ezt az arduino vázlatot használtuk. A kód működéséről akkor olvashat, ha elolvassa a megjegyzéseket.

#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 moisturPin 4 #define DHTType DHT11 DHT dht (DHTPin, DHTType); ESP8266WiFiMulti WiFiMulti; lebegési hőmérséklet = 0; úszó páratartalom = 0; logikai nedvesség = hamis; int light = 0; const char* ssid = STASSID; const char* jelszó = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; PubSubClient kliens (espClient); hosszú lastMsg = 0; char msg [50]; int érték = 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 MQT #define MQT #define MQTT_USER iot-2/evt/status/fmt/json "#define MQTT_TOPIC_DISPLAY" iot-2/cmd/update/fmt/json "#include" pitches.h "// jegyzetek a dallamban: // hang időtartama: 4 = negyedév jegyzet, 8 = nyolcadik hang stb.: int shortTone = 80; int longTone = 200; int standardDelay = 50; int delayBetweenBars = 50; void setup_wifi () {delay (10); // Kezdjük azzal, hogy csatlakozunk egy WiFi hálózathoz Serial.println (); Serial.print ("Csatlakozás"); Soros.println (ssid); WiFi.begin (ssid, jelszó); while (WiFi.status ()! = WL_CONNECTED) {delay (500); Soros.nyomtatás ("."); } Soros.println (""); Serial.println ("WiFi csatlakoztatva"); Serial.println ("IP -cím:"); Serial.println (WiFi.localIP ()); } void callback (char* topic, byte* payload, unsigned int length) {Serial.print ("Üzenet érkezett ["); Sorozat.nyomat (téma); Serial.print ("]"); for (int i = 0; i <length; i ++) {Serial.print ((char) payload ); } Sorozat.println (); StaticJsonDocument jsonBuffer; deserializeJson (jsonBuffer, hasznos terhelés); JsonObject root = jsonBuffer.as (); if (root ["dal"] == "darude") {darude (); } if (root ["song"] == "starwars") {starwars (); } if (root ["dal"] == "jacques") {Serial.println ("jakakakakakkakakaka"); jacques (); }} void reconnect () {// Loop, amíg újra nem kapcsolódunk, amíg (! client.connected ()) {Serial.print ("MQTT kapcsolat megkísérlése…"); // Csatlakozási kísérlet, ha (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) {Serial.println ("connected"); client.subscribe (MQTT_TOPIC_DISPLAY); } else {Serial.print ("nem sikerült, rc ="); Serial.print (kliens.állapot ()); Serial.println ("próbálja újra 5 másodperc múlva"); // Várjon 5 másodpercet a késleltetés újrapróbálása előtt (5000); }}} void setup () {Serial.begin (9600); pinMode (páratartalom, INPUT); dht.begin (); pinMode (0, KIMENET); setup_wifi (); client.setServer (mqtt_server, MQTT_PORT); client.setCallback (visszahívás); késleltetés (20); } void loop () {if (! client.connected ()) {reconnect (); } client.loop (); nedvesség = digitalRead (kosteuspint); fény = analóg olvasat (A0); temp = dht.readTemperature (); páratartalom = dht.readHumidity (); Serial.println ("Hőmérséklet =" + String (temp, 1) + "\ nPáratartalom =" + String (páratartalom, 1) + "\ nPáratartalom:" + String (nedvesség) + "\ nFény:" + String (light)); String hasznos terhelés = "{" ts / ": {" t / ":"+String (temp, 1)+", \" h / ":"+String (páratartalom, 1)+"}, \" ms / ": {" m / ":"+String (nedvesség)+"}, \" ls / ": {" l / ":"+String (light)+"}}"; Serial.println (hasznos terhelés); if (client.publish (MQTT_TOPIC, (char*) payload.c_str ())) {Serial.println ("közzététel rendben"); } else {Serial.println ("közzététel sikertelen"); } késleltetés (2000); } void darude () {tone (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, longTone); késleltetés (longTone); noTone (0); delay (delayBetweenBars); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_D4, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_A3, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, longTone); késleltetés (longTone); noTone (0); delay (delayBetweenBars); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, longTone); késleltetés (longTone); noTone (0); delay (delayBetweenBars); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, shortTone); késleltetés (shortTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_B3, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); hang (0, NOTE_E4, longTone); késleltetés (longTone); noTone (0); késleltetés (standardDelay); } void starwars () {sípolás (NOTE_A4, 500); hangjelzés (NOTE_A4, 500); hangjelzés (NOTE_A4, 500); hangjelzés (NOTE_F4, 350); hangjelzés (NOTE_C5, 150); hangjelzés (NOTE_A4, 500); hangjelzés (NOTE_F4, 350); hangjelzés (NOTE_C5, 150); hangjelzés (NOTE_A4, 650); késleltetés (500); hangjelzés (NOTE_E5, 500); hangjelzés (NOTE_E5, 500); hangjelzés (NOTE_E5, 500); hangjelzés (NOTE_F5, 350); hangjelzés (NOTE_C5, 150); hangjelzés (NOTE_GS4, 500); hangjelzés (NOTE_F4, 350); hangjelzés (NOTE_C5, 150); hangjelzés (NOTE_A4, 650); } void beep (int note, int duration) {// Hangjelzés a buzzerPin hangon (0, jegyzet, időtartam); késleltetés (időtartam); noTone (0); késleltetés (standardDelay); } void heartOfCourage () {} void jacques () {sípolás (NOTE_C4, 500); sípolás (NOTE_D4, 500); hangjelzés (NOTE_E4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_C4, 500); sípolás (NOTE_D4, 500); hangjelzés (NOTE_E4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_E4, 500); sípolás (NOTE_F4, 500); hangjelzés (NOTE_G4, 500); hangjelzés (NOTE_E4, 500); sípolás (NOTE_F4, 500); hangjelzés (NOTE_G4, 500); hangjelzés (NOTE_G4, 500); hangjelzés (NOTE_A4, 500); hangjelzés (NOTE_G4, 500); sípolás (NOTE_F4, 500); hangjelzés (NOTE_E4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_G4, 500); hangjelzés (NOTE_A4, 500); hangjelzés (NOTE_G4, 500); sípolás (NOTE_F4, 500); hangjelzés (NOTE_E4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_G4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_C4, 500); hangjelzés (NOTE_G4, 500); hangjelzés (NOTE_C4, 500); }

3. lépés: IBM Cloud

IBM Cloud
IBM Cloud

Be kell állítania egy IBM-felhőpéldányt. Erről az alábbi linken találhat információt: github.

4. lépés: Node-RED

Az általános üzleti logikánk kezelésére és az adatok intuitív felhasználói felületen történő megjelenítésére csomópont-vöröset használunk.

5. lépés: Csomópont-Vörös beállítás: Világos

Csomópont-Vörös beállítás: Világos
Csomópont-Vörös beállítás: Világos

Importálja a következő kódot a projektbe.

[{"id": "deb0d57.1c46528", "type": "tab", "label": "Light", "disabled": false, "info": ""}, {"id": "8a0fcaac. 4e54 "," type ":" ibmiot in "," z ":" deb0d57.1c46528 "," authentication ":" bindService "," apiKey ":" "," inputType ":" evt "," logikaiInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Adatok beszerzése az ESP -ből", "service": "regisztrált", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 120, "y": 62, "Wire":

6. lépés: Csomópont-PIROS beállítás: Hőmérséklet

Csomópont-Vörös beállítás: Hőmérséklet
Csomópont-Vörös beállítás: Hőmérséklet

Importálja a következő kódot a projektbe.

[{"id": "fbad3799.f0e0e", "type": "tab", "label": "Temperature", "disabled": false, "info": ""}, {"id": "b8618eb9. 1c9288 "," type ":" ibmiot in "," z ":" fbad3799.f0e0e "," authentication ":" bindService "," apiKey ":" "," inputType ":" evt "," logikaiInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Adatok beszerzése az ESP -ből", "service": "regisztrált", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 145,5, "y": 49, "Wire":

7. lépés: Csomópont-Vörös beállítás: Páratartalom

Csomópont-Vörös beállítás: Páratartalom
Csomópont-Vörös beállítás: Páratartalom

Importálja a következő kódot a projektbe.

[{"id": "144cd53b.c00473", "type": "tab", "label": "Nedvesség", "letiltva": hamis, "info": ""}, {"id": "d958f58b. 2678e "," type ":" ibmiot in "," z ":" 144cd53b.c00473 "," authentication ":" bindService "," apiKey ":" "," inputType ":" evt "," logikaiInterface ":" "," ruleId ":" "," deviceId ":" ESP "," applicationId ":" "," deviceType ":" ESP8266 "," eventType ":"+"," commandType ":" "," format ": "json", "name": "Adatok beszerzése az ESP -ből", "service": "regisztrált", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 142, "y": 87, "Wire":

8. lépés: Node-RED Setup: Nedvesség

Node-RED Setup: Nedvesség
Node-RED Setup: Nedvesség

Importálja a következő kódot a projektbe.

[{"id": "4ee73536.ec6fc4", "type": "tab", "label": "Nedvesség", "kikapcsolva": hamis, "info": ""}, {"id": "a6daac3e. 2d5268 "," type ":" ibmiot out "," z ":" 4ee73536.ec6fc4 "," authentication ":" bindService "," apiKey ":" "," outputType ":" cmd "," deviceId ":" ESP "," deviceType ":" ESP8266 "," eventCommandType ":" update "," format ":" json "," data ":" msg "," qos ": 0," name ":" Parancs küldése az ESP -nek "," service ":" regisztrált "," x ": 804.1944580078125," y ": 383.0000305175781," Wire ": }, {" id ":" 4134fdb7.18e9b4 "," type ":" ibmiot in ", "z": "4ee73536.ec6fc4", "authentication": "bindService", "apiKey": "", "inputType": "evt", "logikaiInterface": "", "ruleId": "", "deviceId": "ESP", "applicationId": "", "deviceType": "ESP8266", "eventType": "update", "commandType": "", "format": "json", "name": "Get data from ESP "," service ":" regisztrált "," allDevices ": false," allApplications ":" "," allDeviceTypes ": false," allLogicalInterfaces ":" "," allEvents ": true," allCommands ":" ", "allFormats": hamis, "qos": 0, "x": 115, "y": 76, "vezetékek":

9. lépés: Kész

Gratulálunk! most már működik egy üzem megfigyelő rendszere.

Ha bármilyen kérdése van, ne habozzon kapcsolatba lépni velünk!