本文旨在補充《超圖解 Arduino 互動設計入門》第十四章,「動手做14-1:使用軟體序列埠程式連接Arduino與藍牙模組」(14-10頁 )。由於Arduino軟體的「序列埠監控視窗」預設只和Arduino板子的USB序列埠連線,因此在電腦上測試藍牙序列埠連線時,需要透過其他通訊軟體,本文採用的是免費、跨平台的"CoolTerm"軟體(有Mac, Windows和Linux版本)。
設定Mac OS X的藍牙裝置配對
連線之前,電腦和藍牙無線模組必須先配對。在Mac OS X系統,新增與配對藍牙裝置的步驟如下:
1. 請選擇「藍牙」選單底下的「設定Bluetooth裝置」指令:
系統將在底下的畫面顯示搜尋到的藍牙裝置:
2. 從中點選Arduino的藍牙模組後,按下「繼續」鈕,系統將嘗試與藍牙模組配對:
若出現像上圖一樣,配對密碼錯誤而不成功的畫面,請按左下角的「密碼選項」鈕,自行指定密碼:
4. 配對成功之後,將顯示底下的畫面:
使用CoolTerm建立藍牙序列埠連線
與藍牙模組完成配對之後,即可開啟CoolTerm進行藍牙序列埠連線,CoolTerm的操作畫面如下:
請按下Options(選項)按鈕,選擇藍牙序列埠:
接著按一下Connect(連線)鈕,將能接收到Arduino傳來的"BT is ready!"訊息:
若要透過序列埠傳出訊息,請選擇主功能表的"Connection / Send String…"(連線→傳送字串)指令:
在底下的視窗中輸入1,再按下Send(送出)鈕,即可點亮Arduino上的LED。
您好
百忙之中能否請教您一個問題?
在下有一類比輸出的sensor(10v-+10v, 10ms採樣頻率)想接上一個無線發射模組
把讀取得的量測值傳送到50公尺外的pc這樣的架構要如何進行呢?
1.請問連接sensor該選用的模組(硬體&軟體)是?
2.pc端的接收模組是(硬體&軟體)?
感謝您
jimmy
hi jimmy:
若要採用無線方式連接PC,考量到PC端現成的介面是藍牙,你可以把感測器的類比輸入,連接到微控器(例如,Arduino),再透過微控器的藍牙介面(有些模組的理論傳送距離可達100公尺),傳送資料到PC。
如果不用藍牙,就要透過另一個微控器來接收,再將資料(通常是透過USB序列埠)傳遞給PC。電子材料行和網拍都有販售無線序列傳輸模組,通常是成對出售的,頻率有2.4GHz, 315MHz, 433MHz等可選擇。
至於PC端的軟體,可以用本文的CoolTerm來接收,或者自行撰寫序列埠接收程式。
thanks,
jeffrey
老師
謝謝您的建議
jimmy
cubie您好:
我有購買超圖解Arduino互動設計入門第2版這本書
看到藍芽連結這部份時,我有下載了coolTerm這個軟體
經測試後,藍芽模組順利跟MAC連線,但是連線訊息卻出現亂碼
而且只有在燒錄程式碼第一次連結的時候才會出現訊息
請問這該如何排除呢?
在程式碼輸入如下:
void setup(){
pinMode(ledPin, OUTPUT);
BT.begin(9600);
BT.print(“Connection!”);
}
coolTerm畫面呈現如下:
……..P…….@…A……@…….XP……<.r.V..V.Tr<..RRRR……….P….p……4t………….R..~..p..z…^…RZ…….X.V………tR….<…………………………………………….
hi mori:
從你的描述看來,似乎是因為藍牙模組的傳送和接收腳位接在Arduino的0和1腳的緣故,請把它們改接在其他腳位,例如:
SoftwareSerial BT(10, 9); // 接收, 傳送
thanks,
jeffrey
Hi Cubie:
抱歉我一時沒有說清楚,我購買的模組是XBee BlutTooth模組加擴展板,Arduino UNO板整個都被插滿
我也沒辦法去調整該插哪個腳位,而程式碼則跟第二版的書上寫的一模一樣,如下:
#include <SoftwareSerial.h>
SoftwareSerial BT(10,9);
const byte ledPin=13;
char val;
void setup(){
pinMode(ledPin, OUTPUT);
BT.begin(9600);
BT.print(“Connection!”);
}
void loop(){
if(BT.available()){
val=BT.read();
switch(val){
case ‘0’:
digitalWrite(ledPin, LOW);
break;
case ‘1’:
digitalWrite(ledPin, HIGH);
break;
}
}
}
所以我現在還未排除訊息亂碼這個問題
我沒有用過這塊擴充板,你確定它的藍牙序列通訊埠就是接在Arduino的第10和9腳嗎?你可以跟廠商索取擴充板的電路圖,這樣就能釐清它的接腳。
thanks,
jeffrey
老師您好
我用的板子是UNO
程式碼與您寫的書上一模一樣
LED 能隨著輸入的數字而正常作用
但是
Arduino傳來的”BT is ready!”訊息 無法收到
請問這是什麼問題呢?
hi eric:
請問你是說在Mac上收不到藍牙的訊息嗎?應該是因為”BT is ready!”是經由 Serial 物件送往有線序列埠,藍牙序列埠的訊息則是經由 BT 序列埠物件送出的。
請修改Arduino程式碼,在接收到藍牙訊息時,透過 BT.println() 隨便送出一段訊息,Mac就能收到了。
thanks,
jeffrey
老師
我試了一下發現
我用 BT.println(“BT is ready!”); 就可以正常顯示
但是BT.print(“BT is ready!”); 卻無法顯示
為什麼呢?
兩個不是應該都是BT物件嗎?
println()會在字串結尾加上’\n’,應該是你的接收端程式包含判斷這個字元的條件,認定已經收到完整的字串,再進行後續的處理。
thanks,
jeffrey
Hello,
我參考”Arduino 互動設計入門“的第14章,我遇到一個問題小問題,我的CoolTerm沒有print出BT is ready,感到十分納悶。不知道是哪個地方出了問題,我使用的板子是官方的UNO。我採用的library如同書本所述SoftwareSerial.h這個library,我用mac參考該篇文章使用coolterm這個軟體,arduino有成功和mac的藍牙連上,可是無法看到print的文字,請問會是哪個環節的問題,謝謝。
hi jeff:
那個 “BT is ready” 訊息是從SoftwareSerial物件的print,而非Serial物件的print送出的嗎?
thanks,
jeffrey
HI,
今日重試,重新再檢查並且參閱了其他的教學,發現原來是自己的兩個地方錯誤:
1. TX RX線的位置,用AT模式藍牙模組的TX要對應到Arduino的RX;RX要對應到Arduino的TX。於程式碼BT(10, 11) // RX | TX;10號是Arduino我設定RX的位置,11號是我設定TX的位置。改好ledPin 13號的燈號可以用0/1打開了
2. 可以透過coolterm用0/1打開led燈號,但是BT.print還是沒出來,我重新再用arduino的complier重新上傳一次,coolterm有印出字樣”BT is ready“。可能是字樣已經印出,但cool term還沒有connection,所以重新透過arduino的編譯器再上傳一次程式碼,coolterm就出現了字樣。
抱歉把這樣的問題提出,十分感謝回應!!
感謝告知!!
thanks,
jeffrey
你好!想請教arduino的序列埠跟CoolTerm上設定的Port是不同的吧?
我使用的HC-05在連線時無法print出訊息,在CoolTerm上設定的是藍芽序列埠,有連線但卻無法收到訊息
hi allen:
我在Mac上連線時,直接從port選單選擇已配對的藍牙裝置名稱,即可連線並收發訊息。
thanks,
jeffrey