2012年7月9日 星期一

Arduino as an USB to TTL adapter

Arduino 也可以當成 USB to TTL 轉換器使用,方法很簡單,參考下圖,只要在 GND 和 Reset Pin 之間拉一條線就搞定了:

image 

這樣做會讓 MCU 停留在 reset mode,你便可以使用 RX (pin 0) 和 TX (pin 1) 直接與 USB to Serial Converter 晶片 (FT232R 或 Atmegaxxux) 溝通。

設定 HC-0x 藍芽模組

把 Arduino 變成 USB to TTL 轉換器可以做什麼?嗯...我首先想到的是可以拿來改 HC-0x 藍芽模組的設定。我在這篇介紹過如何用 USB to TTL 轉換器設定 HC-0x 藍芽模組,同樣的事 Arduino 完全可以勝任。

底下以修改 HC-0x 藍芽模組的 baud rate 為例說明:

1) 首先,參考上圖在 GND 和 Reset Pin 之間拉一條線

2) 把 Arduino 與藍芽模組連接起來

image

接線方法可以參考下表:

Arduino 藍芽模組 備註
5V VCC 注意電源不可接錯
GND GND 注意電源不可接錯
RXD (pin 0) RXD  
TXD (pin 1) TXD  

通電之後,藍芽模組上的 LED 會一直閃爍:

image_thumb133

先做個簡單的測試,看看藍芽模組通信正不正常。

打開 Serial Monitor,把換行模式改成 "No line ending",接著輸入 AT 指令(指令全部大寫),然後按下 Send 按鈕或 Enter 鍵,這時藍芽模組應該會回應 OK:

image

3) HC-0x 藍芽模組 baud rate 預設是 9600 bps,有些時候你可能會需要改變它的 baud rate,比如改成 57600 bps。要怎麼把 baud rate 修改為 57600 bps 呢?方法為:

輸入指令:

AT+BAUD7

這時藍芽模組應該會回應:

OK57600

像下圖這樣:

2012-06-25_00h21_10

以上的資訊,希望對你有幫助。

參考資料

28 意見:

sinocgtchen 提到...

好棒喔! 這方式應該很少人知道,簡單又方便!

coopermaa 提到...

哈,這樣一來,既不用買 USB to TTL adapter ,也可以省下插拔 AVR 晶片的麻煩了

GCY 提到...

這招不錯喔!!今天臨時要測試新製作的groboduino而且原本的模組送人這招就派上用場了XD

coopermaa 提到...

哈哈~ 試過幾種招式後,我覺的這一招最方便!

Sven Wang 提到...

請問Cooper,

我使用nano採用同樣接線
但是輸入AT後卻沒有反應...
藍芽上面有紅燈閃爍~~

另外 請教是否這篇的
arduino與藍芽裝置的接線表 TX RX寫反?

我自己有把它反過來接
也就是arduino的TX接藍芽的RX
但是還是一樣...
輸入AT不理我...

Sven Wang 提到...

另外, 我使用的是HC-05
這部分的主從設定也是直接在serial介面下直接輸入AT+ROLE=0就好了嗎?(如果希望是"從")

coopermaa 提到...

有紅燈閃爍代表電源供應正確,而且藍芽是處在指令模式,可以輸入 AT 指令控制

不通的原因,我猜可能是 baud rate 不對,你調一下 Serial Monitor 右下角的 baud rate 再試試看

接線表我有試過,確定是對的!

coopermaa 提到...

我還沒用過 HC-05。沒模式應該是直接在 serial 介面輸入指令沒錯

Sven Wang 提到...

我試了TX接TX ,RX接RX baud rate全部都試過了....還是沒反應收場...

然後我找到廣州匯承信息科技的教學檔
設置為master的步驟:
1、PIO11 置高。
2、上电,模块进入AT 命令响应状态。
3、超级终端或其他串口工具,设置波特率38400,数据位8 位,停止位1 位,无校验位,
无流控制。
4、串口发送字符“AT+ROLE=1\r\n”,成功返回“OK\r\n”,其中\r\n 为回车换行。
5、PIO 置低,重新上电,模块为主模块,自动搜索从模块,建立连接。

但是不懂PIO11置高適什麼意思?
上電?上哪邊的電..數據位停止位都看不懂....
不知道Cooper 是否能會意出些什麼?

coopermaa 提到...

你那份文件是在哪找到的?
我找到的是英文的版本

PIO11 置高的意思就是把 PIO11 設成 high level

第 3 步驟的英文是 (英文比較好懂): Set the parameters of the super terminal or the other serial tools (baud rate:
38400, data bit:8, stop bit:1, no parity bit, no Flow Control)

看來好像還得利用 reset pin 重新上電才行

Sven Wang 提到...

Dear Cooper,
我直接去他們官網找的, 有個下載中心
先附給您
http://wavesen.com/download.asp
最近比較忙, 等我測試有好消息在過來這跟你聊聊吧:)

coopermaa 提到...

Thanks.

加油!

OCK 提到...

大大你好...
小弟試了你的方法...
可是只要把reset接到gnd...
arduino就像斷線一樣...PC是找不到他有連接在上面...(例如板子本來在COM4接地後COM4會消失而且也沒有新的出來...)
所以導致serial Monitor無法開啓...也就無法使用這個方法??
小弟我是新手...使用的板本是leonardo..

請問有解嗎?

coopermaa 提到...

@OCK
leonardo 用的晶片跟 UNO 不一樣, UNO 用的晶片是 atmega328p, leanardo 的是內建 usb 的 atmega32u4
leonardo 可能沒辦法當成 usb-ttl 使用喔

leonardo 的 Serial 是用 USB CDC driver 做出來的,沒有接到硬體 pin 0 & pin 1,因為這兩支腳位已變成 Serial 1 了...

不過還是可以 try 看看,我手邊沒有 leonardo,你試一下這支程式,看看行不行:

void setup()
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial1.begin(9600);
}
void loop() // run over and over
{
if (Serial.available())
Serial1.write(Serial.read());
if (Serial1.available())
Serial.write(Serial1.read());
}




蕭瑟風晴 提到...

cooper大
我用HC-05
使用AT指令時沒有反應呢
板子是arduino uno

cooper maa 提到...

沒反應通常是線路問題,你 HC-05 通電後模組上的 LED 會閃爍嗎?再來是 Arduino 跟 HC-05 間的 TX 和 RX 是怎麼接的? 是 RX 對 RX, TX 對 TX 嗎? 還是?

蕭瑟風晴 提到...

我確定我的LED燈有像範例上一樣的閃爍
另外TX接RX
RX接TX
或是兩個互換我都有試過
但是都沒用

cooper maa 提到...

必須是 TX 接 TX, 然後 RX 接 RX 喔

如果線路沒接錯,燈號閃爍也正常,那麼有可能 baudrate 問

Serial Monitor 預設是 9600 baud, 改用其它 baud rate 試看看

黃傑 提到...

我與蕭瑟風晴的問題是一樣的 買到的藍芽模組上面寫著JY-MCU(藍芽名稱是linvor)用atmega8 照你寫的作法 輸入AT並沒有顯示出OK 哪裡有問題了?

cooper maa 提到...

@黃傑,你買的藍芽模組也是 HC-05 的嗎?

我用的是 HC-06 很正常,樓上已經有兩位朋友反應 HC-05 不 Work,不曉得是不是模組款式不同的關係

黃傑 提到...

我的模組上面只寫v1.05不知道是否HC-05

cooper maa 提到...

HC-0x 模組從外觀不容易分辨型號。
我之前有整理一篇 HC-0x bluetooth module 選購指南", 希望對你有幫助:



PS: 其實我手上只有一片 HC-06 模組,其它型號我沒用過,上面那篇文章都是從網路上的資料整理而來的。

黃傑 提到...

謝謝你的回覆!我事後詢問發現我手頭上有的v1.2與v1.5藍芽模組是不同廠商的產品 似乎跟這廣州廠商不同的樣子

cooper maa 提到...

哦? 還有其它廠牌的藍芽模組?
請問你查得到是哪一家的產品嗎?

黃傑 提到...

我是買此模組..上面有些說明http://goods.ruten.com.tw/item/show?21204206581641

黃上源 提到...

您好,我使用的板子是UNO 我使用的藍芽模組是Sparkfun 的
RN42(https://www.sparkfun.com/products/10393)
然後我也發生一樣的問題(確定藍芽燈會閃爍,UNO版子也沒有問題).. 就是打入AT沒有反應..想知道是鮑率非原本就設定為9600的問題,還是其他的問題.. 還是說有其他方法可以知道該藍芽的內建鮑率?? 再來不行的話只能等TTL轉換線入手試試看了...

cooper maa 提到...

@黃傑,露天那個模組看起來像是 HC-06 從機模組
是 HC-06 沒錯,拍賣檔案上有寫

如果還是不通,可以問一下賣家,也許他們有 FAQ

cooper maa 提到...

@黃上源, 不好意思,我沒用過 RN42
我看 sparkfun 上的介紹,RN43 也是可以用 AT 指令設定參數,不過它的 AT 指令跟 HC-0x 是不一樣的

你可以看一下底下這篇教學:
http://www.sparkfun.com/tutorials/264

在 "Commanding the Bluetooth Mate" 這段有說明 baud rate 的設定方法,看起來,要把 baud rate 設成 9600,方法是先下個 "$$$" 進入指令模式,然後再下 "U,9600,N" 這個指令。