วิธีสร้าง Bluetooth Scanner อย่างง่ายบน Windows ด้วย Python

Apr 10 2023
ค้นหาอุปกรณ์สมาร์ททั้งหมดในพื้นที่ของคุณด้วยคอมพิวเตอร์ Windows และรหัส บทความนี้มีเวอร์ชัน Mac OS รวมถึงเวอร์ชันย่อที่มีโค้ดเท่านั้น

ค้นหาอุปกรณ์สมาร์ททั้งหมดในพื้นที่ของคุณด้วยคอมพิวเตอร์ Windows และรหัส

ภาพถ่ายโดย Dan LeFebvre บน Unsplash

บทความนี้มีเวอร์ชัน Mac OSรวมถึงเวอร์ชันย่อที่มีโค้ดเท่านั้น

หากคุณนั่งอยู่ที่บ้านหรือในที่ทำงานของคุณ (เหมือนกันกับหลายๆ คนในทุกวันนี้) คุณจะถูกรายล้อมด้วยอุปกรณ์บลูทูธไร้สายที่ต่างก็คุยกันด้วยความเร็วแสง บางทีคุณอาจเพิ่งซื้ออุปกรณ์เฉพาะเหล่านี้ (หลอดไฟอัจฉริยะ เตาอบอัจฉริยะ บอร์ด Arduinoฯลฯ) และต้องการลองเชื่อมต่อกับมันและควบคุมมัน

ไม่ว่าคุณจะต้องการสอดแนมในละแวกบ้านของคุณหรือเชื่อมต่อกับแกดเจ็ตอัจฉริยะ ใหม่ของคุณ ขั้นตอนแรกคือค้นหาอุปกรณ์เหล่านี้ด้วยการสร้างเครื่องสแกนบลูทูธ

หมายเหตุ: บทช่วยสอนนี้มีไว้สำหรับ Bluetooth Low Energy (BLE) ซึ่งเป็นประเภท Bluetooth ที่พบมากที่สุดในอุปกรณ์สวมใส่และอุปกรณ์อัจฉริยะสมัยใหม่ หูฟังและอุปกรณ์ Bluetooth รุ่นเก่าส่วนใหญ่จะใช้Bluetooth Classicแทน รหัสที่ใช้กับ Bluetooth LE จะใช้ไม่ได้กับอุปกรณ์ Bluetooth Classic

เครื่องสแกนบลูทูธไม่ใช่สิ่งที่จับต้องได้ แต่เป็นชิ้นส่วนของโค้ด มันสามารถทำงานบนคอมพิวเตอร์ของคุณและค้นหาอุปกรณ์ Bluetooth ทั้งหมดที่อยู่ใกล้คุณ และมันก็มี Python เพียงประมาณ 10 บรรทัดเท่านั้น

สิ่งนี้เป็นไปได้ เนื่องจากอุปกรณ์ Bluetooth มักจะส่งสัญญาณออกไปในอากาศโดยบอกว่า“ฉันชื่อ [Steve's Smart Watch] และฉันต้องการเชื่อมต่อ!” จากนั้นอุปกรณ์อื่นๆ เช่น แล็ปท็อปของคุณสามารถรับฟังการออกอากาศได้เหมือนวิทยุ สัญญาณเหล่านี้เรียกว่า "โฆษณา"

อุปกรณ์ Bluetooth กำลังโฆษณาว่าพร้อมใช้งานตลอดเวลา เว้นแต่จะเชื่อมต่ออยู่แล้ว

เครื่องสแกนของเราจะทำงานโดยรวบรวม "ฉันต้องการเชื่อมต่อ!" เหล่านี้ ข้อความจากทุกอุปกรณ์ในพื้นที่เป็นเวลา 5–10 วินาทีแต่แทนที่จะเชื่อมต่อกับอุปกรณ์ใดๆ เราจะเขียนข้อมูลจากโฆษณาของอุปกรณ์เหล่านั้นไปยังหน้าจอคอมพิวเตอร์ของเรา

นี่จะเป็นผลลัพธ์ของเครื่องสแกน Bluetooth ที่เราเขียนโค้ดไว้ด้านล่าง

ด้านบนคือที่อยู่ ( 2C:16:15:A4:B5:CC) และชื่อ ( Samsung AU8000 50 TV) ของอุปกรณ์ Bluetooth ทุกเครื่องในพื้นที่ของเรา ในบทช่วยสอนที่กำลังจะมาถึง เราจะสามารถเชื่อมต่อกับอุปกรณ์เหล่านี้และเริ่มควบคุมอุปกรณ์เหล่านี้ได้ โปรดทราบว่าอุปกรณ์ทุกชิ้นนั้นดีพอที่จะบอกชื่ออุปกรณ์ไม่ได้ (คำตอบจำนวนมากNone ) โชคดีที่ที่อยู่นั้นเพียงพอที่จะเชื่อมต่อในภายหลัง

หมายเหตุ:ที่อยู่ของอุปกรณ์เหล่านี้เรียกว่า “ ที่อยู่ MAC ” และช่วยให้อุปกรณ์ไร้สายบอกส่วนต่างๆ ของกันและกันได้ พวกมันเหมือนกับที่อยู่ IP ถาวรที่ฝังอยู่ในฮาร์ดแวร์

มาเริ่มกันที่การสร้างเครื่องสแกน

ความต้องการทางด้านเทคนิค

  • วินโดวส์ 10+
  • ไพธอน 3
  • Bleak (ห้องสมุด Python Bluetooth LE)
  • อุปกรณ์ Bluetooth LE ภายในระยะ 20–100 เมตรจากคุณ

รหัสสำหรับสแกนเนอร์ค่อนข้างง่าย:

import asyncio
from bleak import BleakScanner

async def main():
    devices = await BleakScanner.discover()
    for device in devices:
        print(device)


asyncio.run(main())

ส่วนที่น่าเบื่อที่สุดคือ:

  • การติดตั้งBleak (ไลบรารี Bluetooth Python)
  • ทำความเข้าใจasyncio(แม้ว่าจะเป็นทางเลือก)

แต่ถ้าคุณยังใหม่กับ asyncio และ Bleak...

วิธีการติดตั้ง Bleak

Bleakเป็นห้องสมุด Python ที่มีประสิทธิภาพซึ่งจะช่วยให้เราค้นหาอุปกรณ์ Bluetooth LE

หากคุณคุ้นเคยกับPipคุณสามารถติดตั้ง Bleak โดยทำตามขั้นตอนต่อไปนี้และข้ามไปยังส่วนถัดไป:

pip install bleak

หากต้องการตรวจสอบว่าคอมพิวเตอร์ของคุณมี Pip หรือไม่ให้เปิด Command Promptแล้วพิมพ์ pipถ้าคุณมี คุณจะเห็นเมนูช่วยเหลือ

หากไม่ดำเนินการ คุณจะได้รับข้อผิดพลาด:

‘pip’ is not recognized as an internal or external command,
operable program or batch file.

py -m ensurepip --upgrade

เมื่อติดตั้ง Pip แล้ว เราสามารถติดตั้ง Bleakใน Command Prompt ได้โดยเรียกใช้:

pip install bleak

      
                

กำลังเขียนเครื่องสแกนบลูทูธของเรา

เราจะให้รหัสทั้งหมดแก่คุณ จากนั้นจึงอธิบายส่วนต่างๆ ของมัน:

# scanner.py

import asyncio
from bleak import BleakScanner

async def main():
    devices = await BleakScanner.discover()
    for device in devices:
        print(device)


asyncio.run(main())

สิ่งแรกที่แตกต่างจากสคริปต์ Python ทั่วไปคือเราใช้ซึ่งasyncioรวมถึงasyncและawait

สิ่งนี้เรียกว่ารหัสอะซิงโครนัสและจำเป็นเมื่อเข้ารหัสสำหรับอุปกรณ์บลูทูธ Asyncioใช้เพื่อบอกรหัสของเราให้เริ่มเครื่องสแกน Bleak ของเรา แต่จากนั้นรอข้อความจากอุปกรณ์ Bluetooth หากไม่มีasyncioโค้ดของเราจะเริ่มต้นเครื่องสแกน Bleak โดยตระหนักว่ามันไม่ได้ยินเสียงอะไรเลยภายใน 2 มิลลิวินาทีที่เรียกใช้ จากนั้นหยุดทำงานทันทีโดยไม่มีผลการสแกนใดๆ

เนื่องจากบลูทูธ (รวมถึงระบบไร้สายและระบบเครือข่ายโดยทั่วไป) ต้องอาศัยการรอให้ อุปกรณ์ อื่นๆทำสิ่งต่างๆ เองเราจึงใช้รหัสอะซิงโครนัสเพื่อบอกให้สคริปต์ของเรารอสักครู่ก่อนที่จะเลิกทำงานหรือเกิดข้อผิดพลาดเนื่องจากขาดการตอบสนองของบลูทูธ คำแนะนำฉบับเต็มเกี่ยวกับ Asyncio และรหัสอะซิงโครนัสมีอยู่ที่นี่

สิ่งที่อยู่ภายในmain()นั้นง่ายมาก:

devices = await BleakScanner.discover()
for device in devices:
    print(device)

asyncคำหลัก / นั้นawaitไม่ได้ใช้งานง่ายเสมอไป ดูคำแนะนำของ Real Python เกี่ยวกับ Asyncioสำหรับคำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับสาเหตุที่เราใช้awaitด้านบน

เรียกใช้เครื่องสแกนบลูทูธ

หากคุณยังใหม่ต่อการเรียกใช้สคริปต์ Python บนคอมพิวเตอร์ของคุณโปรดดู บทความ วิธีสร้างสคริปต์ Python แบบสแตนด์อโลนสำหรับทั้ง Mac OS และ Windows

ในการรันสคริปต์:

  1. บันทึกรหัสสแกนเนอร์จากส่วนก่อนหน้าในไฟล์ใหม่scanner.py
  2. เรียกใช้scanner.pyจากพรอมต์คำสั่ง

เราเห็นที่อยู่ MAC ทางด้านซ้าย ( AB:CD:EF:12:34:56) และชื่ออุปกรณ์ทางด้านขวา

สแกนเนอร์ Bluetooth LE แบบธรรมดาของเราเสร็จสมบูรณ์แล้ว

การแก้ไขปัญหา

  • หากคุณได้รับdevice not foundข้อผิดพลาดหรือสิ่งที่คล้ายกัน ตรวจสอบให้แน่ใจว่าบลูทูธของคอมพิวเตอร์ของคุณเปิดอยู่
  • หากสคริปต์ของคุณไม่พิมพ์อะไรเลย ให้ลองเรียกใช้อีกครั้ง บางครั้ง มีอุปกรณ์ไม่กี่เครื่องอยู่ใกล้คุณที่คอมพิวเตอร์ของคุณไม่รับสัญญาณใดๆ

หากคุณมีคำถามหรือความคิดเห็น โปรดส่ง อีเมลถึงเราที่[email protected] หรือส่งข้อความถึงเราบนInstagram (@protobioengineering)

หากคุณชอบบทความนี้ ลองสนับสนุนเราด้วยการบริจาคกาแฟ

บทความที่เกี่ยวข้อง

บทช่วยสอน Windows เพิ่มเติมกำลังดำเนินการอยู่ แม้ว่าคุณอาจเลือกใช้โค้ดจากบทความ Mac OS ด้านล่างเพื่อให้ยังคงทำงานบน Windows ได้