Arduino/STM32等MCU作Bluetooth host的方法

這篇說的不是像HC-05/HC-06那種現成藍牙模組的SPP主從架構,
而是把MCU作為可以連接各種裝置的主機,就像PC插上USB藍牙dongle那樣,可以拿來連接藍牙滑鼠鍵盤搖桿等等的。

找這方面的資訊通常會指向felis的USB Host Shield, 在USB Host基礎之上作的Bluetooth libraries,感覺是弄還蠻不錯的,但總覺得為了藍牙還得多加個USB來插dongle,成本和體積都增加了許多。只是想弄藍牙而已,應該可以想點辦法跳過USB那一層吧?

HCI

首先我們得先知道藍牙的stack裏有個叫HCI (Host Control Interface)的東西。一般PC用的dongle就是從實體層開始作到HCI這一層,剩下stack就交給PC用軟體的方式來完成,像是profile處理之類的。
而HCI實際在線路上是怎麼連接的呢?除了像dongle用的USB以外,比較常見的就是用UART去收發資料,這種就就叫作HCI-UART。

把USB dongle拆了

最簡單的方式就是把USB dongle給拆了,直接把MCU接到上面的UART腳位。但這邊有個問題就是,不是每顆藍牙晶片都有提供HCI-UART介面,有的即使有UART也不見得是拿來用在HCI上的。
比如一般最常見很便宜的CSR 4.0藍牙dongle,裏面通常是CSR8510A10這顆晶片,這拆了也沒用,因為他只提供HCI-USB,沒有HCI-UART能用。
所以就要找個有支援的才行,比如說Broadcom BCM20702的USB dongle就可以支援HCI-UART;這顆雖然比CSR的貴了許多,但大概也就台幣一百多塊而已。
那缺點呢,除非把IC拆下來,不然用USB dongle去改就得在PCB上飛線,成品作出來可能就比較不好看一點。

任天堂Wii藍牙模組

淘寶上可以找到很多代工的Wii藍牙模組,大概剩下太多了,一顆只要$5rmb而已,大概台幣20幾塊吧。他是用Broadcom BCM2042這顆晶片,Wii本身是走USB跟他連接,但他也提供了HCI-UART的介面。
不過沒試過不太確定這顆的FW是不是有針對Wii作了什麼特化,搞不好不能用也說不定,有興趣可以試試,反正便宜翻了。

刷機

網路上有人把HC-05/06這些本來只能SPP的藍牙模組,刷成Microchip RN-42的韌體。RN-42這模組一顆大概要550以上,他跟HC-05/06一樣用的是CSR BC417這顆晶片,所以韌體是通用的,就像HC-05/06之間的那種關係。RN-42的韌體功能比HC-05還多,除了SPP之外,聽說可以設定成HID client拿來作成藍牙鍵盤滑鼠之類的。有人回報說這韌體沒法支援HCI,但RN-42的型號上面有分有無HCI的,也有可能是刷了不同版的韌體也說不定。
這好處是HC-05/06滿街都是,而且又便宜,如果刷韌體成功的話以後就不怕沒HCI模組可以用了。
但是呢,首先得先去弄個CSR的USB-SPI燒錄器,再加上還得想辦法搞到RN-42的韌體才行。
如果沒有RN-42的韌體也沒關係,還有個更麻煩的方法,就是去搞一套CSR的SDK,也就是Bluelab和Bluesuit那些的,依照CSR datasheet的說法BC417原廠有提供三種不同FW,其中一個就是HCI的模式,研究研究幸運的話也許能從SDK build一套HCI的韌體出來。然後CSR被Qualcomm吃掉之後本來官網還在的,現在被拿掉什麼資料都沒有了,不管是要找SDK或是官方文件都相當的辛苦。

其它藍牙模組

其實藍牙模組並不是很好找,通常一找都會看到一堆HC-05/06那種只支援SPP序列透傳,不提供HCI介面的。而且這年頭大部份的裝置都跟Wifi整合了,獨立的藍牙模組大概只剩喇叭音箱這類的比較有生產價值,但音箱之類的應用通常也不太會作HCI,比較有機會大概就汽車主機用的吧。
國外一些廠商有提供一些專門給MCU用的藍牙模組,有HCI介面,甚至還提供了完整BT stack或library,但就是貴了些。
比如TI的CC2564大概225左右,其它像Silicon Labs的BT111或WT21-N-HCI大概也都要300塊以上。作一個玩玩的話是還好,如果要多作幾個就有點疼了。

山不轉路轉,換個開發平台也是可以

既然藍牙HCI模組不是那麼好找,那是不是乾脆換個內建藍牙的平台來開發好了?
比如Nordic nRF52832,Cortex-M4核心64MHz,藍牙BLE,連佈好天線的板子一起大概50元有找,缺點是Nordic全家的MCU都不支援藍牙BR/EDR,只能作BLE的應用。
或是MTK MT7697,Cortex-M4核心192MHz,Wifi+BT雙模,官方支援Arduino開發環境,但就是貴了點,開發板大概500多吧,核心模組大概250~300左右。
不然就ESP32,Xtensa LX6核心240MHz,Wifi+BT雙模,支援Arduino開發環境(非官方),開發板200多元就有,但不是ARM核心就得再多研究一下就是。
這些都比Arduino原本用的AVR強大多了。
覺得如何?

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *