[雙A計畫] 常見問題整理

許多朋友對於 App Inventor 透過藍牙來控制 Arduino 這個議題相當有興趣,事實上通訊這個主題一直是非常吸引人的,當然也有一定程度的難度啦…

首先整理我們雙A計畫文章總覽:

[雙A計劃] Part0:App Inventor 透過藍牙傳送訊號給 Arduino

[雙A計劃] Part1:App Inventor 經由藍牙控制 Arduino LED 亮滅

[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗

[雙A計劃] Part3:Android 手機透過藍牙接收 Arduino 類比腳位狀態

[雙A計劃] Part4:App Inventor 藍牙遙控 Arduino 雙輪機器人

[雙A計劃] Part5:Paperduino 藍牙控制 LED 閃爍

就以下這兩點來說,讓大家有些基礎的概念:

1. 絕大部分的狀況,控制端(例如Android手機) 與被控端(例如 Arduino ) 的程式語言是完全不同的。

2. 牽涉到通訊與硬體就是很麻煩,錯任何一項就是不會動,所以要檢查再檢查喔!

請先參考我們的教學投影片,所有的雙A計畫範例請點我下載

補充一些常見問題如下

1. BTList 點選下去漆黑一片

手機需要先與藍牙發射器配對,我們才能用這個指令來抓到 Android 手機已配對的藍牙裝置位址(address)與名稱(name)。當然您可以直接使用藍牙發射器的 MAC address 來連線,但非常不建議這麼做,因為很容易輸入錯誤而當機。或是您很確定就是要連某片藍牙發射器的話,就把位址寫死在App Inventor 裡吧。

螢幕快照 2015-02-19 下午8.58.27

2. Serial Monitor 亂碼

請檢查鮑率。這會寫在 Arduino 程式中的這一行: Serial.begin(9600);

3. 藍牙發射器上的 LED 燈閃爍或是一直亮是什麼意思?

以 HC05, Hc06 這兩款常見的藍牙發射器來說,只要通電就會閃紅燈,代表正常啟動並可接受外來連線要求。一旦連線成功之後,

4. 藍牙發射器配對碼是什麼?

一般來說都是 1234 或 0000 。您可以透過 AT  command 來修改,但沒有必要。

5. 為什麼需要修改藍牙發射器名稱?鮑率需要改嗎?

就教室管理的角度來說,這件事很重要,否則 Android 掃描下去會看到十幾片同樣名稱的裝置,這樣就無法順利配對完成了。因此建議學校老師可以先使用 AT command (請參閱以上投影片)把藍牙發射器名稱改成 BT001, BT002 或任何好管理的名稱,再把這個名稱用標籤貼紙貼在發射器上。

鮑率一般來說不需要修改。

以上兩件事,如果您是個人使用者,周遭只有一片藍牙發射器而不容易搞混的話,就不太需要做這件事。

6. 什麼是序列通訊?

 

簡單來說,就是在同一條線上一次發送一個位元,因此是先發出去的一定先到。Arduino 端是透過I2CBT.read() 與 I2CBT.write() 來讀寫藍牙序列資料。與序列通訊對應的就是平行通訊,可以同時發送多筆資料。

補充:維基百科的序列通訊頁面

7. 為什麼在範例3 中要加入檢查碼?不加會怎麼樣?

封包傳輸過程中,會有一定的機率遺失,這與傳輸長度以及訊號強弱有關係。當然無線又比有線來的容易掉封包,因此如果掉了一個封包導致讀取位置錯誤的話,您就會感覺到資料怪怪的(例如電位器明明沒有轉動,但手機畫面的數值跳動範圍很大)。因此我們加了字元 ‘a’ 作為資料的第一段,App Inventor 每次讀到a,就知道這是一段封包的第一包(data[0]),就會接續處理後續兩筆資料(Data[1] 與 Data[2])。

至於要使用什麼字元,只要通訊兩端講好就好。重點在於哪邊是頭,以及一次要讀取多少 byte 的資料。這可以說是最基礎的通訊協定(protocol)喔!

螢幕快照 2015-02-19 下午9.31.52

另一方面,手機端會透過 Clock 元件定期發送 49 ,告訴 Arduino: [你可以把資料丟過來囉!]。Arduino 會在讀取到這筆資料後,把 Data[] 陣列送出去。我們可以將其視為基礎的握手(hand shaking)機制

螢幕快照 2015-02-19 下午9.31.41

 

 

8. 同一片藍牙發射器可以同時被多台 Android 裝置連線嗎?

無法。藍牙發射器是被控端 (slave),Android 裝置 (master)則視實際狀況可以控制多個 slave。例如兩台樂高機器人:

9. 程式無法順利執行?

這其實牽一髮動全身,大概會有幾個問題

a. 兩邊的程式沒有對應,請再次檢查程式是否正確

b. 藍牙發射器沒有先與Android 手機配對完成,請參考 1.

c. 連線失敗,請確認藍牙發射器的燈號是閃爍的紅燈。連線成功會恆亮紅燈。如果一開始就恆亮紅燈代表前一個連線還沒結束,這時候就無法被連。我們在 App Inventor 程式中是在點選之後發起連線 (BluetoothClient.Connect 指令),因此您在此會感覺到程式稍微停頓了一下,就是這時候 Android 會對藍牙發射器進行連線。

螢幕快照 2015-02-19 下午9.12.03

d. 執行程式時,可以先按一下 Arduino 的 reset 鈕讓程式強制重新啟動,確認藍牙發射器在閃紅燈,這時再執行手機 app。

最後也請大家參考 Cooper Maa 的藍牙教學,祝大家順利成功喔~

 

About CAVEDU 阿吉 - 雜工 (2520 Articles)
CAVEDU 教育團隊 打雜
Contact: Website

1 Trackbacks & Pingbacks

  1. Arduino、Webduino 和自走車 « 碧華國小資訊中心

Leave a comment

Your email address will not be published.


*