תוכן עניינים:
וִידֵאוֹ: RuuviTag ו- PiZero W ו- Blinkt! מד חום מבוסס משואות Bluetooth: 3 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
מדריך זה מתאר גישה לקריאת נתוני טמפרטורה ולחות מ- RuuviTag באמצעות Bluetooth עם Raspberry Pi Zero W ולהצגת הערכים במספרים בינאריים על בלינק של Pimoroni! או בקיצור: איך לבנות מצב חדיש ומד חום קצת חנון.
RuuviTag הוא מגדלור חיישן קוד פתוח של Bluetooth שמגיע עם חיישני טמפרטורה/לחות/לחץ והתאמה, אך עשוי גם לשמש כמגדלור קרבה רגיל של Eddystone ™/iBeacon. זה היה פרויקט קיקסטארטר בהצלחה רבה וקיבלתי את שלי לפני מספר שבועות. יש Github עם תוכנת פייתון לקריאת RuuviTag באמצעות פטל, והשתמשתי באחת הדוגמאות שלהם, עם כמה תוספות.
ה- Raspberry Pi Zero W הוא החבר האחרון במשפחת RPi, בעצם Pi Zero עם Bluetooth ו- WLAN נוסף.
החושך! pHAT מפימורוני הוא בעצם רצועה של שמונה נוריות RBG המוגדרות ככובע עבור ה- Raspberry Pi. הוא מאוד קל לשימוש ומגיע עם ספריית פייתון. הרעיון היה לקרוא את הנתונים מ- RuuviTag ולהציג אותם באמצעות בלינק! כּוֹבַע. הערכים מוצגים כמספרים בינאריים באמצעות 7 מנורות הלדים, ואילו השמונה משמשת לציון אם מוצגים ערכי לחות או טמפרטורה (+/-/0).
שלב 1: הגדרת המערכת
התקנת המערכת קלה:- הפעל את RuuviTag (גרסת חיישן הטמפרטורה RuuviTag).
- הגדר את ה- RPi Zero W, RPi3 או כל RPi אחר עם קיבולת בלוטות 'נוסף, בהתאם להנחיות באתר www.raspberrypi.org.
- הניחו את הבלינקט! כובע על ה- RPi (כשהוא כבוי).
- התקן את blinkt! ותוכנת RuuviTag, כפי שמצוין בדפי GitHub המתאימים.
- כעת עליך לזהות את כתובת ה- MAC של RuuviTag שלך
- העתק את תוכנית Python המצורפת, פתח אותה עם IDLE עבור Python 3
- שנה את כתובת ה- MAC של RuuviTag לשלך, ולאחר מכן שמור והפעל את התוכנית.
- אל תהסס לשנות ולייעל את התוכנית. התוכנית מגיעה כפי שהיא, לשימוש על אחריותך בלבד, לא תישא אחריות בגין כל נזק.
שלב 2: המכשיר והתוכנית
כפי שהוזכר לעיל, הרעיון היה לבנות מערכת פשוטה וזולה לקריאת נתונים מהמשואה ולהצגת ערכים מספריים על הבלינקט! כובע, או רצועת לד דומה.
טווח הערכים של הטמפרטורה הנמדדת במערכת מבוססת RPi יהיה ברוב המקרים איפשהו בין - 50 ° C ל- +80 ° C, ללחות בין 0 ל -100%. אז תצוגה שיכולה לתת ערכים מ -100 עד +100 תספיק לרוב היישומים. ניתן להציג מספרים עשרוניים קטנים יותר מ -128 כמספרים בינאריים עם 7 סיביות (או נוריות). אז התוכנית לוקחת את ערכי הטמפרטורה והלחות מה- RuuviTag כמספרים "צפים" והופכת אותם למספרים בינאריים, שמוצגים לאחר מכן ב- blinkt !.
כצעד ראשון, המספר מעוגל, נותח אם הוא חיובי, שלילי או אפס, ולאחר מכן הופך למספר חיובי באמצעות "ABS". לאחר מכן המספר העשרוני הופך למספר בינארי בן 7 ספרות, בעצם מחרוזת של 0s ו- 1s, אשר מנותח ומוצג על 7 הפיקסלים האחרונים של בלינק!.
עבור ערכי טמפרטורה הפיקסל הראשון מציין אם הערך חיובי (אדום), אפס (מגנטה) או שלילי (כחול). הוא מציג את ערכי הלחות בירוק. כדי לפשט את האפליה בין ערכי הטמפרטורה והלחות הפיקסלים הבינארי נקבעים בלבן לטמפרטורה וצהוב ללחות. כדי לשפר את קריאת המספרים הבינאריים, פיקסל "0" אינו כבוי לחלוטין, אלא מוגדר חלש בהרבה מאשר במצב "1". כמו בלינק! הפיקסלים בהירים מאוד, אתה יכול להגדיר את הבהירות הכללית ולשנות את הפרמטר "בהיר"
התוכנית מציגה את הערכים וחלקי התהליך גם על המסך. בנוסף תמצא מספר הוראות הדפסה מושתקות (#). השארתי אותם, מכיוון שאתה עשוי למצוא אותם מועילים להבין את התהליך אם אינו מושתק.
הערכים עשויים להיות מאוחסנים גם בקובץ יומן.
שלב 3: קוד התוכנית
הקוד היה קצת באגים ואופטימיזציה. כעת תוכל למצוא את גרסה 3 (20_03_2017).
'תוכנית זו מיועדת לקריאת ערכי הטמפרטורה, הלחות והלחץ מהווים RuuviTag' 'ולהציג את ערכי הטמפרטורה והלחות כמספרים בינאריים על בלינק של פימורני! כּוֹבַע. '' '' הוא מבוסס על הדוגמה print_to_screen.py מספריית ruuvitag ב- github. '' דורש Pi Zero W, Pi 3 או כל RPi אחר המצויד ב- bluetooth ובכל הספריות הנדרשות. '
זמן יבוא
ייבא מערכת מאת datetime יבוא datetime
מאת ruuvitag_sensor.ruuvi יבוא RuuviTagSensor
מאת blinkt יבוא set_clear_on_exit, set_pixel, נקה, הצג
def temp_blinkt (bt):
# שגרה זו לוקחת את ערך הטמפרטורה ומציגה אותו כמספר בינארי ב- blinkt!
ברור ()
# צבע ועוצמה של פיקסלים "1": לבן
r1 = 64 g1 = 64 b1 = 64
#צבע ועוצמה של פיקסלים "0": לבן
r0 = 5 g0 = 5 b0 = 5
# לעגל ולהמיר למספר שלם
r = עגול (bt)
# vz מייצג סימן אלגברי לפיקסל מחוון
אם (r> 0): vz = 1 # elif חיובי (r <0): vz = 2 # שלילי אחר: vz = 0 # אפס # הדפס (vz) i = abs (r) # הדפסה (i)
# להפוך למספר בינארי מוחלט בן 7 ספרות
i1 = i + 128 # עבור i מביא למספר בינארי בן 8 ספרות המתחיל בהדפסה אחת (i1)
b = "{0: b}". פורמט (i1) # המרה לבינארית
# הדפסה (ב)
b0 = str (b) # להמיר למחרוזת
b1 = b0 [1: 8] #קטע ביט ראשון
print ("מספר בינארי:", b1)
# הגדר פיקסלים ב- blinkt!
# הגדר מספר בינארי
עבור h בטווח (0, 7): f = (h+1) אם (b1 [h] == "1"): set_pixel (f, r1, g1, b1) # print ("bit", h, " הוא 1, פיקסל ", f) אחר: set_pixel (f, r0, g0, b0) # print (" nil ")
# הגדר את פיקסל המחוון
אם (vz == 1): set_pixel (0, 64, 0, 0) # אדום לערכים חיוביים elif (vz == 2): set_pixel (0, 0, 0, 64) # כחול לערכים שליליים else: set_pixel (0, 64, 0, 64) # מגנטה אם אפס
הופעה()
# סוף temp_blinkt ()
def hum_blinkt (בה):
# זה לוקח את ערך הלחות ומציג אותו כמספר בינארי ב- blinkt!
ברור()
# צבע ועוצמה של פיקסלים "1": צהוב
r1 = 64 g1 = 64 b1 = 0
#צבע ועוצמה של "0" פיקסלים:
r0 = 5 g0 = 5 b0 = 0
# עגול והפך למספר שלם
r = עגול (bh)
# להפוך למספר בינארי מוחלט בן 7 ספרות i = abs (r) #print (i)
i1 = i + 128 # עבור i נותן מספר בינארי בן 8 ספרות המתחיל ב -1
# הדפסה (i1)
b = "{0: b}". פורמט (i1)
# הדפסה (ב)
b0 = str (b)
b1 = b0 [1: 8] #קטע ביט ראשון
print ("מספר בינארי:", b1)
# הגדר פיקסלים ב- blinkt!
# הגדר את המספר הבינארי לפיקסלים
עבור h בטווח (0, 7): f = (h+1) אם (b1 [h] == "1"): set_pixel (f, r1, g1, b1) אחר: # השתקה לנוריות ריקות set_pixel (f, r0, g0, b0) # השתקה לנורות LED ריקות
# הגדר את פיקסל המחוון
set_pixel (0, 0, 64, 0) # ירוק ללחות
הופעה()
# סוף hum_blinkt ()
set_clear_on_exit ()
# קריאת נתונים מה- RuuviTag
mac = 'EC: 6D: 59: 6D: 01: 1C' # שנה לכתובת ה- mac של המכשיר שלך
הדפס ('מתחיל')
חיישן = RuuviTagSensor (mac)
בעוד שזה נכון:
data = sensor.update ()
line_sen = str.format ('חיישן - {0}', mac)
line_tem = str.format ('טמפרטורה: {0} C', נתונים ['טמפרטורה']) line_hum = str.format ('לחות: {0} %', נתונים ['לחות']) line_pre = str.format ('לחץ: {0}', נתונים ['לחץ'])
הדפס()
# טמפרטורת תצוגה ב- blinkt! ba = str.format ('{0}', נתונים ['טמפרטורה']) bt = float (ba) הדפסה (bt, "Â ° C") temp_blinkt (bt) הדפסה ()
time.sleep (10) # טמפרטורת תצוגה במשך 10 שניות
# לחות תצוגה ב- blinkt!
bg = str.format ('{0}', נתונים ['לחות']) bh = float (bg) הדפסה (bh, " %") hum_blinkt (bh) הדפסה ()
# נקה מסך והדפס נתוני חיישן למסך
מערכת ההפעלה os.system ('נקה') הדפסה ('הקש Ctrl+C כדי לסיים. / n / n') הדפסה (str (datetime.now ())) הדפסה (line_sen) הדפסה (line_tem) הדפסה (line_hum) הדפסה (line_pre)) הדפס ('\ n / n / r …….')
# המתן מספר שניות והתחל מחדש
נסה: time.sleep (8) למעט KeyboardInterrupt: # כאשר נלחצים על Ctrl+C ביצוע הלולאה while הופסק הדפסה ('יציאה') ברור () הצג () הפסקה
מוּמלָץ:
מד חום אינפרא אדום מבוסס Arduino - מד חום מבוסס IR באמצעות Arduino: 4 שלבים
מד חום אינפרא אדום מבוסס Arduino | מד חום מבוסס IR באמצעות Arduino: היי חברים במדריך זה נכין מדחום ללא מגע באמצעות arduino. מכיוון שלפעמים הטמפרטורה של הנוזל/מוצק גבוהה מדי או נמוכה ואז קשה ליצור איתו קשר ולקרוא אותו הטמפרטורה אז בתרחיש זה
חיישן תנועה מבוסס PIR מבוסס Arduino: 4 שלבים
חיישן תנועה מבוסס PIR מבוסס Arduino: בעזרת פרויקט זה, אתה יכול לשלוט על המצב הגבוה והרגישות של PIR
מחולל מוזיקה מבוסס מזג אוויר (מחולל מידי מבוסס ESP8266): 4 שלבים (עם תמונות)
מחולל מוזיקה מבוסס מזג אוויר (מחולל מידי מבוסס ESP8266): היי, היום אסביר כיצד להכין מחולל מוזיקה קטן מבוסס מזג אוויר. ועוצמת אור. אל תצפה שהוא ייצור שירים שלמים או יתפתח אקורד
מנורת אזהרה של משואות סיבוביות מיני כפולות: 6 שלבים
מנורת אזהרה משואת סיבוב מיני כפולה: במדריך זה ניצור מנורת משואת מיני. אתה יודע, אחד מאותם מנורות סיבוב מיושנות שהן הדביקו ציוד בנייה לפני שנורות הלד התרחבו? כֵּן. אחד מאלה. זו תהיה פשוטה יחסית וקטנה
יחידת שלט רחוק מבוסס GSM/SMS מבוסס ארדואינו: 16 שלבים (עם תמונות)
יחידת שלט רחוק מבוסס GSM/SMS מבוסס ארדואינו:! ! ! הודעה ! ! ! מכיוון שמגדל הסלולר המקומי שודרג באזור שלי, אני כבר לא יכול להשתמש במודול GSM זה. המגדל החדש כבר לא תומך במכשירי 2G. לכן, אני כבר לא יכול לתת שום תמיכה בפרויקט זה. עם Wi