جدول المحتويات:
- الخطوة 1: إعداد Raspberry Pi
- الخطوة 2: إعداد MySQL على Raspberry Pi
- الخطوة 3: إعداد SensorBugs
- الخطوة 4: تثبيت Bluetooth LE Python Wrapper
- الخطوة 5: امسح واكتشف عنوان SensorBug
- الخطوة 6: أضف نص بايثون
- الخطوة السابعة: اختبر نص بايثون
- الخطوة 8: أضف Python Scrip إلى Crontab
- الخطوة 9: إضافي: تكوين SensorBug لمخرجات استشعار الموضع
فيديو: مراقبة وتسجيل درجة الحرارة باستخدام Bluetooth LE و RaspberryPi: 9 خطوات (بالصور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:39
يدور هذا الدليل حول كيفية تجميع نظام مراقبة درجة الحرارة متعدد العقد مع خطأ مستشعر Bluetooth LE من Blue Radios (BLEHome) و RaspberryPi 3B بفضل تطوير معيار Bluetooth LE ، هناك الآن مستشعرات لاسلكية منخفضة الطاقة متوفرة في السوق بتكلفة منخفضة للغاية ويمكن تشغيلها على خلية عملة واحدة لعدة أشهر في كل مرة. أحد هذه المستشعرات التي التقطتها هو من Blue Radio يسمى Sensor Bugs. يكلف حوالي 25 دولارًا على Amazon ، وهو جهاز Bluetooth LE مزود بمستشعر درجة الحرارة ومستشعر الضوء ومقياس التسارع ، وكلها مدمجة في وحدة صغيرة يمكنها الاتصال لاسلكيًا ، وهذا تطابق مثالي لـ Raspberry Pi 3B ، الذي يدعم راديو Bluetooth LE.
الخطوة 1: إعداد Raspberry Pi
الخطوة الأولى هي الحصول على إعداد Raspberry Pi صالح للعمل. اتبع التعليمات الواردة من موقع Raspberry Pi على الويب ، وقم بتحميل Raspbian على بطاقة SD ، ثم أدخله في Raspberry Pi وقم بتشغيله ، وقم بإعداد نظامي باستخدام إصدار Raspbian Stretch Lite (بدون واجهة مستخدم رسومية) في نوفمبر 2017 ، قم بإعداد WiFi إذا لزم الأمر ، أفضل تعديل المنطقة الزمنية للمنطقة الزمنية الحالية بدلاً من التوقيت العالمي المنسق (UTC). يمكنك القيام بذلك من خلال الأمر: sudo dpkg-recfigure tzdataRest من التعليمات تفترض أن الإعداد قد تم من خلال واجهة سطر الأوامر.
الخطوة 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' IDENTIFYED BY 'datasrc000' ؛ بعد ذلك ، قم بإنشاء قاعدة بيانات وجدول:> إنشاء قاعدة بيانات SensorBug ؛ إعداد المستخدم إذن:> منح جميع الامتيازات في SensorBug. * إلى "datasrc" @ "localhost" ؛ أضف الآن جدولاً جديدًا إلى قاعدة البيانات. في هذا المثال ، سأضيف جدولًا يحتوي على الأعمدة التالية: التاريخ والوقت والعنوان والموقع ودرجة الحرارة و ACCEROMETER
- التاريخ / الوقت - هذا هو تاريخ ووقت تسجيل البيانات
- العنوان - هذا هو MAC الخاص بجهاز SensorBug الذي يتم التقاط الرسالة منه
- الموقع - سلسلة يمكن للبشر قراءتها للإشارة إلى مكان وجود المستشعر
- درجة الحرارة - هذه هي درجة الحرارة المسجلة
- ACCELE - هذه هي قيمة خرج مقياس التسارع ، وهي مفيدة لتسجيل موضع المستشعر (إذا تم تمكينه)
الأمر الذي يقوم بهذا هو:> USE SensorBug؛ > إنشاء بيانات الجدول (التاريخ التاريخ والوقت والوقت والعنوان TINYTEXT والموقع TINYTEXT ودرجة الحرارة FLOAT وتسريع INT) ؛ الآن قاعدة البيانات جاهزة ، يمكننا الانتقال إلى إعداد sensorBugs.
الخطوة 3: إعداد SensorBugs
تعد أخطاء المستشعر أجهزة صغيرة أنيقة جدًا. لسوء الحظ ، قدمت الشركة المصنعة تطبيق IOS فقط لبرمجته. على الإطلاق ، لا يزال من الممكن العمل معه إذا كان لديك جهاز Android فقط. الخطوة الأولى ، قم بإقران الجهاز بهاتف. بدون إقران الجهاز ، لن يعلن SensorBug عن البيانات. حاولت معرفة ما إذا كان بإمكاني القيام بذلك مباشرة مع RaspberryPi ، لسوء الحظ ، يبدو أن برنامج تشغيل Bluetooth LE على RaspberryPi لا يزال قيد التجربة ويحتوي على أخطاء لمنعه من الاقتران بأجهزة Bluetooth LE. قد يصلح الإصدار المستقبلي من برنامج التشغيل blueZ هذا ، ولكن مثل الكتابة الحالية ، لا توجد طريقة لإقران SensorBug مع RaspberryPi. لحسن الحظ ، لا نحتاج إلى إقران الجهاز لالتقاط بياناته المعلن عنها. الشيء الوحيد الذي نحتاجه هو هاتف لتهيئة SensorBug. بشكل افتراضي ، سيبدأ SensorBug في الإعلان عن بيانات درجة الحرارة بفاصل 1 ثانية بمجرد إقرانه بجهاز. لالتقاط بيانات درجة الحرارة ، هذا كل ما هو مطلوب. إذا كنت تخطط للتوسيع لاستخدام الموضع أو مستشعر الضوء ، فستكون هناك حاجة إلى تكوين الجهاز. بالنسبة للمبتدئين ، سنقوم بإقران الجهاز ونفصل الاتصال. سيكون هذا جيدًا بما يكفي لغرض التقاط درجة الحرارة ، ابدأ بالضغط على كلا الزرين الموجودين في SensorBug. سيومض مؤشر LED باللون الأزرق / الأخضر ، مما يشير إلى أنه قيد التشغيل. اضغط على أحد الأزرار ، يجب أن يضيء مؤشر LED الأخضر ، للإشارة إلى أن الطاقة قيد التشغيل. إذا لم يضيء مؤشر LED الأخضر ، فاضغط على كلا الزرين لمحاولة تشغيل الجهاز مرة أخرى ، ثم اضغط مع الاستمرار على أحد الأزرار حتى يبدأ مؤشر LED الأزرق في الوميض. سيؤدي هذا إلى وضع الجهاز في وضع الإقران ، انتقل إلى قائمة تكوين Bluetooth على الهاتف وابحث عن جهاز SensorBug. بمجرد ظهوره ، حدده لإقرانه بالجهاز ، هذا كل شيء ، الآن يتم تشغيل SensorBug ويعلن عن بيانات درجة الحرارة
الخطوة 4: تثبيت Bluetooth LE Python Wrapper
بعد ذلك ، نحتاج إلى تثبيت مكتبة python للتحدث إلى Bluetooth LE stack. يمكن العثور على التعليمات هنا: https://github.com/IanHarvey/bluepy بالنسبة إلى Python 2.7 ، الأمر بسيط مثل إدخال الأوامر التالية:
$ sudo apt-get install برنامج python-pip libglib2.0-dev $ sudo pip install bluepy
الخطوة 5: امسح واكتشف عنوان SensorBug
لمعرفة عنوان MAC الخاص بـ SensorBug ، استخدم هذا الأمر: sudo hcitool lescan $ يجب أن ترى الإخراج مثل:
EC: FE: 7E: 10: B1: 92 (غير معروف) إذا كان لديك الكثير من أجهزة Bluetooth LE ، فقد يكون من الصعب معرفة الجهاز الذي تتحدث إليه. يمكنك تجربة bluetoothctl الذي يعطي مزيدًا من التفاصيل:
$ sudo bluetoothctl [bluetooth] # scan on [جديد] الجهاز EC: FE: 7E: 10: B1: 92 SensorBug10B192 [CHG] الجهاز EC: FE: 7E: 10: B1: 92 مفتاح بيانات الشركة المصنعة: 0x0085 [CHG] الجهاز 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 ، يجب إدخاله في برنامج Python النصي لتصفية أجهزة Bluetooth LE غير المرغوب فيها
الخطوة 6: أضف نص بايثون
نسخة من نص بايثون متاح من:
drive.google.com/open؟id=10vOeEAbS7mi_eXn_…
هنا هو نفس الملف ، اعتن بالمسافة البادئة عند النسخ:
أيضًا ، قم بتحديث عنوان MAC في ملف python لمطابقة عنوان المستشعر الذي تم الحصول عليه من نتيجة الفحص.
# هذا البرنامج برنامج مجاني: يمكنك إعادة توزيعه و / أو تعديله
# بموجب شروط رخصة جنو العمومية كما تم نشرها بواسطة
# مؤسسة البرمجيات الحرة ، إما الإصدار 3 من الترخيص ، أو
# (حسب اختيارك) أي إصدار لاحق.
#
# يتم توزيع هذا البرنامج على أمل أن يكون مفيدا ،
# لكن دون أي ضمان ؛ حتى بدون الضمان الضمني لـ
# القابلية للتسويق أو الملاءمة لغرض معين. انظر
# رخصة جنو العمومية لمزيد من التفاصيل.
#
# يجب أن تكون قد تلقيت نسخة من رخصة جنو العمومية العامة
# مع هذا البرنامج. إذا لم يكن كذلك ، انظر.
# bscan.py - ماسح ضوئي بسيط لـ Bluetooth LE ومستخرج البيانات
من bluepy.btle استيراد الماسح ، مندوب افتراضي
وقت الاستيراد
استيراد pymysql
استيراد هيكل
اسم المضيف = "مضيف محلي"
اسم المستخدم = 'datasrc'
كلمة المرور = 'datasrc000'
قاعدة البيانات = 'SensorBug'
# أدخل عنوان MAC الخاص بالمستشعر من lescan
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92"، "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["مرآب" ، "خارجي"]
فئة DecodeErrorException (استثناء):
def _init _ (ذاتي ، قيمة):
self.value = القيمة
def _str _ (ذاتي):
عودة repr (self.value)
فئة ScanDelegate (مندوب افتراضي):
def _init _ (ذاتي):
المندوب الافتراضي._ init _ (ذاتي)
def handleDiscovery (self، dev، isNewDev، isNewData):
إذا كان NewDev:
طباعة "Discovered device" ، dev.addr
elif isNewData:
طباعة "تم استلام البيانات الجديدة من" ، dev.addr
def doQueryInsert (conn، addr، loc، temp، accero):
جدول #blesensor هو التاريخ ، الوقت ، العنوان ، الموقع ، درجة الحرارة ، أكيرو
cur = conn.cursor ()
dostr = 'أدخل في قيم البيانات (CURRENT_DATE () ، الآن () ،٪ s ،٪ s ،٪ s ،٪ s) ؛'
cur.execute (dostr، (addr، loc، temp، accero))
conn.commit ()
الماسح الضوئي = الماسح الضوئي (). مع المندوب (ScanDelegate ())
myConnection = pymysql.connect (المضيف = اسم المضيف ، المستخدم = اسم المستخدم ، passwd = كلمة المرور ، db = قاعدة البيانات)
ManuDataHex =
ReadLoop = صحيح
محاولة:
بينما (ReadLoop):
الأجهزة = scanner.scan (2.0)
ManuData = ""
للتطوير في الأجهزة:
دخول = 0
AcceroData = 0
نوع AcceroType = 0
TempData = 0
للسدر في 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"٪ (وصف ، قيمة)
إذا (وصف == "الشركة المصنعة"):
ManuData = القيمة
إذا (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 ، توقف فك التشفير"
استمر
# تخطي التخصص / الصغرى
#Index 5 هو 0x3c ، حدد مستوى البطارية والتكوين #
إذا كان (ManuDataHex [4] == 0x3c):
BatteryLevel = ManuDataHex [5]
ConfigCounter = ManuDataHex [6]
معرف x = 7
#print "TotalLen:" + str (len (ManuDataHex))
بينما (idx <len (ManuDataHex)):
#print "Idx:" + str (idx)
#print "البيانات:" + ست عشري (ManuDataHex [idx])
إذا كان (ManuDataHex [idx] == 0x41):
# بيانات مقياس التسارع
المعرف + = 1
AcceleroType = ManuDataHex [idx]
AcceleroData = ManuDataHex [idx + 1]
معرف + = 2
إليف (ManuDataHex [idx] == 0x43):
# بيانات درجة الحرارة
المعرف + = 1
TempData = ManuDataHex [idx]
TempData + = ManuDataHex [idx + 1] * 0x100
TempData = TempData * 0.0625
معرف + = 2
آخر:
المعرف + = 1
طباعة "عنوان الجهاز" + CurrentDevAddr
اطبع "موقع الجهاز:" + CurrentDevLoc
طباعة "Battery Level:" + str (BatteryLevel) + "٪"
طباعة "Config Counter:" + str (ConfigCounter)
طباعة "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)
طباعة "بيانات درجة الحرارة:" + str (TempData)
doQueryInsert (myConnection ، CurrentDevAddr ، CurrentDevLoc ، TempData ، AcceleroData)
ReadLoop = خطأ
باستثناء DecodeErrorException:
يمر
الخطوة السابعة: اختبر نص بايثون
يجب تشغيل البرنامج النصي في الجذر ، لذلك:
$ sudo python bscan.pyDiscovered device ec: 6e: 7e: 10: b1: 92 ec: 6e: 7e: 10: b1: 92 (عام) ، RSSI = -80 dB Flags = 06 غير مكتمل 16b Services = 0a18 الشركة المصنعة = 850002003c25094102024309016f تم العثور على بايت الرأس 0x0085 عنوان الجهاز: ec: 6e: 7e: 10: b1: 92 موقع الجهاز: المرآب مستوى البطارية: 37٪ عداد التكوين: 9 بيانات Accero: 0x2 0x2 بيانات درجة الحرارة: 16.5625
الخطوة 8: أضف Python Scrip إلى Crontab
يجب تشغيل نص 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
هذا كل شيء. سيتم تشغيل نص python النصي على فترات منتظمة وإعادة ترميز الإخراج في قاعدة بيانات SQL
الخطوة 9: إضافي: تكوين SensorBug لمخرجات استشعار الموضع
من الممكن تكوين SensorBug على Android لإخراج استشعار الموضع ، بالنسبة لاستشعار تغيير الموضع ، ما يسمى باب المرآب. الاستشعار ، سوف يكتشف SensorBug ما إذا كان الجهاز يقف في وضع مستقيم أو مستلقٍ ، وعندما يكون الجهاز مسطحًا ، تكون القيمة المسجلة هي 0x20 أثناء وقوف الجهاز في وضع مستقيم ، تكون القيمة 0x02 ولا تفرق إذا كان الموضع X أو Y لأعلى ، طالما أن المحور Z ليس لأعلى أو لأسفل ، وأسهل طريقة للقيام بذلك هي استخدام تطبيق LightBlue. يجب أن يظهر SensorBug في قائمة الفحص. حدد الجهاز الذي ترغب في تكوينه ، انتقل إلى خصائص GATT لتكوين مقياس التسارع UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11
انظر الصورة: اكتب سلسلة تكوين جديدة:
010d3f02020000002d00000002 أعد قراءة سلسلة التكوين لتأكيد الكتابة ، مما يتيح مقياس التسارع لاستشعار الموضع.
موصى به:
كيفية جعل درجة الحرارة وتسجيل شدة الضوء محاكاة Proteus - فريتزينج - صانع Liono: 5 خطوات
كيفية جعل درجة الحرارة وتسجيل شدة الضوء محاكاة Proteus | فريتزينج | Liono Maker: مرحبًا ، هذا Liono Maker ، هذه قناتي الرسمية على YouTube. هذه قناة YouTube مفتوحة المصدر ، وهناك الرابط: قناة Liono Maker على YouTube ، يوجد رابط الفيديو: Temp & amp؛ تسجيل كثافة الضوء في هذا البرنامج التعليمي سوف نتعلم كيفية صنع المزاج
مراقبة درجة الحرارة والرطوبة باستخدام Raspberry Pi: 6 خطوات (بالصور)
مراقبة درجة الحرارة والرطوبة باستخدام Raspberry Pi: الصيف قادم ، وأولئك الذين ليس لديهم مكيف هواء يجب أن يكونوا مستعدين للتحكم في الجو في الداخل يدويًا. في هذا المنشور ، أصف الطريقة الحديثة لقياس أهم المعايير لراحة الإنسان: درجة الحرارة والرطوبة. تي
قراءة درجة الحرارة باستخدام مستشعر درجة الحرارة LM35 مع Arduino Uno: 4 خطوات
قراءة درجة الحرارة باستخدام مستشعر درجة الحرارة LM35 مع Arduino Uno: مرحبًا يا رفاق في هذه التعليمات ، سوف نتعلم كيفية استخدام LM35 مع Arduino. Lm35 هو مستشعر لدرجة الحرارة يمكنه قراءة قيم درجة الحرارة من -55 درجة مئوية إلى 150 درجة مئوية. إنه جهاز ثلاثي الأطراف يوفر جهدًا تناظريًا يتناسب مع درجة الحرارة. عالية
جهاز مراقبة الطقس ESP32 Based M5Stack M5stick C مع DHT11 - مراقبة درجة الحرارة والرطوبة ومؤشر الحرارة على M5stick-C مع DHT11: 6 خطوات
جهاز مراقبة الطقس ESP32 Based M5Stack M5stick C مع DHT11 | مراقبة درجة الحرارة والرطوبة ومؤشر الحرارة على M5stick-C مع DHT11: مرحبًا يا رفاق ، في هذه التعليمات سوف نتعلم كيفية واجهة مستشعر درجة حرارة DHT11 مع m5stick-C (لوحة تطوير بواسطة m5stack) وعرضها على شاشة m5stick-C. لذلك في هذا البرنامج التعليمي سوف نقرأ درجة الحرارة والرطوبة وأمبير. الحرارة أنا
ميزان حرارة للطهي بمسبار درجة الحرارة ESP32 NTP مع تصحيح Steinhart-Hart وإنذار درجة الحرارة: 7 خطوات (بالصور)
ميزان حرارة للطهي بمسبار درجة الحرارة ESP32 NTP مع تصحيح Steinhart-Hart وإنذار درجة الحرارة: لا يزال في رحلة لإكمال & quot؛ المشروع القادم & quot ؛، & quot؛ ESP32 NTP ميزان حرارة للطهي بمسبار درجة الحرارة مع تصحيح Steinhart-Hart وإنذار درجة الحرارة & quot؛ هو Instructable يوضح كيف يمكنني إضافة مسبار درجة حرارة NTP ، بيزو ب