-
دوشنبه, ۱۰ شهریور ۱۳۹۹، ۱۰:۰۷ ق.ظ
-
۲۰۱۱
اسکن دستگاه های بلوتوث در محیط با اسکریپت پایتونی
درود به همه !
در این پست باز به مبحث اسکن محیط میپردازیم . در پست های قبلی نحوه ی اسکن دستگاه های Wifi در محیط با استفاده از پایتون رو اموزش دادیم . امروز میریم سراغ Bluetooth . همینطور که میدونید bluetooth این روزا استفاده های زیادی ازش میشه (اسپیکر های بلوتوثی ، کیبورد ، موس و ....) . شاید در موقعیتی نیاز داشته باشیم تا دستگاه های بلوتوث در محیط رو اسکن کنیم . برای اینکار میتونیم گوشی موبایلمون رو در بیاریم و bluetooth رو روشن کنیم و شروع به اسکن بکنیم ، اما امروز میخوایم یه اسکریپت پایتونی بنویسیم که برامون اینکارو یکم دقیق تر انجام بده .
در ابتدا باید سیستم شما دارای کارت بلوتوث باشه و برای کار با بلوتوث در پایتون از کتابخونه ی pybluez استفاده میکنیم . نصب این کتابخونه یکم چالش داره . اگه سیستم ویندوزی دارین کارتون راحت تره برا نصب کتابخونه ی pybluez روی ویندوز از دستور زیر استفاده میکنیم :
C:\> pip install pybluez
اما برای نصب روی لینوکس در ابتدا باید هدر های مورد نیاز این ابزار رو نصب کنید . با دو پکیج زیر ، هدر های مورد نیاز نصب میشود :
bluetooth
libbluetooth-dev
برای نصب دو پکیج بالا از پکیج منیجر لینوکس خود استفاده کنید برای مثال :
MrPython@debian:~$ sudo apt install bluetooth libbluetooth-dev
پس از نصب هدر های مورد نیاز میتوانیم با دستور زیر ، کتابخانه ی pybluez رو در لینوکس نصب کنیم :
MrPython@debian:~$ sudo pip3 install pybluez
امیدوارم در نصب مشکلی نبوده باشه . به هرحال اگه مشکلی بود در بخش نظرات مطرح کنید .
پس از نصب کتابخونه ها میریم سراغ سورس بسیار سادمون:
from bluetooth import discover_devices
print("Scanning ... Plz Wait ...")
devices = discover_devices(lookup_names=True) # Scan
print("------------------------------")
if devices:for i in range(len(devices)) : deviceMac = devices[i][0] deviceName = devices[i][1] print("{} - {} -> {}".format(i+1 , deviceName , deviceMac))
else:
print("there isn't any Device ...")
توضیح سورس کد :
خب در ابتدای سورس کد تابع discover_devices رو برای اسکن دستگاه های بلوتوثی ایمپورت کردیم. سپس یه متن ساده چاپ کردیم . پس از اون با استفاده از تابع discover_devices اومدیم اسکن رو انجام دادیم و دستگاه های اسکن شده رو ریختیم داخل لیست devices . تابع discover_devices یه ورودی گرفته به نام lookup_names که ما برابر True قرارش دادیم .این باعث میشه بعد از اینکه یه دستگاهی رو اسکن کرد ، علاوه بر مک آدرس اون دستگاه ، نام دستگاه رو هم داخل لیست devices ذخیره کنه .
نهایتا بعد از اتمام اسکن & اسم و مک آدرس تمام دستگاه های اسکن شده در محیط داخل لیست devices ذخیره میشه .
پس از اون یه if گذاشتیم که اگر دستگاهی در محیط موجود بود و لیست devices خالی نبود ، بیاد با یه حلقه ی for اسم و مک آدرس تک تک دستگاه های پیدا شده داخل لیست devices رو برای کاربر چاپ کنه .
حالا اگه لیست devices خالی بود یعنی هیچ دستگاهی پیدا نشده پس چاپ کردیم که دستگاهی پیدا نشد (اون آخر داخل else)
قبل از اجرای سورس کد بلوتوث سیستم خود رو فعال کنید و سپس سورس رو اجرا کنید . پس از اجرای سورس کد ، شروع به اسکن میکنه و یکم زمان میبره تا اسکن کامل بشه (حدودا ۱۰ ثانیه) . پس از اتمام اسکن اگه دستگاهی در محیط موجود باشه به شکل زیر نشون داده میشه :
سوال یا مشکلی بود در بخش نظرات مطرح کنید .
یا حق !
Telegram Channel : @mrpythonblog