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,就可以順利上傳程式。


實驗條件:
  • Arduino Nano 3.0
  • HC-06 (baud rate 57600)
  • 直接連接pin 0/1
  • Arduino IDE(1.6.0)裡連接埠選該藍牙序列埠
  • 看到HC-06 LED長亮(表示連結成功時),按一下Nano的reset鍵
查過HC-06的電路,這片好像沒有連接EN及STATE腳位(所以只有4 pin),好像也沒有適合拉出的pin腳可以自動 reset,於是我就用HC-05來試試,將HC-05上的STATE腳位連接到 Nano 的 reset腳位,TADA~ 這樣就會在藍牙連線成功時送一個3.3V的訊號給 reset,然後就可以上傳程式不用自己按 reset 了。

查詢過Arduino對Nano的介紹,官網倒是說需要送LOW訊號給 reset 腳位當做DTR(Data Terminal Ready),所以我也不太明白為何送HIGH訊號給 reset 也可以。總之,不管是HC-06或HC-05,都可以比較方便的「不用拔線」來上傳程式了。尤其HC-05,可以實現「無線」傳輸程式,適合當你的專案需要更新程式,而它又安裝在不適合去接USB線的位置,不用買Yun也可以達成這樣的功能呢。

這裡有測試程式,上傳至Arduino後可從Terminal工具傳送指令給Arduino來點亮或熄滅LED

P.S. 看大家購買的藍牙模組好像接線與AT指令都不太一樣,還是要詳讀你模組提供的手冊來進行,以免不小心燒壞了藍牙模組呢。

沒有留言:

張貼留言