UART - 透過 USB 轉Serial模組與 PC 通訊

材料準備

  • USB to TTL Adapter x 1

範例說明

介紹

UART使用了兩條線讓雙方可以同時傳送資料。其中一條是Transmitting,另一條則是Receiving,雙方使用約定好的頻率 (baud rate) 來傳資料。 Arduino 稱呼UART為Serial,在Arduino Uno上只有一組硬體UART,並且這組UART主要被當作印出訊息使用(即Log UART) ,所以當Arduino要使用硬體的UART時,就會佔用Log UART的資源。為了提供多組UART可以使用, GPIO 引腳通過軟件方法模擬 UART 的行為,這稱為Software Serial。 Ameba 配置了多個硬件 UART 端口,也與Software Serial庫兼容。

流程

這個範例裡,我們使用USB to TTL Adapter扮演UART的其中一端,另一端則是Ameba。
USB to TTL Adapter送出資料給Ameba, Ameba回傳相同的資料, 最後顯示在螢幕上。

  • 安裝USB to TTL Adapter

USB to TTL Adapter是個將USB轉成Serial介面的晶片。它一般會有4根腳, 分別是3V3(或5V), GND, TX, RX。在使用USB to TTL Adapter時, 通常都需要安裝驅動程式。如果你的晶片是FTDI的, Windows會上網找驅動程式並自動安裝, 或者也可以自己找驅動程式。
安裝完驅動程式之後, 會在裝置管理員找到對應的Serial Port, 像圖中我的FTDI USB to TTL Adapter在COM8, 而Silicon USB to TTL Adapter則在COM6:

5-1

  • 執行範例

SoftwareSerial_Basic

首先先打開SoftwareSerialExamle範例, 它在 “File” -> “Examples” -> “AmebaSoftwareSerial” -> “SoftwareSerial_Basic”:

5-2

SoftwareSerial_DetailSetting

首先先打開SoftwareSerialExamle範例, 它在 “File” -> “Examples” -> “AmebaSoftwareSerial” -> “SoftwareSerial_DetailSetting”:

5-2

按照下圖連接。 SoftwareSerial_Basic請參考左圖。 SoftwareSerial_DetailSetting請參考右圖。

接著我們打開Serial Port Terminal, 常見的Serial Port Terminal有Putty或是Tera Term。我們以Putty說明如何設定, 先將Connection Type選擇Serial, 並且填入USB to TTL Adapter所在的Port (Ex. COM8)。
Speed則選擇連線的baud rate。

SoftwareSerial_Basic

請注意,連接的兩端應使用相同的baud rate。 在本範例中,我們將baud rate設置為 4800。

5-4

接著我們點選左邊的Serial頁面,其中data bits為8, stop bits為1, Parity為None, flow control為None。
然後單擊Open並按下Ameba上的重置按鈕。

5-5

SoftwareSerial_DetailSetting

5-6

Putty就會出現“Hello, world?” 的訊息。

SoftwareSerial_Basic
這時候你在鍵盤上敲字,會經由USB to TTL Adapter的TX送到Ameba的Serial RX, 在程式碼裡面再送到Ameba的Serial TX, 最後由USB to TTL Adapter的RX接收並印出來。所以如果我們敲這個訊息“I am fine”, 就會出現這樣:
SoftwareSerial_DetailSetting
如果在serial monitor中輸入字,輸入的字符將在 Putty 中打印出來,如下圖所示。

5-6

程式碼說明
首先需要設定UART的Baud rate, 使用SoftwareSerial:Begin():

https://www.arduino.cc/en/Reference/SoftwareSerialBegin
使用write()送出資料, 並且使用Software:available()來檢查是否有資料送進來:

https://www.arduino.cc/en/Reference/SoftwareSerialAvailable
如果有資料進來, 就使用read()將資料讀進來。

請先確認已安裝QQ通訊軟體