2015年2月24日 星期二

Arduino 使用藍牙模組上傳程式

開始使用藍牙之後,由於每次上傳程式都要記得先拔開pin 0/1的連接線,否則序列埠會被藍牙占著而無法上傳程式,本來改用SoftwareSerial()函式庫之後發現可以用軟體模擬序列埠讓藍牙連接其他pin腳,不過經測試之後發現softwareSerail()好像有點問題,在9600 baud rate時工作都正常,但到了57600就無法正確傳送內容了。上網查詢後發現這程式庫的確有些問題,有人改用NewSoftwareSerial()程式庫,但好像使用軟體模擬的在高baud rate時都會有些問題。所以保證傳輸最穩定的還是直接連接硬體Serial Port,也就是pin 0/1(Mega會有三組)。

既然都已經連結硬體Serial Port了,那是否可以從藍牙來「無線」上傳程式呢?查詢了一下資訊,有人製作Bluetooth Sheild可以無線更新程式,也有人從藍牙模組上另外焊一條線來達成。研究了一下,我想應該是跟上傳程式時需要 reset 有關(跟之前Arduino Pro Mini的問題很像)。於是我就測試了一下,發現就算是用HC-06,只要在上傳程式時在藍牙連接成功時(此時HC-06的LED會從閃爍變成長亮)按一下reset,就可以順利上傳程式。

2015年2月16日 星期一

Arduino用藍牙模組進行遠端遙控

遠端遙控Arduino有幾個選擇:藍牙(Bluetooth)、XBee、無線網路(Wi-Fi)、無線電(Radio)、紅外線等。要連線都需要發射端與接收端兩個設備,其中除紅外線之外可以做雙向傳輸資訊(無線電要看是什麼模組),一般說來無線電適合長距離,Wi-Fi適合上網路與Server連接,其他的幾種傳輸距離都不長。以價錢來說,紅外線最便宜,再來可能就是藍牙(2.1)或無線電模組,Xbee與Wi-Fi模組的價格都較貴,而藍牙跟Android手機連線蠻容易的,所以很多人做遠端遙控的project都會先從藍牙開始嘗試。

市面上比較常見的藍牙模組,目前應以HC-06(僅從機功能)及HC-05(主從機功能)為大宗,很多人買HC-06作為從機連接Arduino,與Android App連線(Android手機做主機),透過藍牙來遙控Arduino。Google許多文章,多半是講如何以Arduino Uno來代替USB to TTL連接線連接HC-06,透過AT指令來設定設備名稱、連線密碼跟Baudrate(HC-06也只能設定這三樣參數)。關於如何判斷是HC-05還是HC-06,這篇寫的很清楚。總之每個人買到的藍牙模組可能會不太一樣,像我的HC-05是焊上6隻pin腳,晶片上有打個金色勾勾,上片還有個像reset的按鈕;而HC-06則只有焊4隻pin腳。如下圖:

從左至右:HC-05、HC-06、USB to TTL

反面:針腳從左至右是EN、VCC、GND、TXD、RXD、STATE

接法很簡單(兩片一樣),左至右
RXD接TX、TXD接RX、VCC接5V、GND接GND

在Arduino IDE上選擇USB to TTL的序列埠,新增一個視窗並打開Serial Console,並將換行指令改為「Both NL & CR」;HC-06可直接開始打入AT指令按Enter,例如打入AT,HC-06會回應OK。但HC-05需要在「通電後」按一下右下的按鈕,方可進入AT模式,如果已在連線狀態,則需要「長按住」按鈕以輸入AT指令,意思是說如果沒按按鈕,輸入AT指令則不會有回應。至於詳細的AT指令,每片模組多少有些不同,所以請跟你購買的商家索取手冊參考。

2015年2月8日 星期日

Arduino Pro Mini 上傳程式出現錯誤訊息?

玩Arduino,有人喜歡玩大的比如說Mega,看重它I/O pin夠多,Memory比較大之類的,但也有人喜歡玩小的,比如說Pro Mini,I/O數跟Uno差不多,分為5V/16MHz與3.3V/8MHz兩種,但它沒有USB,也因此讓體積更小。如果想要連接電腦,就需要接另一張USB轉TTL/RS232的小卡。下圖從右開始依序是Uno, Nano, Pro Mini以及USB轉接卡:


使用Pro Mini的第一個問題就是要怎樣跟USB to TTL卡連接。Pro Mini買來時通常pin腳要自己焊,不過附贈的針腳常是90度公頭的,也就是跟左邊USB卡上的針腳一樣,可以去電子材料行買90度母頭的(如圖)來焊。

USB to TTL/RS232上面的針腳從左開始依序是:DTR / RX / TX / VCC / CTS / GND
而我這片Pro Mini上的針腳從左開始依序是:DTR / TXO / RXI / VCC / GND / GND
有的Pro Mini標示會不太一樣,比如說第一腳標 GRN,最後一腳標BLK之類的。但其實它的順序都是一樣的,直接一對一接上即可。

其中DTR是Auto Rest腳位,如果沒有接這條,你會發現在上傳程式時出現「avrdude: stk500_getsync(): not in sync」的錯誤訊息。上網找資訊往往會發現有人建議在上傳程式時,看到白色compile完計算程式大小的字樣時,趕緊按下Pro Mini上的reset鍵,就可以成功上傳,一試還真靈,心中暗暗感謝谷歌大神,殊不知這是因為沒接DTR腳位,所以在上傳程式時無法自動reset。