【ESP32專欄】看迷片時,老婆忽然來了怎麼辦?迷片救星 — 藍芽鍵盤模擬

作者:尤濬哲

ESP32內建WiFi及藍芽,藍芽部份支援2.0的BTSerial及4.0的BLE,關於2.0 BTSerial連線的範例可以參考。而4.0 BLE部份功能則更多,可以拿來做Beacon定位偵測,或者BLE Notify,今天則是再增加一個功能,就是模擬成藍芽鍵盤。

BLE藍芽鍵盤

ESP32與傳統Arduino比較起來雖然大部分都比較強,但是有一個小小的缺憾,就是不能模擬成USB鍵盤,不過還好可以透過BLE模擬成藍芽鍵盤,使用的程式庫則是ESP32-BLE-Keyboard,此程式庫尚未被Ardunio IDE收錄,因此請自行下載匯入安裝。除了鍵盤以外,也可以模擬滑鼠及遊戲遙控器,可以參考作者的說明。

根據作者的說明,模擬鍵盤的方式就是送出BLE指令,例如要打「A」,就是送出藍芽指令,其方式為bleKeyboard.print(“A”),除了print之外,也有write、press等指令,差異列表如下


關於所有鍵盤的特殊功能鍵用法,可以參考「BleKeyboard.h」裡面有完整的列表。

實做迷片救星,老婆通知器

本次我們就假設你正在觀看「日本首都很熱」,或者「澳門賭場」等類型的愛情動作片時,很怕有人發現,那麼就做一個人體感測器在門口,當有人經過時,就讓ESP32送出「暫停影片播放」、「清空桌面」、「開啟瀏覽器搜尋”ESP32″」等三個動作,假裝我們正在認真找資料,是不是很棒呢?要完成這三個藍芽鍵盤指令,其語法分別為:

1.「暫停影片播放」:

1
bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE)

2.「清空桌面視窗」:

1
2
3
bleKeyboard.press(KEY_LEFT_GUI);//windows左側按鈕
bleKeyboard.print(“d”);//輸入d,即windows+d=清空桌面
bleKeyboard.releaseAll();//釋放windows按鈕

3.「開啟瀏覽器搜尋”ESP32”」:

1
2
3
bleKeyboard.press(KEY_MEDIA_WWW_HOME);//開啟預設瀏覽器
bleKeyboard.print(“ESP32”);//輸入搜尋關鍵字
bleKeyboard.write(KEY_RETURN);//輸入Enter

請依照以下步驟:

1. 下載程式庫:

ESP32-BLE-Keyboard,點選右側code按鈕,選擇DownloadZIP,下載到你電腦中。名稱為「ESP32-BLE-Keyboard-master.zip」

2. 在Arduino安裝程式庫:

點選功能表 草稿碼/匯入程式庫/加入zip程式庫,就會開啟檔案選擇器。


在檔案選擇器中,找到你剛剛下載的ESP32-BLE-Keyboard-master.zip,然後按下方的「開啟」按鈕即可,此時我們就安裝好程式庫了。

3. 撰寫程式:

首先我們要準備的ESP32之外,還有一個人體感測器(PIR, SR-501),我們將她接在GPIO 17,關於人體感測器的安裝,SR501相關設定可以參考本文

1
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include
BleKeyboard bleKeyboard;//宣告一個藍芽鍵盤

void setup() {
  Serial.begin(115200);
  pinMode(17, INPUT);//人體感測器接在GPIO 17
  Serial.println("BLE鍵盤準備連線");
  bleKeyboard.setName("小霸王BLEKeyBoard"); //自行設定藍芽鍵盤名稱
  bleKeyboard.begin();
}

void loop() {
  if (bleKeyboard.isConnected()) {
    //PIR是否有人經過
    if (digitalRead(17)) {
      Serial.println("有人經過,執行緊急程序");
      //1.暫停撥放影片
      bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE);

      //2.清空桌面
      bleKeyboard.press(KEY_LEFT_GUI);//windows左側按鈕
      bleKeyboard.print("d");//輸入d,即windows+d=清空桌面
      delay(100);
      bleKeyboard.releaseAll();//釋放windows按鈕

      //3.「開啟瀏覽器搜尋”ESP32”」:
      bleKeyboard.press(KEY_MEDIA_WWW_HOME);//開啟預設瀏覽器
      delay(500);//等候瀏覽器開啟完畢,請依照電腦效能適度調整時間
      bleKeyboard.print("esp32");//輸入搜尋關鍵字
      delay(100);//等候關鍵字輸入完畢
      bleKeyboard.write(KEY_RETURN);//輸入Enter
      delay(10000);
    }
  }
  delay(100);
}

電腦連線藍芽鍵盤

完成上面的程式並上傳後,我們就可以利用有藍芽的電腦進行連線,方式如下

1.開啟設定/點選藍芽功能:

2.點選新增藍芽或其他裝置,並選擇藍芽:

3.找到並選擇自己設定好的裝置名稱:

4.連線成功:

實際測試看看

一開始先假設正在看Youtube影片:


發現有人經過後,就會立即觸發三個程序「暫停影片播放」、「清空桌面」、「開啟瀏覽器搜尋”ESP32″」三個動作。

是不是很有趣呢?

不過要注意幾個問題:

1.每個鍵盤指令之間要加上一些延遲時間,例如開啟瀏覽器到輸入關鍵字及ENTER,因為沒有留足夠的延遲時間,會導致瀏覽器還沒開啟,關鍵字就輸入到桌面了,變成開啟某些特定檔案。

2.輸入法問題,鍵盤目前似乎不支援中文,因此輸入文字資料必須先將系統切到英文輸入法,避免文字輸入錯亂。

(作者為本刊共筆作者,原文連結,其專欄文章同步發表於作者部落格;責任編輯:謝涵如)

尤濬哲
尤濬哲

Author: 尤濬哲

身兼助理教授/專欄作家/知名部落客,以及點點滴滴科技研發總監等身份,專長包括人工智慧、多媒體互動(Unity)、智慧互動裝置(APP、Arduino)、虛擬實境與擴增實境互動、IoT 實做開發。 學歷:中山大學資訊管理研究所 博士

Share This Post On

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。