1 頁 (共 1 頁)

讓Arduino Uno變成USB鍵盤

發表於 : 2018-10-25 11:37:28
yehlu
http://yehnan.blogspot.com/2013/08/arduino-unousb.html

讓Arduino Uno變成USB鍵盤
最早期的Arduino板子使用序列埠與電腦溝通,但現今一般電腦上已經找不到序列埠了(9針或25針),後來Arduino的板子採用FTDI公司的USB轉序列埠的晶片,讓電腦的USB埠化身變成虛擬序列埠;而Uno板改用Atmega8U2或Atmega16U2(R3),其實它就是一顆具有USB功能的微控制器,只不過在出廠時它預先燒錄具有「USB轉序列埠」功能的韌體,於是可作為電腦USB埠與Arduino板微控制器序列埠之間的中介橋樑。但我們可以讓8U2/16U2進入DFU(Device Firmware Update)模式,便可更新韌體,燒錄別的功能,譬如變成USB鍵盤,從Arduino板子傳送「按鍵」給電腦。

所謂DFU是USB規格的其中一項標準,讓USB裝置韌體更新的功能予以標準化,在Atmega8U2/Atmega16U2裡已含有DFU bootloader,我們從電腦將韌體傳給DFU bootloader,進行燒錄動作。

我的環境:電腦是Windows XP、開發板是Arduino Uno R3、Arduino軟體開發環境是1.0.5版。底下提到「韌體」時,若無特別註明,皆指8U2/16U2的韌體。

下圖紅圈處便是Uno R3的Atmega16U2,旁邊2x3針腳是它的ICSP接頭。


我們要做的事情有:
下載並安裝電腦端的DFU燒錄軟體,Atmel Flip。
讓Arduino Uno進入DFU模式,安裝它的DFU模式驅動程式。
燒錄「不斷送出hello world按鍵」的草稿碼到板子的微控制器晶片裡。
燒錄8U2/16U2的新韌體,變成USB鍵盤。
在電腦上看到從Arduino Uno不斷傳來的「hello world」。
電腦端的DFU燒錄軟體,我們將使用Atmel提供的Flip這套軟體(需要Java),可到Atmel網站下載,有Windows版,安裝過程很簡單,一直按下一步即可,在此不贅述。Mac與Linux可使用dfu-programmer,此處不介紹。

然後請連接Arduino板電腦,可在裝置管理員裡找到代表板子的連接埠。下圖顯示出我的板子Arduino Uno R3。


要進入DFU模式,需重置8U2/16U2,作法是讓下圖的兩個腳位接觸一下(只需一下即可),其中一個是GND接地,另一個是RESET腳位,接觸一下即可重置。


若是R2以前的Uno板,必須在下圖這個位置焊接10K歐姆的電阻,我手上沒有這種板子,所以沒實際試過。


重置後,Windows XP電腦端就會發現硬體。


請選「從清單或特定位置安裝(進階)」。


然後選擇剛剛的Flip安裝目錄裡的usb子目錄,裡頭含有驅動程式。


接下來就稍等一下。


安裝成功囉。


然後在裝置管理員裡便可看到ATmega16U2。您的板子若不是Arduino Uno R3,將會看到別的晶片型號。


接下來,請到這裡下載,裡頭含有能讓Arduino板不斷送出「hello world」的草稿碼(helloworld/helloworld.pde),還有8U2/16U2的新韌體(Arduino-keyboard-0.3.hex),能讓Arduino Uno板變成USB鍵盤。

請拔除板子的電源與USB線進行重置,便可離開DFU模式回到一般的模式,然後燒錄(上傳)剛剛下載的helloworld/helloworld.pde。

接下來要燒錄新韌體,如前所述,讓8U2/16U2的RESET腳位接觸GND接地,一下即可,便可進入DFU模式,然後開啟Flip,出現如下畫面。


點按左上角看起來像是晶片的圖示,或是選「Device-Select...」,以我的例子而言,應選ATmega16U2。您應該選在裝置管理員裡所看到的晶片型號。


然後點按看起來像USB插頭的圖示,然後點按「USB」;或是選「Settings-Communication-USB」。


然後畫面便會從灰色變成彩色。


然後請選「File-Load HEX File...」,選擇剛剛下載的Arduino-keyboard-0.3.hex韌體,點按左下「Run」進行燒錄,然後點按右下的「Start Application」重置。

此時Arduino板便會是USB鍵盤,不斷地送出「hello world」,請隨便開啟一個文字編輯器,便會看到類似下圖的樣子。


若沒看到,可能板子並未重置成功,請手動拔掉板子的電源與USB線,再插入。

以上便上讓Arduino Uno變成USB鍵盤的過程,若你想讓板子回復到原來的樣子,只需重新燒錄原本的「USB轉序列埠」功能的韌體,位於Arduino目錄裡的hardware\arduino\firmwares\atmegaxxu2\arduino-usbserial\Arduino-usbserial-atmega16u2-Uno-Rev3.hex,這支是我Arduino Uno R3板的韌體,您應該找找適合你的板子的韌體,燒錄後即可還原,再以一般方式燒錄其他草稿碼即可。


參考資料:
Adafruit Learning System的Arduino Tips, Tricks, and Techniques,從頭到腳徹底講解Arduino Uno這塊板子。
Cooper Maa的如何讓 Arduino Uno 進入 DFU mode、如何用 FLIP 更新 Atmega8u2 的韌體、Arduino Uno Keyboard、USBKeyboard Library、Arduino Uno Mouse、Arduino 滑鼠自動點擊器,一系列的文章,一步一步介紹如何更新8u2/16u2的韌體,化身成為USB鍵盤或滑鼠。
Arduino官方文件Arduino Uno、Updating the Atmega8U2 on an Uno or Mega2560 using DFU、MIDI Note Player using the MIDI firmware for the 8U2 (Uno and Mega2560 only)、USB Serial Light Adapter。
Arduino Hacking blog的Arduino UNO Keyboard HID Part 1與Arduino UNO Keyboard HID part 2,詳細介紹如何開發AVR的韌體。