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

עקוב אחר איכות האוויר באמצעות Grafana ו- Raspberry Pi: 7 שלבים
עקוב אחר איכות האוויר באמצעות Grafana ו- Raspberry Pi: 7 שלבים

וִידֵאוֹ: עקוב אחר איכות האוויר באמצעות Grafana ו- Raspberry Pi: 7 שלבים

וִידֵאוֹ: עקוב אחר איכות האוויר באמצעות Grafana ו- Raspberry Pi: 7 שלבים
וִידֵאוֹ: מעקב אחר שינויים בוורד 2024, יולי
Anonim
עקוב אחר איכות האוויר באמצעות Grafana ו- Raspberry Pi
עקוב אחר איכות האוויר באמצעות Grafana ו- Raspberry Pi

חיפשתי פרויקט IOT קטן וחבר המליץ לי לבדוק את ההדרכה הזו:

dzone.com/articles/raspberry-pi-iot-sensor…

אני ממליץ בחום לעקוב אחר ההדרכה להמשך בהגדרת פטל פטל לניטור. הדרכה זו תשלים שלבים נוספים בעיצוב מכשיר IoT פשוט המאפשר סובלנות לשגיאות גבוהה, וכן עד כמה שימושי יכול להיות Raspberry Pi כאשר הוא מזווג עם Arduino.

אני גם נכנס לאפקטיביות ולמגבלה מסוימת של דגמי MQ* של חיישני אוויר. חיישני MQ* זולים ויעילים למדי, וקלים מאוד להתקנה.

בסך הכל זה יעזור לך להתחיל בחיבור Arduino לאינטרנט בצורה הפשוטה ביותר האפשרית, וקובע את הדרך לשימוש במודולים של טביעת רגל קלה יותר (re: ESP8266).

תעשה חיים!

שלב 1: ציוד + התקנה

צִיוּד

  • Raspberry Pi עם Raspbian מותקן
  • ספק כוח פטל פטל
  • Arduino Uno/שווה ערך
  • זכר USB לזכר מסוג B לסוג A (אמור להגיע עם ה- Arduino שלך)
  • כל אחד מחיישני MQ* (השתמשתי ב- MQ-2, 4, 5 ו- 135)
  • חוטי מגשר שונים
  • מיני קרש לחם

להכין

הדרכה זו מיועדת כמבוא עדין לשימוש Arduino ו- Raspberry Pi - זה יעזור לדעת כיצד להשתמש במסוף לינוקס. עם זאת, אני לא מניח ניסיון רב בעבודה על Arduino או Raspberry Pi - כל מה שאתה באמת צריך הוא הציוד המסופק ויחס מוזר.

  • יהיה עליך להשלים את השלבים במדריך זה.
  • אני ממליץ לך להשתמש ב- Secure Shell (SSH) כדי להתממשק עם ה- Raspberry Pi, מכיוון שזה מאפשר לך להזין פקודות בקלות. החיבור באמצעות SSH שונה אם אתה משתמש ב- Windows, Linux או Mac. Linux ו- Mac די קלים לשימוש ביחס ל- ssh (הפקודה לפתיחת SSH היא ממש ssh). בדוק את Putty עבור Windows. אני ממליץ לך לבדוק את המסך כדרך לשמור על הפגישה שלך במהלך הפרויקט.
  • יהיה עליך גם להתקין את פייתון ב- Raspbian. כשסיימתי את השלבים האלה, עשיתי עותק של כרטיס SD ישן שהייתי מונח מפרוייקט קודם, שכבר הותקן בו פייתון. אם להפצת NOOBS/Raspbian שלך אין Python 3.7 ומעלה, בדוק את השלבים הבאים כדי לאסוף את פייתון מהמקור.
  • הכירו את git והתקינו אותה במידה והיא לא מותקנת כבר בהפצת ה- Raspbian שלכם.

שלב 2: הגדרת המעגל

הגדרת המעגל
הגדרת המעגל

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

הבאתי סכמטי שתוכל להשתמש בו כהפניה.

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

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

שלב 3: קוד Arduino והבהוב

בשלב הבא, נחבר את לוח ה- Arduino ל- Raspberry Pi. לפני שנעשה זאת, עלינו להבהב את ה- Arduino עם קוד כדי לקרוא את החיישן וכן להעביר נתוני חיישנים ל- Raspberry Pi. ניתן לעשות זאת בכל דרך שבה אתה בדרך כלל דוחף קוד ל- Arduino. השתמשתי בכלי צד שלישי מלבד ה- Arduino IDE - מכאן שאני כולל את ספריית ה- Arduino בחלקו העליון. זה לא הכרחי לפרויקטים אחרים.

בדוק את הקוד להעתקה/הדבקה בסוף סעיף זה.

מה הקוד עושה

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

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

הארדואינו, לאחר שקיבל בקשה לנתונים, יעצב את הפלט כפרמטר GET - זה קשור לשיטות HTTP והוא פשוט בחירה עיצובית. אם היית מתכנן סכימת תקשורת מארדואינו דרך Port Serial, אתה יכול בקלות ללכת על כל דבר אחר, כל עוד אתה מתכנן אותו כך שהנתונים יופרדו באופן סביר. בחרתי ב- GET מכיוון שהיא מוכרת וחזקה.

בדיקה פשוטה…

ברגע שהארדואינו מהבהב והקוד פועל, פתח את הצג הסידורי של Arduino IDE. אם תשלח את התו היחיד "H" (ודא את ההון שלו!) תקבל את מטען הנתונים. כל הכבוד, זה עובד!

מדגם, אספן א-סינכרוני של נתוני MQ-*

#לִכלוֹל
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int incomingByte;
הגדרת voids () {
pinMode (mq2, INPUT);
pinMode (mq4, INPUT);
pinMode (mq5, INPUT);
pinMode (mq135, INPUT);
Serial.begin (9600);
}
/* valuePrint מדפיס את הערך של תווית זו.
* יוצר תופעות לוואי בלבד.
*/
voidvaluePrint (תווית מחרוזת, קריאה int) {
Serial.print (תווית);
Serial.print ("=");
Serial.print (קריאה);
}
voidloop () {
// בדוק אם יש נתונים טוריים נכנסים:
אם (Serial.available ()> 0) {
// קרא את הבייט העתיק ביותר במאגר הטורי:
// "כאשר אתה מתקשר ל- Serial.read בייט מוסר ממאגר הקבלה ומוחזר לקוד שלך"
incomingByte = Serial.read ();
// אם מדובר ב- H (ASCII 72), קרא את הערכים ושלח אותם למארח הפטל.
// TODO: ודא שהמסר תמיד יהיה באותו אורך, בכל פעם
אם (incomingByte == 72) {
int mq2Reading = analogRead (mq2);
int mq4Reading = analogRead (mq4);
int mq5Reading = analogRead (mq5);
int mq135Reading = analogRead (mq135);
Serial.print ("?");
valuePrint ("mq2", mq2Reading);
Serial.print ("&");
valuePrint ("mq4", mq4Reading);
Serial.print ("&");
valuePrint ("mq5", mq5Reading);
Serial.print ("&");
valuePrint ("mq135", mq135Reading);
Serial.print ("\ n");
}
}
// קרא את הסידרה רק כל שנייה
עיכוב (1000);
}

הצג rawmain.cpp המתארח אצל ❤ על ידי GitHub

שלב 4: קוד פטל פטל

כעת לאחר שהגדרת את ה- Raspberry Pi לפי https://dzone.com/articles/raspberry-pi-iot-sensor…, כעת תוכל להריץ את קוד לקוח הפטל שישלח נתונים באמצעות MQTT למסד הנתונים שלנו, אשר גם הוא מתחבר לגראפנה.

  1. וודא שהפטל שלך מחובר לאינטרנט ולאחר מכן בצע פקודת gon clone להעתיק את כל הקוד ל- Raspberry Pi. הפקודה שלך תיראה קצת כמו:

    שיבוט git

  2. בתוך הטרמינל של הפטל פטל, בצע פקודת שינוי ספריית שינוי (cd) ל- "raspberry_client":

    cd raspberry_client.

  3. יהיה עליך להשתמש בסביבה וירטואלית*. פָּשׁוּט. לָרוּץ

    python3 -m venv env. פעולה זו תיצור סביבה וירטואלית בשם "env" בה נשתמש להתקנת תלות.

  4. כעת עלינו להיכנס לסביבה הווירטואלית שלנו. לָרוּץ:

    מקור env/bin/activ. כעת אתה מוכן להתקין את התלות של הפרויקט.

  5. בחבילה שזה עתה שיבוט יש קובץ בשם requirements.txt. פתח קובץ זה; תראה שאנחנו דורשים את חבילות paho-mqtt ו- pyserial, כמו גם את הגרסאות שלהם. אתה יכול להציג את תוכן הקובץ על ידי הפעלה

    דרישות חתול.טקסט. על מנת להתקין חבילות אלה, ru

    pip install -r requirements.txt.

  6. זה עוטף את התצורה.

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

מה הקוד עושה…

הקובץ client.py ייבא קבוצה פשוטה של ספריות, כולל החיישן הארדואינו שלנו. בפונקציה העיקרית נקבל את הערכים מהארדואינו, נפרסם את הנתונים לברוקר MQTT ולאחר מכן נרדם במשך 10 שניות.

הקובץ arduinosensor.py הוא קבוצה של שיטות עזר העוטפות את ספריית paho.mqtt, כמו גם מספקות סכימת תקשורת שימושית לתקשורת עם המטען של Arduino (ראה: parse_payload). כמובן שהקוד מצורף בסוף פרק זה.

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

מ- importlibimportimport_module
יבואנים
זמן יבוא
חיישני importarduinos
defmain ():
# לקוח מוגדר פתוח
start_time = time.time ()
whileTrue:
קריאה = arduinosensor.get_values (os.environ.get ('PORT', "/dev/ttyUSB0"))
arduinosensor.pub ("python_client", מטען = קריאה)
time.sleep (10.0- ((time.time () -start_time) %10.0))
if_name _ == "_ main_":
רָאשִׁי()

הצג rawclient.py המתארח אצל ❤ על ידי GitHub

שלב 5: לשים את הכל ביחד

הגדרנו את קוד פייתון פטל, והגדרנו את קוד הלקוח של Arduino. בואו נעבור לחיבור שני הישויות יחד.

ראשית, בואו נחבר את Arduino ונקבע את התצורה הנכונה:

  1. הפעל במסוף ה- Raspberry Pi שלך

    python -m serial.tools.list_ports. זה יפרט את כל יציאות ה- USB התומכות בתקשורת טורית.

  2. כעת, חבר את ה- Arduino שלך והמתן כשתי שניות עד שהפטל יזהה אותו. מקלידים פנימה

    python -m serial.tools.list_ports שוב יראה לך את היציאות שוב. ייתכן שתראה רישום נוסף - אם זה אכן המקרה, הרי שהערך החדש הזה הוא הערך שאליו הארדואינו שלך מחובר. סביר להניח שזה יהיה "/dev/ttyUSB0".

  3. נסה להריץ את קוד הפייתון בתוך הסביבה הווירטואלית שלך על ידי הפעלת python3.7 client.py. המתן מספר שניות (לכל היותר עשר) - אם אתה נתקל בחריג, פירוש הדבר שנצטרך לשנות את הערך עבור יציאת ה- com שלנו בפאי הפטל. אם אתה רואה שהקוד מדפיס שורה המתחילה ב- "נשלח בעקבות מטען: …" לאחר מכן, יהיה לך טוב להמשיך לשלב האחרון עם גרפנה. טיפ: הקפד לרוץ

    מסך -פייתון לפני שתפעיל את לקוח python, אחרת, כאשר תסיים את החיבור שלך ל- pi פטל שלך, תאבד את תוכנית הפייתון הפועלת שלך. מבחינה טכנית, אינך צריך להשתמש בקפידה ב"פייתון "כפרמטר האחרון, אך אני אוהב לתת שמות להפעלות המסך שלי בהתאם.

    1. על מנת לשנות את הערך ליציאת COM, יהיה עליך להגדיר משתנה סביבה לפני הפעלת הקוד. יהיה עליך לנסות זאת עבור כל ערך הפלט האפשרי שקיבלת בעת הפעלת python -m serial.tools.list_ports. לדוגמה, אם כמות הערכים שקיבלתי היו שניים והיו כדלקמן:

      • /dev/ttyUSB6
      • /dev/acm0

אז הפקודות שהייתי מריצה יהיו:

PORT = "/dev/ttyUSB6" python3.7 client.py, ואם זה לא היה עובד, הייתי הורס אחר כך

PORT = "/dev/acm0" python3.7 client.py

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

שלב 6: תצורה של Grafana וצפייה בלוח המחוונים

תצורה של Grafana וצפייה בלוח המחוונים
תצורה של Grafana וצפייה בלוח המחוונים

בסדר, אנחנו עכשיו במתחם האחרון! כעת נשתמש ב- Grafana ליצירת לוח מחוונים פשוט.

  1. התחבר למופע הגרפנה שלך. מכיוון שעשית את השלבים במאמר dzone המקורי, אתה אמור להיות מסוגל להיכנס עם משתמש מנהל המערכת שלך. קדימה והתחבר.
  2. בחלונית השמאלית, רחף מעל סמל "לוחות המחוונים" - ארבעת הריבועים. לחץ על "נהל".
  3. בדף החדש לחץ על "לוח מחוונים חדש". בהמשך, לחץ על "הוסף לוח חדש".
  4. זה פותח את עורך הגרפנה. ניצור תצוגה פשוטה המציגה מדד אחד.

    1. בחלונית הימנית, שנה את כותרת הלוח למשהו משמעותי, כגון "קריאות מטבח". תוכל גם להזין תיאור אופציונלי.
    2. בפינה השמאלית התחתונה, "שאילתה", נוסיף סדרת זמן אחת. גרפנה באמת זורחת כאן מכיוון שאנו יכולים ליצור בקלות הצהרות SQL בעזרת ממשק מבוסס קליק. תחת "ברירת מחדל", בחר ב- InfluxDB.
    3. כעת, לקריאת "A" - בסעיף FROM, בחר מדידה "airtestt". אם תסתכל על קוד הפיתון המקורי בפונקציה get_values של arduinosensor.py, תראה שאנחנו מגדירים את הטבלה airtestt הזו בתוך הקוד.
    4. לדוגמא, נלך לסעיף "SELECT" ובחר בשדה (mq4). במקור לוח המחוונים שלנו ייתן לנו את האפשרות "mean ()" - לחץ על בחירה זו ובחר "הסר". לאחר מכן, לחץ על סימן הפלוס ותחת "צבירות" בחר "נבדל ()". זה יראה נקודות זמן ספציפיות. אנו יכולים לבחור אמצעים אחרים אך לעת עתה, הפאנל שלנו יציג קריאות מובחנות מ- mq4.
    5. לחץ על שמור בצד ימין למעלה, וסיימת!

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

שלב 7: סיום

לעטוף
לעטוף

במדריך זה הצלחתם להקים רשת MQTT חזקה המורכבת מצומת ומתווך יחיד. הצלחת גם לדמיין את נתוני IOT שלך באמצעות Grafana. לבסוף, הצלחתם להרכיב את ארכיטקטורת המערכת הפשוטה הזו (בתקווה) מהנוחות של הדפדפן והמחשב האישי שלכם באמצעות חיבור SSH.

יש דברים שאולי נרצה לשפר.

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

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

קריאות נוספות:

מוּמלָץ: