תוכן עניינים:

PInt@t10n: מערכת ניטור צמחים חכמה: 9 שלבים
PInt@t10n: מערכת ניטור צמחים חכמה: 9 שלבים

וִידֵאוֹ: PInt@t10n: מערכת ניטור צמחים חכמה: 9 שלבים

וִידֵאוֹ: PInt@t10n: מערכת ניטור צמחים חכמה: 9 שלבים
וִידֵאוֹ: ABS Module No Communication (2001 VW Passat 1.8T) 2024, יולי
Anonim
PInt@t10n: מערכת ניטור צמחים חכמה
PInt@t10n: מערכת ניטור צמחים חכמה

פרויקט זה נוצר כמבחן לענן ibm iot. אנו משתמשים ב- esp-8266 כדי לשלוח ולקבל נתונים אל הענן ibm וממנו. התקשורת בין ה- esp לענן ibm מתרחשת באמצעות MQTT.

כדי לטפל בכל הנתונים ולהציג בפני המשתמש ממשק משתמש אנו משתמשים בצומת אדום. זה מאוד ידידותי למתחילים.

כדי להתחיל אתה צריך:

  • Esp-8266
  • חיישן טמפ/לחות dht 11/22
  • דיודה רגישה (מדידת אור)
  • זַמזָם
  • חיישן לחות קרקע
  • חשבון ענן ibm

שלב 1: חבר את החיישנים שלך

חבר את החיישנים שלך
חבר את החיישנים שלך
חבר את החיישנים שלך
חבר את החיישנים שלך
חבר את החיישנים שלך
חבר את החיישנים שלך

כפי שהזכרנו קודם אנו הולכים להשתמש ב- esp8266 כדי לקרוא ולשלוח נתוני חיישנים. להדרכה זו אנו נניח שאתה יודע כיצד לחבר את החיישנים שלך לבקר המיקרו שלך. אתה גם כבר צריך לדעת איך להעלות קוד ל- esp8266.

לדגם ה- esp שלנו יש רק יציאה אנלוגית אחת אז בחרנו לקבל מידע אנלוגי מחיישן האור שלנו כי אז נוכל לעקוב אחר כמה אור הצמח מקבל.

כל שאר החיישנים מחוברים דיגיטלית. חיישן DHT11 שלנו שולח נתונים באופן דיגיטלי ואנו משתמשים בספריית dht לפרש את נתוני החיישנים.

למעלה תוכל למצוא תרשים מעגלים עבור החיישנים בהם השתמשנו. אך זכור כי החיישנים בהם השתמשנו מגיעים לעתים קרובות עם מודול כך שתוכל לחבר אותו בקלות לבקר המיקרו שלך ללא כל הנגדים הנוספים שכללנו בתרשים.

שלב 2: קוד

זהו מערכון הארדואינו בו השתמשנו. תוכל ללמוד כיצד עובד הקוד אם תקרא את ההערות.

#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; צף טמפ = 0; לחות צפה = 0; לחות בוליאנית = שקר; int אור = 0; const char* ssid = STASSID; const char* password = STAPSK; const char* mqtt_server = "cmfwqk.messaging.internetofthings.ibmcloud.com"; WiFiClient espClient; לקוח PubSubClient (espClient); long lastMsg = 0; הודעת char [50]; int int = 0; #define MQTT_HOST "cmfwqk.messaging.internetofthings.ibmcloud.com" #define MQTT_PORT 1883 #define MQTT_DEVICEID "d: cmfwqk: ESP8266: ESP" #define MQTT_UST "UD" #MFT_UST "Md_Token_MT #USD" #Token_MT #USD "#Token_MT #USD" iot-2/evt/status/fmt/json "#define MQTT_TOPIC_DISPLAY" iot-2/cmd/update/fmt/json "#include" pitches.h "// תווים במנגינה: // משך תווים: 4 = רבע פתק, 8 = פתק שמינית וכו ': int shortTone = 80; int longTone = 200; int standardDelay = 50; int delayBetweenBars = 50; void setup_wifi () {עיכוב (10); // אנו מתחילים בחיבור לרשת WiFi Serial.println (); Serial.print ("מתחבר אל"); Serial.println (ssid); WiFi.begin (ssid, סיסמא); בעוד (WiFi.status ()! = WL_CONNECTED) {עיכוב (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi מחובר"); Serial.println ("כתובת IP:"); Serial.println (WiFi.localIP ()); } callback בטל (char* topic, byte* payload, אורך int לא חתום) {Serial.print ("ההודעה הגיעה ["); Serial.print (נושא); Serial.print ("]"); for (int i = 0; i <length; i ++) {Serial.print ((char) מטען ); } Serial.println (); StaticJsonDocument jsonBuffer; deserializeJson (jsonBuffer, מטען); שורש JsonObject = jsonBuffer.as (); if (root ["שיר"] == "darude") {darude (); } if (root ["song"] == "starwars") {starwars (); } if (root ["song"] == "jacques") {Serial.println ("jakakakakakkakaka"); jacques (); }} בטל חיבור מחדש () {// לולאה עד שאנו מתחברים מחדש בזמן (! client.connected ()) {Serial.print ("מנסה חיבור MQTT …"); // ניסיון להתחבר אם (client.connect (MQTT_DEVICEID, MQTT_USER, MQTT_TOKEN)) {Serial.println ("מחובר"); client.subscribe (MQTT_TOPIC_DISPLAY); } אחר {Serial.print ("נכשל, rc ="); Serial.print (client.state ()); Serial.println ("נסה שוב בעוד 5 שניות"); // המתן 5 שניות לפני השהיית ניסיון חוזר (5000); }}}} הגדרת void () {Serial.begin (9600); pinMode (moistPin, INPUT); dht.begin (); pinMode (0, OUTPUT); setup_wifi (); client.setServer (mqtt_server, MQTT_PORT); client.setCallback (callback); עיכוב (20); } לולאת חלל () {אם (! client.connected ()) {התחבר מחדש (); } client.loop (); לחות = digitalRead (moistPin); light = analogRead (A0); temp = dht.readTemperature (); לחות = dht.readHumidity (); Serial.println ("טמפרטורה =" + מחרוזת (טמפ, 1) + "\ n לחות =" + מחרוזת (לחות, 1) + "\ n לחות:" + מחרוזת (לחות) + "\ n אור:" + מחרוזת (אור)); עומס מטען = "{" ts / ": {" t / ":"+מחרוזת (טמפ ', 1)+", \" h / ":"+מחרוזת (לחות, 1)+"}, \" ms / ": {" m / ":"+מחרוזת (לחות)+"}, \" ls / ": {" l / ":"+מחרוזת (אור)+"}}"; Serial.println (מטען); if (client.publish (MQTT_TOPIC, (char*) payload.c_str ())) {Serial.println ("פרסם בסדר"); } else {Serial.println ("הפרסום נכשל"); } עיכוב (2000); } voude darude () {tone (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, longTone); עיכוב (longTone); noTone (0); עיכוב (delayBetweenBars); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, longTone); עיכוב (longTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_E4, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_E4, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_E4, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_E4, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_E4, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_E4, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_E4, longTone); עיכוב (longTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_D4, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_D4, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_D4, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_D4, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_D4, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_D4, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_D4, longTone); עיכוב (longTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_A3, longTone); עיכוב (longTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, longTone); עיכוב (longTone); noTone (0); עיכוב (delayBetweenBars); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, longTone); עיכוב (longTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_E4, longTone); עיכוב (longTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, longTone); עיכוב (longTone); noTone (0); עיכוב (delayBetweenBars); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, shortTone); עיכוב (shortTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_B3, longTone); עיכוב (longTone); noTone (0); עיכוב (standardDelay); צליל (0, NOTE_E4, longTone); עיכוב (longTone); noTone (0); עיכוב (standardDelay); } חלקי כוכבים () {ביפ (NOTE_A4, 500); צפצוף (NOTE_A4, 500); צפצוף (NOTE_A4, 500); צפצוף (NOTE_F4, 350); צפצוף (NOTE_C5, 150); צפצוף (NOTE_A4, 500); צפצוף (NOTE_F4, 350); צפצוף (NOTE_C5, 150); צפצוף (NOTE_A4, 650); עיכוב (500); צפצוף (NOTE_E5, 500); צפצוף (NOTE_E5, 500); צפצוף (NOTE_E5, 500); צפצוף (NOTE_F5, 350); צפצוף (NOTE_C5, 150); צפצוף (NOTE_GS4, 500); צפצוף (NOTE_F4, 350); צפצוף (NOTE_C5, 150); צפצוף (NOTE_A4, 650); } ביפ חלל (int note, int int) {// צליל השמעה על צליל BuzzerPin (0, הערה, משך הזמן); עיכוב (משך); noTone (0); עיכוב (standardDelay); } void heartOfCourage () {} jacques void () {ביפ (NOTE_C4, 500); צפצוף (NOTE_D4, 500); צפצוף (NOTE_E4, 500); צפצוף (NOTE_C4, 500); צפצוף (NOTE_C4, 500); צפצוף (NOTE_D4, 500); צפצוף (NOTE_E4, 500); צפצוף (NOTE_C4, 500); צפצוף (NOTE_E4, 500); צפצוף (NOTE_F4, 500); צפצוף (NOTE_G4, 500); צפצוף (NOTE_E4, 500); צפצוף (NOTE_F4, 500); צפצוף (NOTE_G4, 500); צפצוף (NOTE_G4, 500); צפצוף (NOTE_A4, 500); צפצוף (NOTE_G4, 500); צפצוף (NOTE_F4, 500); צפצוף (NOTE_E4, 500); צפצוף (NOTE_C4, 500); צפצוף (NOTE_G4, 500); צפצוף (NOTE_A4, 500); צפצוף (NOTE_G4, 500); צפצוף (NOTE_F4, 500); צפצוף (NOTE_E4, 500); צפצוף (NOTE_C4, 500); צפצוף (NOTE_C4, 500); צפצוף (NOTE_G4, 500); צפצוף (NOTE_C4, 500); צפצוף (NOTE_C4, 500); צפצוף (NOTE_G4, 500); צפצוף (NOTE_C4, 500); }

שלב 3: ענן Ibm

Ibm Cloud
Ibm Cloud

עליך להתקין מופע של ענן IBM. תוכל למצוא מידע על כך באמצעות הקישור הזה: github.

שלב 4: צומת אדום

אנו משתמשים בצומת-אדום לטיפול בהיגיון העסקי הכללי שלנו ולחזות נתונים אלה בממשק משתמש אינטואיטיבי.

שלב 5: הגדרת צומת אדום: אור

הגדרת צומת אדום: אור
הגדרת צומת אדום: אור

ייבא את הקוד הבא לפרויקט שלך.

[{"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": "קבל נתונים מ- ESP", "service": "registered", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 120, "y": 62, "wires":

שלב 6: הגדרת צומת אדום: טמפרטורה

הגדרת צומת אדום: טמפרטורה
הגדרת צומת אדום: טמפרטורה

ייבא את הקוד הבא לפרויקט שלך.

[{"id": "fbad3799.f0e0e", "type": "tab", "label": "טמפרטורה", "מושבת": 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": "קבל נתונים מ- ESP", "service": "registered", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 145.5, "y": 49, "wires":

שלב 7: הגדרת צומת אדום: לחות

הגדרת צומת אדום: לחות
הגדרת צומת אדום: לחות

ייבא את הקוד הבא לפרויקט שלך.

[{"id": "144cd53b.c00473", "type": "tab", "label": "לחות", "מושבת": 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": "קבל נתונים מ- ESP", "service": "registered", "allDevices": false, "allApplications": "", "allDeviceTypes": false, "allLogicalInterfaces": "", "allEvents": true, "allCommands": "", "allFormats": "", "qos": 0, "x": 142, "y": 87, "wires":

שלב 8: הגדרת אדום צומת: לחות

הגדרת צומת אדום: לחות
הגדרת צומת אדום: לחות

ייבא את הקוד הבא לפרויקט שלך.

[{"id": "4ee73536.ec6fc4", "type": "tab", "label": "לחות", "מושבת": false, "info": ""}, {"id": "a6daac3e. 2d5268 "," type ":" ibmiot out "," z ":" 4ee73536.ec6fc4 "," authentication ":" boundService "," apiKey ":" "," outputType ":" cmd "," deviceId ":" ESP "," deviceType ":" ESP8266 "," eventCommandType ":" עדכון "," פורמט ":" json "," data ":" msg "," qos ": 0," name ":" שלח פקודה ל- ESP "," שירות ":" רשום "," 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": "עדכון", "commandType": "", "format": "json", "name": "קבל נתונים מ- ESP "," service ":" registered "," allDevices ": false," allApplications ":" "," allDeviceTypes ": false," allLogicalInterfaces ":" "," allEvents ": true," allCommands ":" ", "allFormats": false, "qos": 0, "x": 115, "y": 76, "wires":

שלב 9: סיימת

מזל טוב! כעת יש לך מערכת תצפית על מפעל עובד.

אם יש לך שאלה, אל תהסס לפנות אלינו!