2017年4月1日 星期六

Arduino 鍵盤

如何將Arduino變成一個USB鍵盤,輸入文字到電腦中,本文根據其它文章整理出實作步驟。

Arduino程式發送按鍵訊號

發送按鈕似乎可以用 Arduino 的 MouseKeyboard lib 但沒實做過。

這裏參考 Arduino Uno Keyboard 的 程式 ,因我想要發送 Ctrl + Alt + Del 鍵,程式碼如下


#define KEY_LEFT_ALT_CTRL 0x05   /* ctrl 是 0x1, alt 是 0x4 */
#define KEY_DEL 76

uint8_t buf[8] = { 0 }; /* Keyboard report buffer */

Serial.begin(115200);

buf[0] = KEY_LEFT_ALT_CTRL;    /* Ctrl + Alt 鍵*/
buf[2] = KEY_DEL;              /* Del 鍵 */
Serial.write(buf, 8);


按鍵的代碼可參考 Hut1_12v2.pdf


Arduino DFU mode

因 Arduino 的USB埠,預設狀態下只能接收資料,不能發送資料出去,因此需要更新 Atmega8u2 韌體,讓 Arduino USB 變成一個USB 鍵盤。而讓Arduino進去DFU mode,才能燒錄新韌體。

  • 下載燒錄軟體
ATMEL網站下載FLIP 軟體,接著參考 如何讓 Arduino Uno 進入 DFU mode,讓 Arduino 進入DFU模式。

在剛才的下載的程式裏,有韌體程式,或者到這裏下載,其中會用到2隻程式
  1. Arduino-keyboard-0.3.hex  -  燒錄此程式會讓 USB 埠變成一個 USB 鍵盤
  2. Arduino-usbserial-uno.hex  -  此程式是 Arduino 原本的模式,燒錄此程式就可回到原來的狀態

  • 進入 DFU mode
參考 如何讓 Arduino Uno 進入 DFU mode ,讓 Arduino 進入 DFU 模式

  • 燒錄USB鍵盤模式韌體
參考 如何用 FLIP 更新 Atmega8u2 的韌體,將 Arduino-keyboard-0.3.hex 燒錄進去


接著拔掉 Arduino 電源,就會取消 DFU 模式,再接上電後,Arduino 就會變成一個 USB 鍵盤,發送 Ctrl + Alt + Del 按鍵給電腦。

當你想修改 Arduino 程式重新上傳時,由於這個 Arduino 的USB 是一個USB 鍵盤,無法把程式傳進去,所以必須再進入 DFU 模式,把 Arduino-usbserial-uno.hex 燒錄進去,然後才能再上傳程式。