فهرست مطالب:
- مرحله 1: رزبری پای را راه اندازی کنید
- مرحله 2: راه اندازی MySQL در Raspberry Pi
- مرحله 3: راه اندازی SensorBugs
- مرحله 4: نصب Bluetooth LE Python Wrapper
- مرحله 5: آدرس SensorBug را اسکن و پیدا کنید
- مرحله 6: اسکریپت پایتون را اضافه کنید
- مرحله 7: اسکریپت پایتون را آزمایش کنید
- مرحله 8: Python Scrip را به Crontab اضافه کنید
- مرحله 9: اضافی: SensorBug را برای Position Sensing Output پیکربندی کنید
تصویری: نظارت و ثبت دما با Bluetooth LE و RaspberryPi: 9 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:55
این دستورالعمل در مورد چگونگی کنار هم قرار دادن یک سیستم نظارت بر درجه حرارت چند گره ای با اشکال سنسور Bluetooth LE از Blue Radios (BLEHome) و RaspberryPi 3B است. با تشکر از توسعه استاندارد Bluetooth LE ، اکنون حسگرهای بی سیم کم مصرف به راحتی در بازار موجود است. با هزینه بسیار کم و می تواند ماهها در یک سلول سکه ای اجرا شود. یکی از این سنسورهایی که من گرفتم از رادیو آبی به نام Sensor Bugs است. این دستگاه دارای هزینه 25 دلار در آمازون است ، یک دستگاه بلوتوث LE با سنسور دما ، سنسور نور و شتاب سنج است که همگی در یک واحد کوچک ساخته شده اند که می تواند به صورت بی سیم ارتباط برقرار کند. این برای بازی Raspberry Pi 3B که از رادیو بلوتوث LE پشتیبانی می کند مطابقت کامل دارد. به
مرحله 1: رزبری پای را راه اندازی کنید
اولین قدم این است که راه اندازی رزبری پای را دریافت کنید. دستورالعمل های وب سایت Raspberry Pi را دنبال کنید ، Raspbian را روی یک کارت SD بارگذاری کنید ، در Raspberry Pi وارد کنید و آن را بوت کنید. من سیستم خود را با Raspbian Stretch Lite (بدون GUI) نسخه نوامبر 2017 راه اندازی می کنم. در صورت نیاز ، WiFi را تنظیم کنید ، ترجیح می دهم منطقه زمانی به منطقه زمانی فعلی به جای UTC. می توانید این کار را با دستور زیر انجام دهید: $ sudo dpkg-reconfigure tzdata
مرحله 2: راه اندازی MySQL در Raspberry Pi
نصب پایگاه داده محلی برای ذخیره تمام داده های ضبط شده مفید است. نصب MySQL بر روی رزبری پای بسیار آسان است. همچنین تغییر اسکریپت برای اتصال خارجی به یک سرور SQL کار چندان دشواری نیست ، در صورت تمایل به استفاده از سرور SQL در شبکه می توانید این مرحله را رد کنید. دستورالعمل های زیادی در شبکه وجود دارد ، من این را پیشنهاد می کنم: https:// www.stewright.me/2014/06/tutorial-install-…
پس از نصب سرور SQL ، می توانید از کلاینت MySQL CLI برای ایجاد کاربر ، پایگاه داده و جدول استفاده کنید. برای وارد کردن MySQL CLI ، از دستور زیر استفاده کنید:
$ sudo mysql -uroot -p ابتدا یک کاربر محلی ایجاد کنید تا داده های گرفته شده را وارد کنید:> CREATE USER 'datasrc'@'localhost' IDENTIFYED BY 'datasrc000' ؛ سپس ، یک پایگاه داده و جدول ایجاد کنید:> CREATE DATABASE SensorBug ؛ راه اندازی کاربر اجازه:> اعطای همه خصوصیات در SensorBug.* به 'datasrc'@'localhost' ؛ اکنون یک جدول جدید به پایگاه داده اضافه کنید. برای این مثال ، من یک جدول با ستون های زیر اضافه می کنم: DATE ، TIME ، ADDRESS ، LOCATION ، TEMPERATURE و ACCEROMETER
- DATE/TIME - این تاریخ و زمان ثبت داده ها است
- آدرس - این MAC از SensorBug است که پیام از آن گرفته شده است
- LOCATION - یک رشته قابل خواندن برای نشان دادن مکان سنسور
- TEMPERATURE - این دمای ثبت شده است
- ACCELE - این مقدار خروجی شتاب سنج است که برای ضبط موقعیت سنسور مفید است (در صورت فعال بودن)
دستوراتی که این کار را انجام می دهند این است:> USE SensorBug؛ > ایجاد داده های جدول (تاریخ DATE ، زمان TIME ، آدرس TINYTEXT ، محل TINYTEXT ، دما FLOAT ، شتاب INT) ؛ اکنون پایگاه داده آماده است ، می توانیم به راه اندازی سنسور اشکال برویم.
مرحله 3: راه اندازی SensorBugs
اشکالات سنسورها دستگاههای کوچک کاملی هستند. متأسفانه ، سازنده فقط برنامه IOS را برای برنامه نویسی آن ارائه کرده است. به هر حال ، اگر فقط دستگاه Android دارید ، می توانید با آن کار کنید. در مرحله اول ، دستگاه را با تلفن جفت کنید. بدون جفت شدن دستگاه ، SensorBug داده ها را تبلیغ نمی کند. من سعی کردم ببینم آیا می توانم این کار را مستقیماً با RaspberryPi انجام دهم ، متأسفانه به نظر می رسد که درایور Bluetooth LE در RaspberryPi هنوز آزمایشی است و دارای اشکال است تا از جفت شدن آن با دستگاه های Bluetooth LE جلوگیری کند. نسخه آینده درایور blueZ ممکن است این مشکل را برطرف کند ، اما به عنوان نوشته فعلی ، راهی برای جفت کردن SensorBug با RaspberryPi وجود ندارد. خوشبختانه ، ما نیازی به جفت کردن دستگاه نداریم تا داده های تبلیغ شده آن را ضبط کنیم. تنها چیزی که ما نیاز داریم یک تلفن برای پیکربندی SensorBug است. به طور پیش فرض ، SensorBug هنگامی که با یک دستگاه جفت می شود ، داده های دما را در فاصله 1 ثانیه تبلیغ می کند. برای ضبط داده های دما ، این تنها چیزی است که لازم است. اگر قصد استفاده از سنسور موقعیت یا نور را دارید ، پیکربندی دستگاه مورد نیاز است. برای شروع ، ما دستگاه را جفت می کنیم و ارتباط را قطع می کنیم. این به اندازه کافی برای هدف گرفتن دما مناسب است. با فشار دادن هر دو دکمه در SensorBug شروع کنید. چراغ آبی/سبز چشمک می زند که نشان می دهد روشن است. یکی از دکمه ها را فشار دهید ، چراغ سبز باید روشن شود ، نشان می دهد که برق روشن است. اگر LED سبز روشن نیست ، دکمه هر دو را فشار دهید تا دوباره دستگاه را روشن کنید. یکی از دکمه ها را فشار داده و نگه دارید تا LED آبی شروع به چشمک زدن کند. این دستگاه را در حالت جفت قرار می دهد. به منوی تنظیمات بلوتوث در تلفن بروید و دستگاه SensorBug را جستجو کنید. پس از نمایش ، آن را انتخاب کنید تا با دستگاه جفت شود. همین ، SensorBug تغذیه شده و داده های دما را تبلیغ می کند
مرحله 4: نصب Bluetooth LE Python Wrapper
در مرحله بعد باید کتابخانه را برای پایتون نصب کنیم تا با پشته Bluetooth LE صحبت کند. دستورالعمل را می توانید در اینجا پیدا کنید: https://github.com/IanHarvey/bluepy برای پایتون 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 (ناشناخته) اگر تعداد زیادی دستگاه بلوتوث LE در اطراف خود دارید ، شاید پیدا کردن این که با کدام دستگاه صحبت می کنید دشوار باشد. می توانید bluetoothctl را امتحان کنید که جزئیات بیشتری را ارائه می دهد:
$ sudo bluetoothctl [bluetooth]# اسکن در [جدید] دستگاه 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 EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x00 [CHG] EC EC: FE: 7E: 10: B1: 92 ManufacturerData value: 0x3c [CHG] EC device: FE: 7E: 10: B1: 92 ManufacturerData value: 0x25 [CHG] EC device: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x09 [CHG] EC EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x41 [CHG] EC EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x02 [CHG] EC EC: FE: 7E: 10: B1: 92 ManufacturerData Value: 0x02 [CHG] دستگاه EC: FE: 7E: 10: B1: 92 ارزش تولید کننده: 0x43 [CHG] EC دستگاه: FE: 7E: 10: B1: 92 ManufacturerData مقدار: 0x0b [CHG] EC EC: FE: 7E: 10: B1: 92 ManufacturerData مقدار: 0x01 [CHG] EC دستگاه: FE: 7E: 10: B1: 92 ارزش تولید کننده: 0x6f
آدرس MAC را ضبط کنید ، این مورد باید در اسکریپت پایتون وارد شود تا دستگاههای ناخواسته Bluetooth LE فیلتر شود
مرحله 6: اسکریپت پایتون را اضافه کنید
یک نسخه از اسکریپت پایتون در دسترس است:
drive.google.com/open؟id=10vOeEAbS7mi_eXn_…
در اینجا همان فایل است ، هنگام کپی به دندانه توجه کنید:
همچنین آدرس MAC را در فایل پایتون به روز کنید تا با آدرس سنسور به دست آمده از نتیجه اسکن مطابقت داشته باشد.
# این برنامه یک نرم افزار رایگان است: می توانید آن را مجدداً توزیع کرده و یا اصلاح کنید
# آن تحت شرایط مجوز عمومی GNU که توسط منتشر شده است
# بنیاد نرم افزار آزاد ، نسخه 3 مجوز ، یا
# (به دلخواه شما) هر نسخه بعدی.
#
# این برنامه به امید مفید بودن توزیع می شود ،
# اما بدون هیچ گونه گارانتی ؛ حتی بدون ضمانت ضمنی از
# بازرگانی یا تناسب برای یک هدف خاص. را ببینید
# مجوز عمومی GNU برای جزئیات بیشتر.
#
# شما باید کپی مجوز عمومی GNU را دریافت کرده باشید
# همراه با این برنامه. اگر نه ، ببینید.
# bscan.py - اسکنر ساده بلوتوث LE و استخراج کننده داده
از وارد کننده اسکنر bluepy.btle ، DefaultDelegate
زمان واردات
pymysql را وارد کنید
وارد کردن ساختار
نام میزبان = 'localhost'
نام کاربری = 'datasrc'
رمز عبور = 'datasrc000'
پایگاه داده = 'SensorBug'
#آدرس MAC سنسور را از محل جستجو وارد کنید
SENSOR_ADDRESS = ["ec: fe: 7e: 10: b9: 92" ، "ec: fe: 7e: 10: b9: 93"]
SENSOR_LOCATION = ["گاراژ" ، "نمای بیرونی"]
کلاس DecodeErrorException (استثنا):
def _init _ (خود ، ارزش):
self.value = مقدار
def _str _ (خود):
return repr (self.value)
کلاس ScanDelegate (DefaultDelegate):
def _init _ (خود):
DefaultDelegate._ init _ (خود)
def handleDiscovery (self، dev، isNewDev، isNewData):
if isNewDev:
چاپ "دستگاه کشف شده" ، dev.addr
elif isNewData:
print "Received new data from"، dev.addr
def doQueryInsert (conn، addr، loc، temp، accero):
جدول #blesensor تاریخ ، زمان ، addr ، مکان ، دما ، accero است
cur = conn.cursor ()
dostr = 'INSERT INTO VALUES data (CURRENT_DATE ()، NOW ()،٪ s،٪ s،٪ s،٪ s)؛'
cur.execute (dostr، (addr، loc، temp، accero))
conn.commit ()
اسکنر = اسکنر (). withDelegate (ScanDelegate ())
myConnection = pymysql.connect (host = name host، user = user name، passwd = password، db = database)
ManuDataHex =
ReadLoop = درست است
تلاش كردن:
while (ReadLoop):
دستگاه ها = scanner.scan (2.0)
ManuData = ""
برای dev در دستگاه ها:
ورودی = 0
AcceroData = 0
AcceroType = 0
TempData = 0
برای saddr در SENSOR_ADDRESS:
ورودی += 1
if (dev.addr == saddr):
چاپ "دستگاه٪ s (٪ s) ، RSSI =٪ d dB"٪ (dev.addr ، dev.addrType ، dev.rssi)
CurrentDevAddr = saddr
CurrentDevLoc = SENSOR_LOCATION [ورودی-1]
for (adtype، desc، value) در dev.getScanData ():
چاپ "٪ s =٪ s"٪ (نزول ، مقدار)
if (desc == "سازنده"):
ManuData = مقدار
if (ManuData == ""):
چاپ "هیچ داده ای دریافت نشده ، پایان رمزگشایی"
ادامه هید
#چاپ ManuData
برای i ، j در zip (ManuData [:: 2] ، ManuData [1:: 2]):
ManuDataHex.append (int (i+j، 16))
#شروع به رمزگشایی داده های خام تولید کننده کنید
if ((ManuDataHex [0] == 0x85) و (ManuDataHex [1] == 0x00)):
چاپ "بایت سرصفحه 0x0085 پیدا شد"
دیگری:
چاپ "بایت سرصفحه 0x0085 یافت نشد ، رمزگشایی متوقف می شود"
ادامه هید
#پرش از عمده/صغیر
#ایندکس 5 0x3c است ، میزان باتری را مشخص کرده و پیکربندی کنید #
if (ManuDataHex [4] == 0x3c):
BatteryLevel = ManuDataHex [5]
ConfigCounter = ManuDataHex [6]
idx = 7
#چاپ "TotalLen:" + str (len (ManuDataHex))
while (idx <len (ManuDataHex)):
#چاپ "Idx:" + str (idx)
#چاپ "داده:" + hex (ManuDataHex [idx])
if (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) + "٪"
چاپ "Config Counter:" + str (ConfigCounter)
چاپ "Accelero Data:" + hex (AcceleroType) + "" + hex (AcceleroData)
چاپ "Temp Data:" + str (TempData)
doQueryInsert (myConnection ، CurrentDevAddr ، CurrentDevLoc ، TempData ، AcceleroData)
ReadLoop = غلط
به جز DecodeErrorException:
عبور
مرحله 7: اسکریپت پایتون را آزمایش کنید
اسکریپت باید به صورت ریشه اجرا شود ، بنابراین:
$ 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 Data: 0x2 0x2 Temp Data: 16.5625
مرحله 8: Python Scrip را به Crontab اضافه کنید
اسکریپت پایتون باید به صورت ریشه اجرا شود ، بنابراین اگر می خواهید داده ها را به طور خودکار ضبط کنید ، باید به crontab ریشه اضافه شود. برای این مثال ، من هر 20 دقیقه اسکریپت را اجرا می کنم از دستور استفاده کنید:
$ sudo crontab -e
# این فایل را ویرایش کنید تا وظایفی را که توسط cron اجرا می شوند معرفی کنید.
# # هر وظیفه ای که باید اجرا شود باید از طریق یک خط واحد تعریف شود # که با فیلدهای مختلف زمان انجام کار را نشان می دهد # و چه دستوراتی برای کار # اجرا شود برای تعریف زمان می توانید مقادیر مشخصی را برای # دقیقه (m) ، ساعت (h) ، روز ماه (dom) ، ماه (mon) ، # و روز هفته (dow) یا از "*" در این زمینه ها استفاده کنید (برای "هر"). # # توجه داشته باشید که کارها شروع می شوند بر اساس تصور سیستم cron # daemon از زمان و مناطق زمانی. # # خروجی مشاغل 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 * * * * پایتون /home/pi/bscan.py
خودشه. اسکریپت پایتون در فاصله زمانی منظم اجرا می شود و خروجی را در پایگاه داده SQL کدگذاری می کند
مرحله 9: اضافی: SensorBug را برای Position Sensing Output پیکربندی کنید
امکان پیکربندی SensorBug در Android برای خروجی حسگر موقعیت در حالی که اگر دستگاه به طور مستقیم ایستاده باشد ، مقدار 0x02 است اگر موقعیت X یا Y بالا باشد ، تا زمانی که محور Z بالا یا پایین نباشد ، فرقی نمی کند. ساده ترین راه برای انجام این کار استفاده از LightBlue App است. SensorBug باید در منوی اسکن نشان داده شود. دستگاهی را که می خواهید پیکربندی کنید انتخاب کنید ، برای پیکربندی شتاب سنج به ویژگی های GATT بروید UUID: 9DC84838-7619-4F09-A1CE-DDCF63225B11
مشاهده تصویر: یک رشته پیکربندی جدید بنویسید:
010d3f02020000002d00000002 رشته پیکربندی را برای تأیید نوشتن مجدد بخوانید. این شتاب سنج را برای تشخیص موقعیت فعال می کند.
توصیه شده:
نحوه ثبت دما و شدت ثبت نور - شبیه سازی پروتئوس - فریتینگ - Liono Maker: 5 Step
نحوه ثبت دما و شدت ثبت نور | شبیه سازی پروتئوس | فریتینگ | Liono Maker: سلام این Liono Maker است ، این کانال رسمی YouTube من است. این کانال YouTube منبع باز است. پیوند: Liono Maker YouTube Channel در اینجا پیوند ویدیو وجود دارد: Temp & amp؛ ثبت شدت نور در این آموزش ما نحوه ایجاد Temper را یاد می گیریم
MicroPython ارزان 3 دلار ESP8266 WeMos D1 Mini برای 2 برابر ثبت دما ، Wifi و آمار تلفن همراه: 4 مرحله
MicroPython ارزان 3 دلار ESP8266 WeMos D1 Mini برای ثبت دو برابر دما ، Wifi و آمار تلفن همراه: با تراشه / دستگاه کوچک ESP8266 ارزان می توانید داده های دما را در خارج ، در اتاق ، گلخانه ، آزمایشگاه ، اتاق خنک کننده یا هر مکان دیگر کاملاً رایگان ثبت کنید. از این مثال برای ثبت دمای اتاق خنک کننده ، در داخل و خارج استفاده می کنیم. دستگاه متصل به
نظارت بر دما و رطوبت با استفاده از تمشک پای: 6 مرحله (همراه با تصاویر)
نظارت بر دما و رطوبت با استفاده از تمشک پای: تابستان در راه است ، و کسانی که فاقد کولر هستند باید آماده باشند تا جو داخل خانه را به صورت دستی کنترل کنند. در این پست ، من روش مدرن اندازه گیری مهمترین پارامترها برای راحتی انسان را توصیف می کنم: دما و رطوبت. تی
رزبری PI ثبت دما و رطوبت ، ایستگاه هواشناسی ابر ، Wifi و آمار تلفن همراه: 6 مرحله
ثبت دما و رطوبت Raspberry PI ، ایستگاه آب و هوای ابر ، Wifi و آمار تلفن همراه: با دستگاه Raspberry PI می توانید داده های دما و رطوبت خارج ، در اتاق ، گلخانه ، آزمایشگاه ، اتاق خنک کننده یا هر مکان دیگر را کاملاً رایگان وارد کنید. از این مثال برای ثبت دما و رطوبت استفاده می کنیم. دستگاه به اینترنت متصل می شود
دستگاه ثبت دما دما (با ESP8266): 11 مرحله (همراه با تصاویر)
WiFi Temperature Logger (با ESP8266): سلام ، خوشحالم که شما را اینجا می بینم. امیدوارم در این قسمت آموزشی اطلاعات مفیدی پیدا کنید. در صورت تمایل می توانید پیشنهادات ، سوالات ، … در اینجا برخی از داده های اساسی و یک مرور کلی از پروژه را مشاهده کنید. برای کاربران تلفن همراه: ویدئو. به من اطلاع دهید