תוכן עניינים:
- שלב 1: הגדרת פטל פטל
- שלב 2: הגדרת MySQL ב- Raspberry Pi
- שלב 3: הגדרת SensorBugs
- שלב 4: התקנת מעטפת ה- Python Bluetooth LE
- שלב 5: סרוק וגלה את הכתובת של SensorBug
- שלב 6: הוסף את סקריפט Python
- שלב 7: בדוק את סקריפט Python
- שלב 8: הוסף את ה- Scrip Python ל- Crontab
- שלב 9: תוספת: הגדר את SensorBug לפלט חישת מיקום
וִידֵאוֹ: צג והקליט טמפרטורה באמצעות Bluetooth LE ו- RaspberryPi: 9 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
מדריך זה עוסק כיצד להרכיב מערכת ניטור טמפרטורות מרובת צומתים עם באג חיישן Bluetooth LE מ- Blue Radios (BLEHome) ו- RaspberryPi 3B הודות לפיתוח תקן Bluetooth LE, קיימים כיום בשוק חיישנים אלחוטיים בעלי הספק נמוך. בעלות נמוכה מאוד ויכול לפעול על תא מטבע יחיד במשך חודשים בכל פעם. אחד החיישנים האלה שהרמתי הוא מהרדיו הכחול הנקרא Sensor Bugs. בעלות של כ -25 $ באמזון, זהו מכשיר Bluetooth LE עם חיישן טמפרטורה, חיישן אור ומצב אקסרומטר, כולם מובנים ליחידה קטנה שיכולה לתקשר באופן אלחוטי. זוהי התאמה מושלמת ל- Raspberry Pi 3B, הכוללת תמיכה מובנית ברדיו Bluetooth LE..
שלב 1: הגדרת פטל פטל
השלב הראשון הוא לקבל הגדרת Raspberry Pi עובדת. עקוב אחר ההוראות מאתר Raspberry Pi, טען את Raspbian בכרטיס SD, הכנס ל- Raspberry Pi והפעל אותו. הגדרתי את המערכת שלי עם גרסת Raspbian Stretch Lite (ללא GUI) בנובמבר 2017. הגדר WiFi במידת הצורך, אני מעדיף להתאים את אזור הזמן לאזור הזמן הנוכחי במקום UTC. אתה יכול לעשות זאת למרות שהפקודה: $ sudo dpkg-reconfigure tzdata מנוחה של ההוראה מניחה שההגדרה מתבצעת למרות ממשק שורת הפקודה.
שלב 2: הגדרת MySQL ב- Raspberry Pi
כדאי להתקין מסד נתונים מקומי לאחסון כל הנתונים שנתפסו. התקנת MySQL ב- Raspberry Pi היא קלה במיוחד. זה גם לא קשה לשנות את הסקריפט כדי להתחבר לשרת SQL באופן חיצוני, אתה יכול לדלג על שלב זה אם ברצונך להשתמש בשרת SQL ברשת. יש הרבה הוראות ברשת, אני מציע זאת: https:// www.stewright.me/2014/06/tutorial-install-…
לאחר התקנת שרת SQL, תוכל להשתמש בלקוח MySQL CLI ליצירת משתמש, מסד נתונים וטבלה. כדי להיכנס ל- MySQL CLI, השתמש בפקודה:
$ sudo mysql -uroot -p ראשית, צור משתמש מקומי להוספת נתונים שנתפסו:> צור משתמש 'datasrc'@'localhost' מזוהה על ידי 'datasrc000'; לאחר מכן צור מסד נתונים וטבלה:> CREATE DATABASE SensorBug; הגדרת המשתמש הרשאה:> להעניק את כל ההפרטים על SensorBug.* ל- 'datasrc'@'localhost'; כעת הוסף טבלה חדשה למסד הנתונים. בדוגמה זו, אני הולך להוסיף טבלה עם העמודות הבאות: DATE, TIME, ADDRESS, LOCATION, TEMPERATURE ו- ACCEROMETER
- DATE/TIME - זהו התאריך והשעה בהם הנתונים מוקלטים
- ADDRESS - זהו ה- MAC של SensorBug שההודעה נלכדת ממנו
- LOCATION - מחרוזת קריאה לאדם המציינת היכן נמצא החיישן
- טמפרטורה - זוהי הטמפרטורה המוקלטת
- ACCELE - זהו הערך של פלט מד התאוצה, שימושי להקלטת מיקום החיישן (אם מופעל)
הפקודה שעושה זאת היא:> USE SensorBug; > צור נתוני טבלה (תאריך DATE, שעה TIME, כתובת TINYTEXT, מיקום TINYTEXT, טמפרטורת FLOAT, accele INT); כעת מסד הנתונים מוכן, אנו יכולים להמשיך להגדרת ה- SensorBugs.
שלב 3: הגדרת SensorBugs
באגי החיישן הם מכשירים קטנים ומסודרים למדי. לרוע המזל, היצרן סיפק רק אפליקציית IOS לתכנותו. אף על פי כן, עדיין ניתן לעבוד איתו אם יש לכם רק מכשיר אנדרואיד. שלב ראשון, התאם את המכשיר עם טלפון. ללא התאמת המכשיר, SensorBug לא יפרסם נתונים. ניסיתי לבדוק אם אני יכול לעשות זאת ישירות עם RaspberryPi, למרבה הצער, נראה כי מנהל ההתקן של Bluetooth LE ב- RaspberryPi עדיין ניסיוני ומכיל באגים כדי למנוע את ההתאמה שלו עם מכשירי Bluetooth LE. גרסה עתידית של מנהל ההתקן blueZ עשויה לתקן זאת, אך כפי שנכתב כיום, אין דרך להתאים את SensorBug ל- RaspberryPi. למרבה המזל, איננו צריכים לשייך את המכשיר כדי ללכוד את הנתונים המפורסמים שלו. הדבר היחיד שאנחנו צריכים הוא טלפון כדי להגדיר את SensorBug. כברירת מחדל, SensorBug יתחיל לפרסם נתוני טמפרטורה במרווח של 1 שניות לאחר שיצמד למכשיר. לנתוני טמפרטורת לכידה, זה כל מה שצריך. אם אתה מתכוון להרחיב להשתמש במיקום או בחיישן האור, מהתצורה יהיה צורך במכשיר. בתור התחלה, נחבר את המכשיר ונתק. זה יהיה מספיק טוב למטרת לכידת טמפרטורה. התחל על ידי לחיצה על שני הכפתורים ב- SensorBug. הנורית הכחולה/ירוקה תהבהב, מה שמצביע על כך שהוא מופעל. לחץ על אחד הלחצנים, הנורית הירוקה אמורה להידלק, ציינו שהכוח מופעל. אם הנורית הירוקה אינה דולקת, לחץ על שני הכפתורים כדי לנסות להדליק את המכשיר שוב. לחץ והחזק את אחד הלחצנים עד שהנורית הכחולה תתחיל להבהב. זה יכניס את המכשיר למצב זוג. עבור לתפריט תצורה של Bluetooth בטלפון וחפש את מכשיר SensorBug. ברגע שהוא מופיע, בחר אותו כדי להתאים אותו עם המכשיר. זהו, כעת SensorBug מופעל ומפרסם את נתוני הטמפרטורה.
שלב 4: התקנת מעטפת ה- Python Bluetooth LE
לאחר מכן עלינו להתקין את הספרייה כדי שפייתון יכול לדבר עם ערימת Bluetooth LE. ניתן למצוא את ההוראה כאן: https://github.com/IanHarvey/bluepy עבור Python 2.7, זה פשוט כמו הזנת הפקודות הבאות:
$ sudo apt-get להתקין python-pip libglib2.0-dev $ sudo pip להתקין bluepy
שלב 5: סרוק וגלה את הכתובת של SensorBug
כדי לברר את כתובת MAC SensorBug, השתמש בפקודה זו: $ sudo hcitool lescan אתה אמור לראות פלט כמו:
EC: FE: 7E: 10: B1: 92 (לא ידוע) אם יש לך הרבה מכשירי Bluetooth LE בסביבה, יתכן שיהיה קשה לברר עם מי אתה מדבר. אתה יכול לנסות bluetoothctl שנותן פרטים נוספים:
$ sudo bluetoothctl [bluetooth]# סריקה ב- [NEW] מכשיר EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] Device EC: FE: 7E: 10: B1: 92 יצרן מפתח נתונים: 0x0085 [CHG] Device EC: FE: 7E: 10: B1: 92 ערך יצרן נתון ערך: 0x02 [CHG] מכשיר EC: FE: 7E: 10: B1: 92 ערך יצרן נתוני ערך: 0x00 [CHG] מכשיר EC: FE: 7E: 10: B1: 92 ערך נתוני יצרן: 0x3c [CHG] מכשיר EC: FE: 7E: 10: B1: 92 ערך יצרן נתוני ערך: 0x25 [CHG] מכשיר EC: FE: 7E: 10: B1: 92 ערך יצרן נתוני ערך: 0x09 [CHG] מכשיר EC: FE: 7E: 10: B1: 92 ערך יצרן נתוני: 0x41 [CHG] מכשיר EC: FE: 7E: 10: B1: 92 ערך נתוני יצרן: 0x02 [CHG] מכשיר EC: FE: 7E: 10: B1: 92 ערך יצרן: ערך ערך 0x02 [CHG] EC: FE: 7E: 10: B1: 92 ערך יצרן נתון ערך: 0x43 [CHG] מכשיר EC: FE: 7E: 10: B1: 92 ערך יצרן נתוני ערך: 0x0b [CHG] מכשיר EC: FE: 7E: 10: B1: 92 נתוני יצרן ערך: 0x01 [CHG] מכשיר EC: FE: 7E: 10: B1: 92 יצרן ערך נתונים: 0x6f
רשום את כתובת ה- MAC, יהיה עליך להזין את זה בתסריט הפייתון כדי לסנן התקני Bluetooth LE לא רצויים
שלב 6: הוסף את סקריפט Python
עותק של סקריפט Python זמין מ:
drive.google.com/open?id=10vOeEAbS7mi_eXn_…
להלן אותו קובץ, הקפד על הכניסה בעת ההעתקה:
כמו כן, עדכן את כתובת ה- MAC בקובץ הפייתון כך שיתאים לכתובת החיישן המתקבלת מתוצאת הסריקה.
# תוכנית זו היא תוכנה חינמית: אתה יכול להפיץ אותה מחדש ו/או לשנות
# זה תחת התנאים של רישיון הציבור הכללי של GNU כפי שפורסם על ידי
# קרן התוכנה החופשית, גרסה 3 של הרישיון, או
# (לבחירתך) כל גרסה מאוחרת יותר.
#
# תוכנית זו מופצת בתקווה שהיא תהיה שימושית, # אך ללא אחריות כלשהי; בלי אפילו האחריות המשתמעת של
# סחירות או התאמה למטרה מיוחדת. ראה את
# רישיון ציבורי כללי של GNU לפרטים נוספים.
#
# היית צריך לקבל עותק של הרישיון הציבורי הכללי של GNU
# יחד עם תוכנית זו. אם לא, ראה.
# bscan.py - סורק LE Bluetooth פשוט וחולץ נתונים פשוט
מסורק יבוא bluepy.btle, DefaultDelegate
זמן יבוא
יבוא pymysql
מבנה יבוא
hostname = 'localhost'
שם משתמש = 'datasrc'
password = 'datasrc000'
database = 'SensorBug'
#הזן את כתובת ה- MAC של החיישן מהסקאן
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92", "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["מוסך", "חיצוני"]
class DecodeErrorException (חריגה):
def _init _ (עצמי, ערך):
ערך עצמי.ערך
def _str _ (עצמי):
החזר repr (ערך עצמי)
class ScanDelegate (DefaultDelegate):
def _init _ (עצמי):
Default.elegate._ init _ (עצמי)
def handleDiscovery (self, dev, isNewDev, isNewData):
אם הוא NewDev:
- "מכשיר שהתגלה", dev.addr
elif isNewData:
- "התקבל נתונים חדשים מ-", dev.addr
def doQueryInsert (conn, addr, loc, temp, accero):
טבלת #blesensor היא תאריך, שעה, כתובת, מיקום, טמפ ', עלות
cur = conn.cursor ()
dostr = 'הכנס לנתוני VALUES (CURRENT_DATE (), NOW (), %s, %s, %s, %s);'
cur.execute (dostr, (addr, loc, temp, accero))
conn.commit ()
סורק = סורק (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (מארח = שם מארח, משתמש = שם משתמש, passwd = סיסמה, db = מסד נתונים)
ManuDataHex =
ReadLoop = נכון
לְנַסוֹת:
בעוד (ReadLoop):
מכשירים = scanner.scan (2.0)
ManuData = ""
להתקנים בהתקנים:
ערך = 0
AcceroData = 0
AcceroType = 0
TempData = 0
עבור saddr ב- SENSOR_ADDRESS:
ערך += 1
אם (dev.addr == saddr):
הדפס "התקן %s (%s), RSSI = %d dB" %(dev.addr, dev.addrType, dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [ערך -1]
עבור (adtype, desc, value) ב- dev.getScanData ():
הדפס " %s = %s" %(desc, value)
if (desc == "יצרן"):
ManuData = ערך
if (ManuData == ""):
- הדפסה "לא התקבלו נתונים, סיום פענוח"
לְהַמשִׁיך
#print ManuData
עבור i, j ב- zip (ManuData [:: 2], ManuData [1:: 2]):
ManuDataHex.append (int (i+j, 16))
#התחל בפענוח נתוני היצרן הגולמיים
אם ((ManuDataHex [0] == 0x85) ו- (ManuDataHex [1] == 0x00)):
הדפס "בית כותרת 0x0085 נמצא"
אַחֵר:
- "בית הכותרת 0x0085 לא נמצא, עצירת פענוח"
לְהַמשִׁיך
#דילוג על סרן/קטין
#אינדקס 5 הוא 0x3c, ציין את רמת הסוללה והגדרת מספר #
אם (ManuDataHex [4] == 0x3c):
BatteryLevel = ManuDataHex [5]
ConfigCounter = ManuDataHex [6]
idx = 7
#print "TotalLen:" + str (len (ManuDataHex))
בעוד (idx <len (ManuDataHex)):
#print "Idx:" + str (idx)
#print "Data:" + hex (ManuDataHex [idx])
אם (ManuDataHex [idx] == 0x41):
#נתוני מד צעדים
idx += 1
AcceleroType = ManuDataHex [idx]
AcceleroData = ManuDataHex [idx+1]
idx += 2
elif (ManuDataHex [idx] == 0x43):
#נתוני טמפרטורה
idx += 1
TempData = ManuDataHex [idx]
TempData += ManuDataHex [idx +1] * 0x100
TempData = TempData * 0.0625
idx += 2
אַחֵר:
idx += 1
- הדפס "כתובת מכשיר:" + CurrentDevAddr
- הדפס "מיקום המכשיר:" + CurrentDevLoc
הדפס "רמת סוללה:" + str (BatteryLevel) + "%"
הדפס "מונה תצורה:" + str (ConfigCounter)
הדפס "נתוני Accelero:" + hex (AcceleroType) + "" + hex (AcceleroData)
הדפס "נתוני טמפ ':" + str (TempData)
doQueryInsert (myConnection, CurrentDevAddr, CurrentDevLoc, TempData, AcceleroData)
ReadLoop = שקר
למעט DecodeErrorException:
לַעֲבוֹר
שלב 7: בדוק את סקריפט Python
הסקריפט חייב להיות מופעל בשורש, כך:
$ sudo python bscan.py מכשיר שהתגלה ec: 6e: 7e: 10: b1: 92 מכשיר ec: 6e: 7e: 10: b1: 92 (ציבורי), RSSI = -80 dB Flags = 06 שירותי 16b לא שלמים = 0a18 יצרן = 850002003c25094102024309016f בית הכותרת 0x0085 נמצא כתובת המכשיר: ec: 6e: 7e: 10: b1: 92 מיקום המכשיר: רמת הסוללה של המוסך: 37% מונה התצורה: 9 נתוני Accero: 0x2 0x2 נתוני הטמפ ': 16.5625
שלב 8: הוסף את ה- Scrip Python ל- Crontab
סקריפט הפיתון חייב להיות מופעל בשורש, כך שאם ברצונך ללכוד את הנתונים באופן אוטומטי, יהיה עליך להוסיף אותו לקרונטב של השורש. בדוגמה זו, אני מריץ את התסריט כל 20 דקות השתמש בפקודה:
$ sudo crontab -e
# ערוך קובץ זה כדי להציג משימות שיופעלו על ידי cron.
# # כל משימה להריץ צריכה להיות מוגדרת באמצעות שורה אחת # המציינת עם שדות שונים מתי המשימה תופעל # ואיזו פקודה להפעיל עבור המשימה # # כדי להגדיר את הזמן ניתן לספק ערכים קונקרטיים למשך # דקה (מ '), שעה (ח), יום החודש (דום), חודש (שני), # ויום בשבוע (דאו) או השתמש ב- '*' בשדות אלה (עבור 'כל'). # # שים לב שמשימות יתחילו מבוסס על מערכת cron # מושג הדמון של זמן ואזורי זמן. # # פלט של עבודות crontab (כולל שגיאות) נשלח באמצעות # דוא ל למשתמש שאליו משתייך קובץ crontab (אלא אם ינותב מחדש). # # לדוגמה, תוכל להפעיל גיבוי של כל חשבונות המשתמש שלך # בשעה 5 בבוקר מדי שבוע עם: # 0 5 * * 1 tar -zcf /var/backups/home.tgz/home/ # # למידע נוסף עיין ב דפים ידניים של crontab (5) ו- cron (8) # # mh dom mon dow command 0 * * * * python /home/pi/bscan.py 20 * * * * python /home/pi/bscan.py 40 * * * * python /home/pi/bscan.py
זהו זה. סקריפט הפיתון יופעל במרווח קבוע ויקודד מחדש את הפלט למסד הנתונים של SQL
שלב 9: תוספת: הגדר את SensorBug לפלט חישת מיקום
אפשר להגדיר את SensorBug באנדרואיד עבור פלט חישת מיקום לחישת שינוי מיקום, מה שנקרא חיסכון בדלת המוסך, SensorBug יזהה אם המכשיר עומד זקוף או מונח שטוח. כאשר המכשיר שטוח, הערך שנרשם הוא 0x20 אם המכשיר עומד זקוף, הערך הוא 0x02 אין זה מבדיל אם מיקום X או Y למעלה, כל עוד ציר Z אינו למעלה או למטה. הדרך הקלה ביותר לעשות זאת היא באמצעות אפליקציית LightBlue. SensorBug אמור להופיע בתפריט הסריקה. בחר את המכשיר שברצונך להגדיר, עבור למאפייני GATT לתצורת מד תאוצה UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11
ראה תמונה: כתוב מחרוזת תצורה חדשה:
010d3f02020000002d00000002 קרא שוב את מחרוזת התצורה כדי לאשר את הכתיבה. זה מאפשר את מד התאוצה לחישת מיקום.
מוּמלָץ:
ניטור טמפרטורה ולחות באמצעות פטל פטל: 6 שלבים (עם תמונות)
ניטור טמפרטורה ולחות באמצעות פטל פטל: הקיץ מתקרב, וכאלה ללא מזגן צריכים להיות מוכנים לשלוט באווירה בתוך הבית באופן ידני. בפוסט זה, אני מתאר את הדרך המודרנית למדידת הפרמטרים החשובים ביותר לנוחות האדם: טמפרטורה ולחות. T
קריאת טמפרטורה באמצעות חיישן טמפרטורה LM35 עם Arduino Uno: 4 שלבים
קריאת טמפרטורה באמצעות חיישן טמפרטורה LM35 עם Arduino Uno: היי חברים במדריך זה נלמד כיצד להשתמש ב- LM35 עם Arduino. Lm35 הוא חיישן טמפרטורה שיכול לקרוא ערכי טמפרטורה מ -55 ° C עד 150 ° C. זהו מכשיר בעל 3 מסופים המספק מתח אנלוגי ביחס לטמפרטורה. היג
נקודת גישה ESP8266 NodeMCU (שרת אינטרנט) עבור שרת אינטרנט עם חיישן טמפרטורה DT11 והדפסת טמפרטורה ולחות בדפדפן: 5 שלבים
נקודת גישה ESP8266 NodeMCU (AP) עבור שרת אינטרנט עם חיישן טמפרטורה DT11 וטמפרטורת הדפסה ולחות בדפדפן: שלום חברים ברוב הפרויקטים בהם אנו משתמשים ב- ESP8266 וברוב הפרויקטים אנו משתמשים ב- ESP8266 כשרת אינטרנט כך שניתן יהיה לגשת לנתונים ב כל מכשיר באמצעות wifi על ידי גישה לשרת האינטרנט המתארח על ידי ESP8266 אך הבעיה היחידה היא שאנחנו צריכים נתב עובד עבור
מדחום בישול טמפרטורת בדיקת טמפרטורה ESP32 NTP עם תיקון Steinhart-Hart והתראת טמפרטורה .: 7 שלבים (עם תמונות)
מדחום בישול טמפרטורת בדיקת טמפרטורה ESP32 NTP עם תיקון Steinhart-Hart והתראת טמפרטורה .: עדיין במסע להשלמת " פרויקט הקרוב ", " ESP32 NTP טמפרטורת בדיקת טמפרטורה מד חום עם תיקון Steinhart-Hart והתראת טמפרטורה " הוא מדריך המראה כיצד אני מוסיף בדיקת טמפרטורה של NTP, piezo b
שלוט בארדואינו באמצעות סמארטפון באמצעות USB באמצעות אפליקציית Blynk: 7 שלבים (עם תמונות)
שליטה בארדואינו באמצעות סמארטפון באמצעות USB באמצעות אפליקציית Blynk: במדריך זה נלמד כיצד להשתמש באפליקציית Blynk ובארדואינו על מנת לשלוט במנורה, השילוב יהיה באמצעות יציאה טורית USB. מטרת ההוראה היא להראות את הפתרון הפשוט ביותר לשלוט מרחוק בארדואינו או ב