2017年9月29日 星期五

模組介紹 : faya藍芽模組



學習目標 : 認識faya藍芽模組的功能及使用方式
學習時間 : 60min
示範模組 :  (1) faya brickNano
                  (2) faya藍芽模組
                  (3) faya直流馬達模組
工具 : (1) 樂高底板(相容)
          (2) 具藍芽功能的筆電或電腦
          (3) Andriod 手機 (選擇性)

====================功能介紹====================

藍芽為現今最常見的無線通訊設備,假如你手邊有行動裝置如:智慧型手機、平板電腦,絕大部分都有內建藍芽。藍芽模組的傳輸方式非常簡單,使用UART資料傳輸,只需將模組上的TxD(資料傳送)、RxD(資料接收)連接到Arduino板,並將通訊速度(鮑率:baud rate)設定完成後,就可以傳送資料。

faya藍芽模組採用市面上最常用的藍芽模組HC-05,並將常用的3個控制埠TxD,RxD,KEY至於模組的左方,和Arduino的串列埠相連接。


Arduino板的UART: TxD(1)、RxD(0)腳是用來燒錄程式用的,如果用來連接藍芽模組,會無法燒錄程式,所以這裡先介紹使用程式指令模擬其他的UART腳位。

  • #include<SoftwareSerial.h>;
        模擬串列界面(UART)時,務必指示SoftwareSerial.h函式

  • SoftwareSerial 物件名稱(RxDPin, TxDPin);
        此指令用來建構SoftwareSerial物件並定義模擬的UART腳位

        物件名稱 : 可自行命名
        RxDPin : 連接到Arduino模擬的RxD腳位,對於藍芽模組而言是TxD
        TXDPin : 連接到Arduino模擬的TxD腳位,對於藍芽模組而言是RxD
        備注 - 用程式模擬出來的RxD腳位是有限制的,只能連到具有中斷的腳位UNO
                  和 NANO 為D10、D11、D12、D13腳

       (例) 當建構物件名稱為"fayaBluetooth",RxD設到第10腳,TxD設到第11腳時,需宣告:

             SoftwareSerial fayaBluetooth(10,11);

  • 物件名稱. begin(BTspeed);
      此指令用來定義UART的速度 (鮑率:baud rate)

      物件名稱 : 可自行命名
      BTspeed : 設定以下常用的鮑率:2400、4800、9600、19200、38400、115200,大部
                       分的藍芽裝置都預設鮑率:9600。

     (例) 當我們建構一物件名稱為"fayaBluetooth",鮑率為9600bps時,程式中需宣告

           fayaBluetooth.begin(9600);

      以上舉了幾個模擬的串列連接埠使用範例,基本上用法和一般的串列連接埠使用方式相同,有興趣的人可以參考官方網站

====================原理知識====================
藍芽的傳輸原理很複雜,基本上是運作在2.45GHz的頻帶,可傳輸資料與聲音,傳輸距離最遠可達10公尺。運作原理主要是用跳頻展頻技術(Frequency Hopping Spread Spectrum — FHSS),就像是特定頻率的無線電,使藍芽兩端可以用特定的窄頻窄波同步在2.4MHz的頻帶上傳送訊號。

以上複雜的傳輸都已交給硬體晶片來完成,使藍芽模組的人其實不需要了解當中原理。只要了解如何資料正確地透過藍芽傳送和接收即可。faya藍芽模組的介面簡化到用兩隻腳(TxD, RxD)就能傳送資料,另一隻KEY腳用來設定藍芽的工作狀態,我們未來有範例需要使用此腳位時再介紹。模組電路圖如下:


電路中,我們將輸入的5V電壓降到3.3V的工作電壓,並把所需的TxD、RxD和KEY腳位拉出來,另外,我們用一顆LED(焊在模組背面)顯示模組的配對/連線狀態 (需先配對成功後才能連線):
  1. 快速閃爍 (每秒5次) - 模組等待連線配對中
  2. 每2秒閃爍1次 - 模組配對成功 (藍芽模組會記得曾經配對成功的模組,之後重新開機時就無須再次配對,此時不會再顯示此狀態
  3. 每2秒閃爍2次 - 藍芽模組以連線
接下來我們用兩個範例來展示模組的功能,前個範例都是利用筆電內建的藍芽(主-Master)和faya藍芽模組(僕-Slave)互傳資料,文章最後我們會帶到利用Android手機(主-Master)和faya藍芽模組(僕-Slave)互傳資料,讓大家舉一反三來控制此模組。
  • 範例一 : 讓筆電透過藍芽傳送字元指令控制Arduino的LED燈
  • 範例二 : 讓筆電透過藍芽傳送字串指令控制連接Arduino的直流馬達
===================範例實作(1)===================
目標: 
(1) Arduino透過藍芽模組送出字串到電腦的終端機介面
(2) 電腦透過藍芽傳送'1'時,Arduino 板子上的LED燈亮起,傳送'0'時,LED熄滅

接線:
(1) 電源線連接
     如下圖所示,連接的說明請看這篇文章 簡易版


(2) 訊號線連接
      Arduino_10  ===>  藍芽模組_TxD
      Arduino_11  ===>  藍芽模組_RxD


藍芽配對:
(1) 完成以上的電源和訊號接線後,用USB線將電腦與brickNano連結,此時faya藍芽模組會通電,由於電腦的藍芽和faya藍芽模組還未配對,因此模組下方的LED燈會快速閃爍。


(2) 接著在到 [控制台 > 硬體和音效 > 裝置和印表機] 的畫面,點選 [新增裝置]


(3) 從新增裝置的選單中挑選HC-05 (無此選項時,可以找顯示[不明]的那個試試看)


(4)出現要求輸入裝置密碼的畫面,輸入預設密碼[1234]


(5)接著會跳到正在安裝檔案的頁面,等待自動安裝完成


(6)完成後,模組下方的紅色LED每2秒會閃爍1次 -代表電腦藍芽(主)和模組藍芽(僕)配對成功,電腦的裝置管理員的藍芽也會顯示HC-05裝置。


以上配對程序只需要做一次,電腦會記得此模組已經配對過,未來無須重新配對。

軟體安裝:

我們需要在具有藍芽的電腦(筆電)安裝串列終端介面,這樣才能夠過此介面接收和發送訊號給faya藍芽模組,這邊建議使用的終端機介面為TeraTerm

(1) 到TeraTerm下載網頁下載並安裝軟體,安裝過程中,一直按下一步即可,不須額外加選其他安裝項目。


(2)開啟TeraTerm,在連線選單選擇Serial,找藍芽ComPort按OK進行連線。當看到模組下方的紅色LED燈每兩秒快速閃爍2下時,代表連線成功。(註:筆者的Win10在配對成功後,需要重新開機一次,才能順利連線,如果在這邊連線失敗了,試著重新開機在連連看)
 

範例程式:


備註:
- L18: 模擬串列埠fayaBluetooth搭起了和藍芽模組溝通的介面,和TeraTerm終端機介面程式連線後,就可以在此介面接收或發送資料
- L28 : Arduino啟動後,透過藍芽模組對電腦的藍芽發送訊息,電腦會把收到的訊息顯示在TeraTerm終端機畫面。
- L31~L41: 電腦鍵盤輸入1 or 0,並且透過電腦的藍芽發送給faya藍芽模組,faya藍芽接收到字元後,透過串列埠傳給Arduino來控制LED燈

範例結果: 


討論:
  • 連接從TeraTerm送出字元指令前,需開啟選單中[Control / Broadcast Command],接著在視窗中勾選如下所示:

  • 這個範例我們透過字元來控制LED,單一字元的控制項目有限,因此控制了LED明亮,下個範例我們透過傳送字串送出控制碼,如此能控制的項目就無限了!
===================範例實作(2)===================
目標: 
(1) Arduino透過藍芽模組送出指令簡介到電腦的終端機介面
(2) 電腦的終端機介面送出"120"~"200"之間的字串控制直流馬達旋轉速度
(3) 電腦的終端機介面送出"CW" / "CCW" 字串控制馬達旋轉方向
(4) 電腦的終端機介面送出"OFF" 字串停止運轉

接線:
(1) 電源線連接
     如下圖所示,連接的說明請看這篇文章 簡易版




(2) 訊號線連接
      Arduino_10  ===>  藍芽模組_TxD
      Arduino_11  ===>  藍芽模組_RxD


      Arduino_3    ===>  直流馬達模組_SIG
      Arduino_13  ===>  直流馬達模組_DIR


範例程式:

備註:
- L48~L54: 接收字串指令的重要程式技巧,由於(串列.read)的函示一次只能讀一字元,因此當街收到('\n') new line 碼時,才開始判斷組合起來的字串。在TeraTerm裡的Broadcast Command 勾選 [Enter Key]時,等同送出new line碼


-L63 / L69 / L80 : 由於我們在TeraTerm裡的Broadcast Command勾選[EnterKey]後,又多帶了一個[CR] carriage return碼,所以接收時,判斷字串時需要再加上('\r')碼,傳送和接收的字串才會一致。

範例結果:


討論:
  • 我們在第二個範例學習到如何透過藍芽傳送和接收字串指令,把這個技巧學起來,對於爾後我們的藍芽無線控制各種標的物時,是非常有用的!
  • Windows上還有不同的藍芽終端機軟體,筆者在Win10的市集裡下載了[Bluetooth Serial Terminal] ,畫面簡單了許多,同樣可以控制本篇的範例喔!


  • 另外有Android手機的朋友,也可以下載相關藍芽終端機App,例如Bluetooth Terminal,軟體安裝完後的使用方式,也和本篇介紹的相同,只是控制介面由電腦轉到手機上了,大家可以試試看。注意Iphone裡的藍芽終端機軟,基於某些限制,必須連到有認證過的藍芽裝置,可惜不包含HC-05,因此無法用Iphone手機控制本章的範例喔!

也歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
fayalab 粉絲團
FB本篇留言版


2 則留言:

  1. iphone的藍芽弄得出來嗎

    回覆刪除
    回覆
    1. Iphone的藍芽要求比較嚴謹,需要有認證的藍芽晶片,類似TI的CC254x系列的,筆者也想找個時間試試看!

      刪除