اسکن دستگاه های بلوتوث در محیط با اسکریپت پایتونی :: Mr Python | مستر پایتون

اسکن دستگاه های بلوتوث در محیط با اسکریپت پایتونی

  • ۱۷۸۶

اسکن دستگاه های بلوتوث در محیط با اسکریپت پایتونی

درود به همه !

 

در این پست باز به مبحث اسکن محیط میپردازیم . در پست های قبلی نحوه ی اسکن دستگاه های 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

  • سلام من دقیقا عین کد زدم حتی برای اطمینان کاملا ک\ی کردم و اچرا کردم ولی ارور داد ارور زیر

    Scanning ... Plz Wait ...
    Traceback (most recent call last):
      File "/home/##/Desktop/##/network.py", line 6, in <module>
        devices = discover_devices(lookup_names=True) # Scan
      File "/usr/local/lib/python3.9/dist-packages/bluetooth/bluez.py", line 19, in discover_devices
        device_id = _bt.hci_get_route()
    OSError: [Errno 19] No such device

    حسم میگه مشکل از ماژول هاست ولی من کاملا اونارو فراخوانی کردم و مشکلی نبود و توی ارور هم نیست و نمیدونم شاید نمیتونه چیزی رو بخونه توی خط شیش

    پاسخ:
    درود . ممکنه کارت بلوتوث سیستمتون مشکل داشته باشه یا درایور هاش نصب نشده باشه . از این جهت اطمینان دارید که مشکلی نداره ؟
  • مثل همیشه عالی :)

    پاسخ:
    درود . ممنونم ✋😊
  • عالی بود . آیا این کتابخونه میتونه به بقیه بلوتوث ها هم متن و ... بفرسته ؟

    پاسخ:
    درود . مچکرم :))

    داخل خود رفرنس pybluez  یه سری example داشت که فک کنم این چیزی که میخوای باشه . کتابخونه ی pybluez این قابلیت رو داره که یه ارتباط کلاینت - سروری برقرار کنه . مثل کتابخونه ی socket در پایتون که یه سرور میساختیم و یه کلاینت اینجا هم با pybluez میشه یه سرور بلوتوثی ساخت و یه کلاینت تا بهم وصل بشن و اطلاعات رد و بدل کنند .  اتفاقا نحوه کد نویسیش هم بسیار شبیه به همون socket هستش .

    سورس کلاینت pybluez :‌
    سورس سرور pybluz : 
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی