תוכן עניינים:
וִידֵאוֹ: BBQ Pi (עם הדמיית נתונים!): 4 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:12
מבוא
ברביקיו מתייחס בדרך כלל לתהליך האיטי של שימוש בחום עקיף לבישול הבשרים האהובים עליכם. אף על פי ששיטת בישול זו פופולרית מאוד-במיוחד בארה ב-יש בה מה שחושבים כחולשה רצינית למדי: היא דורשת שעות של תשומת לב חצי צלולה כדי להשקיע אחר הטמפרטורה של הבור והמזון שלך. הזן: פטל פטל.
הפרויקט המקורי
ניתן למצוא את המקור המקורי לפרויקט זה כאן: https://old.reddit.com/r/raspberry_pi/comments/a0… עיקרו הוא כי משתמש reddit Product הצליח להעביר נתוני טמפרטורת מזון ובור מהזול יחסית., מדחומים אלחוטיים זמינים מסחרית ל- Raspberry Pi (שחיבר לסיכות ה- GPIO שלו מודול RF קטן). בפרויקט המקורי (המקושר למעלה) הנתונים של Product נשמרו במסד נתונים של sqlite ומוצגים באתר apache2 php המתארח באופן מקומי.
פתרון זה כבר פותר את הבעיה המקורית שבה נגעו בהקדמה של בלוג זה: כעת תוכל לעקוב אחר טמפרטורת האוכל והבור שלך מרחוק באמצעות דפדפן אינטרנט. אבל מה אם נרצה להרחיב בנושא? הזן: GridDB.
אספקה
פטל Pi4
מודול מקלט אלחוטי SUNKEE 433Mhz Superheterodyne
שלב 1: GridDB Web API ו- FluentD
כשראיתי את הפרויקט הזה, המחשבה הראשונה שלי - אחרי גל ההתרגשות הראשוני - הייתה לחשוב על דרכים להרחיב את הפונקציונליות. בעזרת GridDB ותוסף הגרפנה שלו, חיפשתי לדמיין את נתוני המזון והבורות שלי. מעבר לכך, רציתי להגדיר ביאורים של גרפנה כדי לחפש נקודות נתונים חריגות - לא יכול להיות שום בשר חרוך!
כדי להתחיל, הייתי צריך להשתמש בקוד C מהפרויקט המקורי כדי לקרוא את הנתונים שמגיעים ממדחום האלחוט ולפרסם נתונים אלה בשרת GridDB שלי. כדי להפעיל את זה, סובבתי שרת GridDB ב- Azure באמצעות מכונה וירטואלית של CentOS. הדרך הקלה ביותר לשתף נתונים ממכונת הקצה שלנו (Raspberry Pi) לשרת הענן שלנו הייתה באמצעות ממשק ה- GridDB Web. אז, ב- vm זה, הקמתי את WebAPI של GridDB יחד עם Fluentd והמחבר GridDB הנלווה אליו.
לפני ששלחתי נתונים למעשה לענן, הייתי צריך ליצור את הסכימה הבסיסית למכל ה- BBQ Pi שלי. מערך הנתונים שנכנס הוא פשוט ביותר: יש לנו שני חיישני טמפרטורה, מזהה בישול אחד, וכמובן חותמת הזמן. אז הסכימה שלנו נראית כך:
זמנים = gridstore.put_container ("bbqpi", [("זמן", griddb. GS_TYPE_TIMESTAMP), ("cookid", griddb. GS_TYPE_INT), ("probe1", griddb. GS_TYPE_INT), ("probe2", griddb. GS_TYPE_INT)], griddb. GS_CONTAINER_TIME_
ליצירת מיכל משך הזמן הזה, פשוט השתמשתי ב- WebAPI (יציאה 8080):
curl -X POST --basic -u admin: admin -H "סוג תוכן: יישום/json" -d
'{"container_name": "bbqpi", "container_type": "TIME_SERIES", / "keykey": true, "columns": [{"name": "time", "type": "TIMESTAMP"}, {"name": "cookid", "type": "INTEGER"}, {"name": "probe1", "type": "INTEGER"}, {"name": "probe2", "type": "INTEGER"}]} '\ https:// localhost: 8080/griddb/v2/defaultCluster/dbs/public/containers
כשהמיכל נוצר, הייתי צריך לנצל את Fluentd (יציאה 8888) כדי לפרסם נתונים אמיתיים במכולה שלנו. להלן פקודת CURL המפרסמת כמה נתוני דמה:
curl -X POST -d 'json = {"date": "2020-01-01T12: 08: 21.112Z", "cookid": "1", "probe1": "150", "probe2": "140" } 'https:// localhost: 8888/griddb
משם, הייתי צריך לצרף את הקוד המקורי כדי לשלוח בקשת HTTP POST בכל פעם שהפי שלנו קורא נתונים מהבור שלנו (בערך כל ~ 12 שניות).
הערה צדדית: כתיבת הקוד הזה לימדה אותי להעריך עד כמה שפת C יכולה להיות מפורטת:
int postData (זמן char , int cookid, int probe1, int probe2, char url )
{CURL *תלתל; CURLcode res; / * בחלונות, זה יתחיל את חומר winsock */ curl_global_init (CURL_GLOBAL_ALL); char errbuf [CURL_ERROR_SIZE] = {0,}; סוכן צ'ארם [1024] = {0,}; צ'אר ג'סון [1000]; snprintf (json, 200, "json = {" date / ": \"%s.112Z / ", \" cookid / ": \"%d / ", \" probe1 / ": \"%d / ", / "probe2 \": / "%d \"} ", time, cookid, probe1, probe2); / * קבל ידית תלתלים */ curl = curl_easy_init (); if (curl) { /* הגדר תחילה את כתובת האתר שעומדת לקבל את ה- POST שלנו. כתובת אתר זו יכולה באותה מידה להיות כתובת אתר https:// אם זה מה שצריך לקבל את הנתונים. */ snprintf (סוכן, סוכן גודל, "libcurl/%s", curl_version_info (CURLVERSION_NOW)-> גרסה); סוכן [sizeof סוכן - 1] = 0; curl_easy_setopt (curl, CURLOPT_USERAGENT, סוכן); curl_easy_setopt (curl, CURLOPT_URL, url); curl_easy_setopt (curl, CURLOPT_USERNAME, "מנהל"); curl_easy_setopt (curl, CURLOPT_PASSWORD, "admin"); curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt (curl, CURLOPT_POSTFIELDS, json); / * בצע את הבקשה, res יקבל את קוד ההחזרה */ res = curl_easy_perform (curl); if (res! = CURLE_OK) {size_t len = strlen (errbuf); fprintf (stderr, "\ nlibcurl: (%d)", res); if (len) fprintf (stderr, "%s%s", errbuf, ((errbuf [len - 1]! = '\ n')? "\ n": "")); fprintf (stderr, "%s / n / n", curl_easy_strerror (res)); ללכת לנקות; } ניקוי: curl_easy_cleanup (curl); curl_global_cleanup (); החזר 0; }}
כשהפונקציה הזו כתובה, הייתי צריך להפעיל אותה במקביל לפרסום נתוני sqlite:
אם (goodData == 1) {
if (last_db_write == 0 || (secs-last_db_write> = 10)) {snprintf (sql, 100, "הכנס לקריאות (cookid, time, probe1, probe2) ערכים (%d, '%s',%d, %d); ", cookID, buff, probe1, probe2); printf ("%s / n", sql); rc = sqlite3_exec (db, sql, callback, 0, & zErrMsg); if (rc! = SQLITE_OK) {printf ("שגיאת SQL: %s / n", zErrMsg); } אחר {last_db_write = שניות; } char url = "https://xx.xx.xx.xx: 8888/griddb"; postData (buff, cookID, probe1, probe2, url); }}
כדי לוודא שהנתונים שלך באמת מוכנסים לשרת שלך, תוכל להריץ את הפקודה הבאה כדי לבדוק את מסד הנתונים ולצפות בתוצאות:
curl -X POST --basic -u admin: admin -H "type content: application/json" -d '{"limit": 1000}' https:// localhost: 8080/griddb/v2/defaultCluster/dbs/ public/containers/bbqpi/lines
שלב 2: גרפנה
כשהקוד קיים, כעת כשאנחנו משתמשים בפורטל האינטרנט המקורי כדי להתחיל "טבח", נשמור בו זמנית את נתוני הטמפרטורה שלנו בשרת GridDB שלנו.
השלב הבא יהיה הדמיה של הנתונים שלנו באמצעות Grafana. לשם כך עקבנו אחר המידע מהבלוג הזה: כאן. הדבר הנחמד ביישום זה הוא שקל מאוד לראות את הנתונים שלנו מתואמים לתרשים נחמד. זה גם מוסיף ביאורים.
ההערות שנדונו בבלוג מקלות עלינו מאוד על ניטור כאשר משהו משתבש באוכל שלנו או בבור עצמו. במקרה שלי, בישלתי צלעות קצרות בקר. עם אלה, לא רציתי שהטמפרטורה בבור תעלה מעל 275 מעלות פרנהייט. אם הייתי רואה שהטמפרטורה חורגת מזה, יכולתי לכבות מבער ולאפשר לחום לטבול שוב:
היה לי כלל דומה לגבי החיישן בפועל שמירה על מעקב אחר האוכל עצמו: אם האוכל הגיע לטמפרטורה פנימית של 203 מעלות פרנהייט, הצלעות היו מוכנות. אתה יכול לראות את הביאור הבודד בסוף הטבח כאן:
בסך הכל, הטבח לקח לי רק בערך 4 שעות בערך, אבל התקנה כזו באמת הייתה מצטיינת אם הייתי מבשל משהו שהיה דורש אפילו יותר זמן בגריל (תחשוב על עשן איטי נמוך שנמשך ~ 12 שעה (ות). למרות זאת, אני מאמין שהערך אם הכלי הזה ניכר בקלות: היכולת לרשום את תוצאות המאכלים שלך ואז להשוות אותו לטבחים קודמים פירושה שהמנגל שלך לאט לאט ישתפר עם הזמן מכיוון שתוכל להשתמש בנתונים כדי לראות מה עובד ומה לא. לא.
שלב 3: האוכל
זו הייתה הפעם הראשונה שהכנתי צלעות קצרות בקר; לתיבול, פשוט השתמשתי במלח, פלפל שחור ואבקת שום. למרות כמה בעיות עם המבער שהגיע גבוה מדי בשביל קצת בהתחלה, הצלעות יצאו פנטסטיות. בבקשה תסתכל:
שלב 4: מסקנה
בסופו של דבר האוכל יצא נהדר, החיישנים, GridDB, וגרפנה עבדו כולם בקונצרט יפה, וקיבלנו נתונים יקרי ערך כיצד לבשל את הדברים האלה שוב בפעם הבאה שנרצה להרשים כמה חברים.
מוּמלָץ:
תוכנת הדמיית קוביות LED: 5 שלבים
תוכנת סימולציה של קוביות LED: כמעט סיימתי לבנות את קוביית ה- 8x8x8 שלי ואיתה הגיעה התוכנה הזו למחשב האישי! זה עוזר לך ליצור אנימציות ומדמה אותן במסך דו -ממדי לפני שהם מועלים לתלת -ממד. אין תמיכה (עדיין) בתקשורת באמצעות
כיצד להפוך לחות וטמפרטורה למקליט נתונים בזמן אמת באמצעות UNO Arduino וכרטיס SD - סימולציית רישום נתונים DHT11 בפרוטוס: 5 שלבים
כיצד להפוך לחות וטמפרטורה למקליט נתונים בזמן אמת באמצעות UNO Arduino וכרטיס SD | סימולציית רישום נתונים ב- DHT11 בפרוטוס: הקדמה: היי, זהו Liono Maker, הנה קישור ל- YouTube. אנו יוצרים פרויקט יצירתי עם Arduino ועובדים על מערכות מוטבעות. Data-Logger: לוגר נתונים (גם לוגר נתונים או מקליט נתונים) הוא מכשיר אלקטרוני המתעד נתונים לאורך זמן עם
רכישת נתונים ומערכת ויזואליזציית נתונים לאופנוע מירוץ חשמלי של MotoStudent: 23 שלבים
רכישת נתונים ומערכת ויזואליזציית נתונים לאופנוע מירוץ חשמלי של MotoStudent: מערכת רכישת נתונים היא אוסף של חומרה ותוכנה הפועלים יחד על מנת לאסוף נתונים מחיישנים חיצוניים, לאחסן ולעבד אותם לאחר מכן כך שניתן יהיה להמחיש אותם בצורה גרפית ולנתח אותם, המאפשר למהנדסים לבצע
הדמיית פנס חכם עם DragonBoard 410c: 7 שלבים (עם תמונות)
הדמיית פנס חכם עם DragonBoard 410c: | חומרים: MDF 1.20 Mts. x 1.20 מנורות .8 נוריות: · 2 ירוקים · 2 צהוב · 2 אדומים · 2 לבנים חתיכת קרטון אחת. דרגון לוח 410c להב חוטים אקדח סיליקון סיליקון רכב צעצוע פרוטובור לחצן לחיצה אינפרא אדום
רמקול Bluetooth לשולחן העבודה עם הדמיית שמע, לחצני מגע ו- NFC: 24 שלבים (עם תמונות)
רמקול Bluetooth לשולחן עם ויזואליזציה של שמע, לחצני מגע ו- NFC: שלום לך! במדריך זה אני הולך להראות כיצד יצרתי את רמקול ה- Bluetooth השולחני הכולל הדמיה אודיו מדהימה עם כפתורי מגע ו- NFC. ניתן לשדך בקלות למכשירי NFC מופעלים בלחיצה אחת בלבד. אין כפתור פיזי