2014年7月29日 星期二

樹莓派中 USB 藍牙卡的驅動與設置

網頁最後修改時間:2014/07/29

USB 藍牙卡與樹莓派

樹莓派本身沒有藍牙裝置,最常使用的就是 USB 藍牙卡 ( Bluetooth USB Dongle ) 與藍牙轉串列介面模組,這兩樣東西都是賣場藍牙入門套件其中的一樣配件,之後都會在部落格中提到。而在這篇網頁中,將會說明如何在樹莓派裡安裝藍牙所需套件,正確安裝以及啟動藍牙管理器 ( Bluetooth Manager ) 連接外部藍牙裝置。

安裝與測試藍牙裝置會需要進入到樹莓派的桌面,若是不直接使用 AV 或是 HDMI 輸出視頻,請至網頁最下方所提供的部落格連接,至少安裝編輯環境中的第二發與第三發的軟體,這樣就可以遠端連線至樹莓派或是其桌面下進行必要的操作。

所使用的硬體環境為:
  • Raspberry Pi Model B 512MB RAM ( Wheezy-Raspbian )
  • Bluetooth USB Dongle
  • 有線網路
藍牙驅動與藍牙管理器的套件安裝

使用 SSH 或是 VNC 連線到樹莓派,在未插上任何東西在樹莓派 USB 插槽上時,在命令提示視窗下輸入 lsusb 查看 USB 設備
pi@raspberrypi ~ $ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.

插入 USB 藍牙卡後,再一次下同樣的指令,這次新出現的就是關於藍牙卡的 USB 資料
pi@raspberrypi ~ $ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)


解釋最後一行新增的部分:Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

Bus 001:表示第一個控制器。
Device 005:表示系統給 USB 藍牙卡設備的裝置號碼
ID 0a12:0001:表示 USB 裝置的ID。前面 ( 0a12 ) 表示廠商識別碼 ( Vendor ID),等於 Cambridge Silicon Radio, Ltd;後面 ( 0001 ) 表示裝置識別碼 ( Product ID ),等於 Bluetooth Dongle (HCI mode)

關於 USB Vendor ID 以及 Product ID 的查詢可以到 "List of USB ID's" 按 "Ctrl + F" 做搜尋。

( 進入到桌面,) 或是輸入下面指令開啟 VNC Server,再使用 VNCViewer 連線到樹莓派

pi@raspberrypi ~ $ vncserver :1 -geometry 1600x900


按下左下角圖示,選擇 Preferences 就會看到系統並未有關於藍牙相關的應用介面在上面
未安裝 Bluetooth Manager 之前
所以現在要做的就是安裝藍牙所需的套件程式,輸入下面指令先更新套件列表,再安裝藍牙所需的套件
#### 更新套件列表
pi@raspberrypi ~ $ sudo apt-get update
...<< 過程省略 >> ...
####
#### 安裝藍牙所需的套件
pi@raspberrypi ~ $ sudo apt-get install -y bluetooth bluez-utils blueman
... << 過程省略 >> ...

這時再按下桌面左下角的圖示,選擇 Preferences 就會看到了新增了一個 Bluetooth Manager 的圖示 ( 但此時請勿按下執行,因為應該是開不起來的,後面有解決的方法 !!! )
安裝 Bluetooth Manager 之後
好了!確認一下藍牙現在的狀態,正常的況下應該要跟下面指令執行之後所出現的訊息一樣
####
#### 確認藍牙的狀態
pi@raspberrypi ~ $ /etc/init.d/bluetooth status
[ ok ] bluetooth is running.
#### 或使用下面指令亦可
pi@raspberrypi ~ $ service bluetooth status
[ ok ] bluetooth is running.


接著再輸入下面指令,使用 USB 藍牙卡搜描附近的藍牙裝置 ( 至少要額外開啟一個藍牙裝置 ),掃到了就會出現藍牙裝置的 ID 與名稱
####
#### 使用 Dongle 掃描藍芽裝置
pi@raspberrypi ~ $ hcitool scan
Scanning ...
        D0:##:62:##:A8:##       XPERIA P



現在按下桌面左下角的圖示,選擇 Preferences / Bluetooth Manager,如果可以正常的開啟並出現藍牙管理器視窗的話,恭喜你 ! 接下來的步驟就都不需要了。但是,若是很不幸運的開不起來,不用急著升級 ( upgrade ) 套件,因為這樣做沒用!

切換到命令提示視窗輸入指令下來打開 Bluetooth Manager,迸出了一堆錯誤訊息。奇怪!剛剛不是可以正常掃描藍牙裝置嗎 ? 真是糾結 !!!
pi@raspberrypi ~ $ sudo blueman-manager
X11 connection rejected because of wrong authentication.
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display
  warnings.warn(str(e), _gtk.Warning)
Loading configuration plugins
X11 connection rejected because of wrong authentication.

(blueman-manager:2296): GConf-WARNING **: Client failed to connect to the D-BUS daemon:
/usr/bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.

Skipping plugin gconf
No D-BUS daemon running

No suitable configuration backend found, exitting


注意一下上面故意標橘色字的地方,可以發現因為錯誤的身分驗證而不成功,所以朝著這個方向就是 pi 使用者群組設定的問題。

輸入下面指令修改 /etc/group 檔案,修改之前先備份原始檔案

pi@raspberrypi ~ $ sudo cp /etc/group /etc/group.orig


未修改前的 /etc/group 檔案
打開 etc/group 檔案,並增加使用者 pilp 群組後面

pi@raspberrypi ~ $ sudo nano /etc/group


修改後的 /etc/group 檔案
按下 "Ctrl + O" 再按下 "Enter" 寫入修改的檔案,再按下 "Ctrl + X" 離開。

因為修改群組的關係,為了讓修改生效,輸入下面指令讓樹莓派重開機

pi@raspberrypi ~ $ sync;sync;sudo init 6


重開機之後,不管是在命令列或是進入到 VNC 桌面就可以順利打開 Bluetooth Manager。
Bluetooth Manager 開啟的畫面 ( Bluetooth Devices )


手機與樹莓派的藍牙連接

現在,來試一下使用手機來連樹莓派 !

首先在桌面左下角按下選擇 Preferences / Bluetooth Manager
01-打開 Bluetooth Manager
打開手機藍牙,並按下搜尋附近藍牙裝置,一般樹莓派上插的 USB 藍牙卡名稱應該是 "raspberrypi-0" 相近的名稱,按下那個名稱就會開始連線,此時手機視窗上會出現與遠方藍牙裝置連線密碼輸入的視窗 ( 賣場藍牙卡預設的連線密碼是 0000 )
在手機輸入樹莓派 USB 藍牙卡連線密碼
在手機端輸入密碼按下"確定"的同時 ( 不能出現連線錯誤連線失敗的視窗,不然上面的步驟要重做 ),就會在樹莓派桌面上的藍牙管理器看到 Xperia P 的手機圖示出現,然後緊接著出現連線手機端藍牙裝置密碼輸入的視窗
手機端按下連線樹莓派 USB 藍牙卡的同時
連線手機端藍牙裝置,密碼輸入視窗
 輸入手機端的藍牙連線密碼
輸入手機端藍牙裝置的連線密碼
在沒有出現任何連線錯誤的訊息出現就是成功,若有配對成功就會出現一隻鑰匙在圖示的左邊

手機與樹莓派藍牙配對成功
按下 "Send File" 傳送資料到手機試試 ! 隨便選擇一個文字檔試試 !
使用藍芽傳送檔案測試
手機端會收到從樹莓派傳過來的 "檔案傳輸" 要求訊息
手機端收到樹莓派 "檔案傳輸" 要求訊息
點擊打開之後就可以看到檔案的名稱以及大小,這時就可以選擇 "接收" 檔案,或是 "拒絕" 接收檔案
是否接受或是拒絕檔案傳輸的要求

反過來,使用樹莓派連手機也行 !


結論

這網頁是做為藍牙入門套件的第一篇使用說明。安裝基本的設置之後,就可以確保在手機與樹莓派之間的藍牙通訊沒有問題,在使用藍牙入門套件,這部分一定要先搞懂,尤其是藍牙配對的操作,即便是很簡單的過程,但是這會用在 HC-05 主從一體藍牙模組的指令以及程式撰寫上,並方便我們接下來的各項藍牙實驗與測試 !



<< 部落格藍牙相關網頁連結 >>


<<樹莓派編輯環境設置系列文章>>

30 則留言:

  1. 想請問版主 如果我兩邊都是用HC-05 一邊接arduino 一邊接樹莓派的GPIO接腳 請問也可以用同種方式嗎? 還是說會有不同呢?

    回覆刪除
    回覆
    1. 這裡說明的是一邊使用 USB 藍牙卡,另一邊使用 HC-05 藍牙模組;若兩邊都是使用 HC-05 就要設定一個為 Server,另一個為 Client,然後將兩者作藍牙連線,連線成功後就可以離開 AT 模式直接傳送訊息了。

      詳細的說明都在網頁最下方<>。

      刪除
    2. 版主首先感謝您的撥空回復

      在這還想請問如果硬體上是跟上面一樣(一邊用USB藍芽卡,一邊用HC-05模組)
      但HC-05模組還有另外接Arduino和溫度感測器去偵測溫度數值

      想請問這樣要如何在樹莓派中顯示和提取偵測出的數值呢?
      是參考照做另一篇的server篇嗎?

      刪除
    3. 這要看 HC-05 是設定為 Server 或是 Client,選一個你覺得方便使用的就可以。另外若是不想實現在樹莓派實現 SPP 協議,可以 Google 一下如何在 Linux 利用設定的方式做 RFCOMM 的通訊,就類似 Windows 使用設定的方式來達到虛擬通訊埠的方式。只要設定成功,就可以使用 Serial 通訊的方式寫程式發送資料給 Arduino,這可能會比較簡單。

      刪除
    4. 用Client端的方式終於順利顯示出資料了,感謝版主!

      刪除
  2. 請問 反過來,使用樹莓派連手機有教學嗎?? 我可以成功從樹莓傳檔給手機 但反過來一直失敗

    回覆刪除
    回覆
    1. 我沒開機去確認,但應該是樹莓派藍牙少了接收設定的問題,可以看一下下面網頁中的設定說明

      Windows:http://www.7tutorials.com/transfer-files-between-devices-your-windows-7-pc-bluetooth

      uBuntu:http://askubuntu.com/questions/131570/how-do-you-make-ubuntu-accept-files-sent-over-bluetooth

      刪除
    2. 感謝 但後來發現是因為我要傳給樹莓的檔案不能太大 只能小於3xxKB的檔案才能接收

      刪除
  3. 作者已經移除這則留言。

    回覆刪除
  4. 您好:
    查一下藍牙命令列工具,例如 hcitool、hciconfig...等指令使用方法 ( http://lang.idv.tw/doku.php/os/linux/linux%E4%B8%8B%E4%BD%BF%E7%94%A8_bluetooth_usb_dongle )。開啟藍牙之後,要視用途開啟功能,例如要建立一個 RFCOMM 通道 ( http://www.heatxsink.com/entry/how-to-pair-a-bluetooth-device-from-command-line-on-linux ),或是 OBEX、Headaudio ... 等 ( http://wiki.openmoko.org/wiki/Manually_using_Bluetooth ),花時間找一下就有資料可供參考。

    另外,sudo reboot 之後,終端機就會與系統斷線,此時必須要等作業系統完全開啟之後再重新連接即可。

    回覆刪除
  5. 請問版主 我前面都OK 但是到手機連接Raspberry pi藍芽那裏就不行了 我手機藍芽搜尋一直偵測不到它的藍芽裝置

    請問這跟藍芽型號有關係嗎? 我用的是 嘻哈部落 SBD-40 的USB藍芽

    回覆刪除
  6. 您好:
    如果使用 hcitool scan 有搜尋到你的手機藍牙,那反過來不行的話!請開啟樹莓派藍牙可被搜尋的選項,預設好像是關閉的,使用前要打開,不然會看不到!

    有時候會因為藍牙密碼輸入的延遲導致配對不成功,多試幾次!並在成功之後將上面加號、鑰匙和星星符號都按一次加入你的手機藍牙到系統列表中,下次就會自動連線!

    回覆刪除
    回覆
    1. 感謝版主 我配對到了!!
      我現在用樹莓派傳檔案可以到手機
      但手機傳檔案給樹莓派時 樹莓派端應該要跳出接收提示 他都沒跳出來 我也不知道要點哪裡才能確認接收
      有辦法把他調成會跳出提示之類的方法嗎? 不然樹莓派根本無法接收檔案...

      刪除
    2. 看一下上面其他人的的留言,已經有答案。

      刪除
    3. 你好:

      我在傳送 TXT檔給手機的時候出現了

      The name org.freedesktop.NetworkManager was not provided by any .service files

      這該怎麼解決呢

      刪除
    4. 我沒遇過這問題,若要尋求協助,請詳細的說明起始,不然我也愛莫能助!

      刪除
  7. 你好:我在安裝完成後檢查status,卻出現bluetooth is not running...failed,我重複試了很多次依然一樣,是不是需要另外啟用裝置 https://drive.google.com/file/d/0B9pbQWCq-pN-YVdoSGUwYjhVNHM/view?usp=sharing

    回覆刪除
    回覆
    1. lsusb 列出的裝置在螢幕上輸出一樣,安裝相關的套件之後輸入 /etc/init.d/bluetooth status 應該要跟網頁上的一樣。
      先重開機再是一次指令,如果不行就看下面的建議與想法:
      建議與想法:
      1. 請完全照著網頁上面的步驟一步一步做,應該不會出現這問題!如果還是出現就看第2點。
      2. 因為不知道你的系統是不是全新的安裝,所以請使用一片全新安裝作業系統的記憶卡重新啟動系統在依照網頁中的步驟重新做一次試試!

      刪除
    2. 謝謝回覆,在我重開機之後,再打status就出現[ ok ] bluetooth is running 了

      刪除
  8. 版主你好,我確定照你的教學去做但是藍芽管理員就是只會在那裏轉圈圈(執行中的意思),大約5.6秒後
    還是啥事都沒發生過一樣,請問還有哪方面是可能沒設定好的嗎?(已看你的教學步驟,確認無誤的情形下發問)
    尋求幫助,感謝!

    回覆刪除
    回覆
    1. 單憑這些資訊很難確定問題所在!
      猜一下好了!
      藍牙驅動沒成功,導致沒法搜尋裝置!

      刪除
  9. 您好,我在安裝時出現"bluez-utils has no installation candidate"是說沒有這個包,我該如何能解決呢?
    請您協助我一下,謝謝您

    回覆刪除
  10. 您好我在安裝時會遇到bluez-utils無法安裝的問題,他會出現沒有這個封包,我該如何解決呢?我使用樹莓2

    回覆刪除
    回覆
    1. 你是不是有改過 apt-get 的 repository 設定 ? 應該不會有這個問題 !
      不管如何,直接上官網下載 tar 壓縮的檔案解壓所後自行安裝就可以了!
      http://www.bluez.org/download/

      安裝方法,解壓縮之後看README檔案。

      刪除
    2. 我嘗試看看,謝謝您給與我幫助。

      刪除
    3. 我是把-utils 去掉後就開始跑安裝了

      刪除
  11. 想請問版主你用的USB bluetooth 是用哪個牌子的??
    因為聽說會有系統支援的問題

    回覆刪除
    回覆
    1. 重要的不是牌子,而是它裡面所使用的晶片!
      lsusb 就會出現藍牙的相關敘述,網頁用的是這一個
      Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

      刪除
  12. 請問 Bluetooth USB Dongle 有推薦哪一款?

    回覆刪除
    回覆
    1. 上面有回覆了 ! 如果要用隨便買便宜的就可以用 ! 但如果要學,就要可以切換 class 的,但這個要靠運氣買,有些不一定可以切換。
      看網頁前面有說到這部分 !

      刪除

留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !