iT邦幫忙

2023 iThome 鐵人賽

DAY 25
1
自我挑戰組

WiFiBoy Python 玩學機介紹系列 第 25

25. 藍牙裝置掃描器

  • 分享至 

  • xImage
  •  

藍牙通訊協定簡介

藍牙(Bluetooth)是一種讓裝置間(特別是行動裝置)在短距離間交換資料的一種無線通訊技術。最初是 1994年由電信業者 Ericsson 發展出來,希望能建立替代 RS-232技術的無線通訊版本。

藍牙技術分為 BR/EDR(基礎/增強) 和 LE(低耗能)兩種技術,BR/EDR 主要是建立一對一通訊裝置,而LE 則是有一對一、一對多(廣播)、網格(多對多)等架構。

使用藍芽技術商品已經遍佈在我們的生活中,就知名的應用例子有:

  1. 資訊與通訊產品: 筆記型電腦、鍵盤滑鼠、印表機與手機等。
  2. 消費性電子產品: 電視遊樂器的主機、操作遊戲的手把(GamePad)、耳機、喇叭等。
  3. 汽車: 車用免持聽筒、車用音響主機等。
  4. 家庭自動化: 照明設備開關、溫溼度計、電動牙刷等。

規格與功能

藍牙版本 發佈時間 最大傳輸速度 傳輸距離
1.0 1998 723.1 Kbit/s 10 M
1.2 2003 1 Mbit/s 10 M
2.0+EDR 2004 2.1 Mbit/s 10 M
3.0+HS 2009 24 Mbit/s 10 M
4.0 2010 24 Mbit/s 50 M
4.2 2014 24 Mbit/s 50 M
5.0 2016 48 Mbit/s 300 M

根據玩學機的規格,ESP32-WROOM-32晶片支援 Bluetooth 4.2 BR/EDR 與 BLE 通訊協定,最大傳輸速度為 24 Mbit/s 與最長傳輸距離 50M。

因此我們可以利用這個帶電池的玩學機,進行一些藍牙通訊的實驗。接著,我們就來了解玩學機有內建哪些函數可以用來開發藍牙通訊的應用程式?

內建藍牙通訊函式庫

要查看系統內建的藍牙通訊函式庫,請先執行 import ubluetooth; help(ubluetooth)。您將會看到:

>>> help(ubluetooth)
object <module 'ubluetooth'> is of type module
  __name__ -- ubluetooth
  BLE -- <class 'BLE'>
  UUID -- <class 'UUID'>
  FLAG_READ -- 2
  FLAG_WRITE -- 8
  FLAG_NOTIFY -- 16
  FLAG_INDICATE -- 32
  FLAG_WRITE_NO_RESPONSE – 4
  • 啟用與關閉藍牙功能: 使用 bt=Bluetooth.BLE() 初始化藍牙功能,使用bt.active(True)啟用藍牙,使用 bt.active(False)關閉藍牙。
  • 掃描藍芽裝置: 透過 start_scan() 方法,開始掃描附近的藍芽裝置,並可設定持續的時間。您可以透過掃描的過程,取得附近設備的位址、名稱等資訊。
  • 連接到其他藍牙裝置,可使用 connect() 方法連到其他藍牙裝置。
  • 使自己成為外部設備,讓其他藍芽設備可以連過來。
  • 藍牙低功耗功能啟用。允許您建立節能的藍牙應用程式,適合用在手持裝置或感測器。

掃描周邊的藍芽設備

目前 MicroPython 的 藍牙函式庫使用起來不算容易,可能還需要再等幾個版本,才會有更完整的支援,讓一般使用者可以輕鬆地寫出應用程式。要注意一件事,因為使用到 IRQ 中斷的方式來處理藍牙通訊,用 Thonny 執行底下的程式會出錯,請改用 WiFiBoy Python Playground 軟體來執行。

import bluetooth

def ok_irq(event, data):
    if event==5:
        addr_type, addr, adv_type, rssi, adv_data = data
        print(addr_type, bytes(addr).hex(), adv_type, rssi, bytes(adv_data).hex())

ble = bluetooth.BLE()
ble.active(True)

ble.irq(ok_irq)
ble.gap_scan(1000, 50000, 50000)

name = b'okesp'
ble.gap_advertise(100, b'\x02\x01\x02'+bytearray((len(name)+1,0x09))+name)

上一篇
24. 控制TelloEdu 無人機
下一篇
26. 專案介紹: 虛擬電子寵物
系列文
WiFiBoy Python 玩學機介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言