日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ windows 蓝牙库_蓝牙翻页笔(PPT 控制器) | ESP32学习之旅-Arduino版

發布時間:2025/3/12 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ windows 蓝牙库_蓝牙翻页笔(PPT 控制器) | ESP32学习之旅-Arduino版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本系列歷史文章目錄:

  • ESP32概述與Arduino軟件準備
  • 新冠肺炎疫情數據實時顯示器
  • B 粉計數器

本期給大家帶來的案例是:藍牙翻頁筆。

先來看一下演示視頻吧:

藍牙翻頁筆 | PPT播放控制器 | 藍牙鍵盤 | 用 Arduino 玩轉掌控板 ESP32 / ESP8266 | 圖形化編程 | 鐵熊出品_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili?www.bilibili.com

前言

關于翻頁筆,其實我在之前就已經給大家分享過用好搭徽章板和 micro:bit 來實現翻頁筆的案例,大家可以跳轉下面的連接去查看:

萌寵體感翻頁筆DIY教程

這次要設計的翻頁筆,功能與之前做的類似,不同點在于:

  • 主控板采用了ESP32掌控板,而且只要一塊板子就夠了,不需要兩塊板子配合;
  • 程序采用了 Arduino 代碼方式,當然在文末我也會提供圖形化代碼供參考;
  • 連接方式變成了 BLE 無線藍牙,可以兼容 Mac、WIndows、iOS、Android 等。

下面開始進入正題。

ESP32 藍牙鍵盤庫

編寫藍牙翻頁筆程序之前,我們先來了解一下 ESP32-BLE-Keyboard 這個 Arduino 庫。我們編寫翻頁筆程序主要是借助這個庫來完成。這個庫的功能,主要是將 ESP32 模擬成藍牙鍵盤,然后向電腦發送按鍵命令,比如說我們翻頁筆中會用到的:F5 按鍵(控制 PPT 開始播放)、ESC 按鍵(控制 PPT 退出播放)、還有上、下翻頁按鍵 Pg Up 和 Pg Down(或者箭頭 ← 和 →)。

使用這個庫之前,首先我們要將這個庫導入 Arduino 軟件中,具體導入方法,這里不展開了,網上隨便搜一下就有。

我們打開這個庫的頭文件 BleKeyboard.h,可以對這個庫有一個大概的了解。這個庫里面主要有以下幾個功能模塊:

BleKeyboard 對象

BleKeyboard 用來聲明藍牙鍵盤對象,用在程序開頭,用來初始化設定藍牙鍵盤的名稱 deviceName 、鍵盤生產廠商 deviceManufacturer、鍵盤電量 batteryLevel。當然你也可以不用設置,這個時候,程序就會用默認值來對鍵盤進行設置。

BleKeyboard(std::string deviceName = "ESP32 BLE Keyboard", std::string deviceManufacturer = "Espressif", uint8_t batteryLevel = 100);

begin() 和 end() 函數

這兩個函數的定義如下:

void begin(void); void end(void);

主要是用來啟動與結束鍵盤的。

press() 函數

在頭文件定義中,press() 函數有兩個:

size_t press(uint8_t k); size_t press(const MediaKeyReport k);

這兩個 press() 函數,可以用來控制按下鍵盤上的所有按鍵,比如 0-9,A-Z,以及一些特殊的功能鍵等。

注意,這邊我寫的是按下鍵盤上的按鍵,表示并沒有松開,這樣的好處是,可以控制鍵盤發送一些組合鍵。

區別在于前一個是用來控制普通按鍵的,后一個是用來控制媒體鍵(MediaKey)的。什么是媒體鍵呢?比如說控制音樂播放的上一首、下一首、暫停、控制音量的加減等,這些都是媒體鍵。

實際上我們在使用時不用去區分,程序會根據我們輸入的按鍵,自動去調用相應的函數。

比如我們要按下鍵盤上的 A 鍵,只要調用 press(‘a’) 就可以了;如果我們要按下鍵盤上的 Ctrl 按鍵,只要調用 press(KEY_LEFT_CTRL) 就可以了。普通按鍵,類似 A-Z 或者 0-9,我們只要正常輸入就可以了,但是 Ctrl 這類特殊按鍵在程序中的對應名稱是什么呢?在這個庫的頭文件 BleKeyboard.h中都有定義,讀者可以自行去查看,這里由于篇幅原因不再贅述。

release() 函數

release() 正好與 press() 函數相反,是用來控制松開鍵盤上的按鍵的,在定義中也有兩個:

size_t release(uint8_t k); size_t release(const MediaKeyReport k);

這兩個函數的區別不再贅述,press() 函數和 release() 一般組合起來使用,可以用在需用使用組合鍵的場合,比如需要使用 Ctrl + C 按鍵時,可以先按下兩個按鍵,再松開這兩個按鍵。

releaseAll() 函數

從名字就可以看出,是 release() 函數的加強版,可以一次性松開所有按鍵。比如我們同時按下 Ctrl + Alt + Delete 按鍵,可以通過 releaseAll() 函數,一次性松開 3 個按鍵。

write() 函數

write() 函數可以簡單理解為 press() 函數和 release() 函數的相加,也就是先按下按鍵,再松開按鍵,這個過程自動完成,適合用在發送單獨按鍵的場合。

size_t write(uint8_t c); size_t write(const MediaKeyReport c); size_t write(const uint8_t *buffer, size_t size);

isConnected() 函數

這個函數用來判斷 ESP32 模擬的藍牙鍵盤,是否與電腦已經配對連接。

print() 函數

除了以上這些函數之外,還有一個 print() 函數,這個函數是繼承自 Arduino 自帶的庫 Print 類的。

這個函數有什么用呢?試想一下,如果我們要一次性發送好幾個按鍵,比如電腦上輸入“Hello World!”這句話的時候,難道要調用好幾次 write() 函數來把這句話發送完成么?其實不是的,只要通過 print("Hello World!") 這一句話就夠了。

OK,有了這些講解,模擬鍵盤控制電腦就很簡單了,我們來看一下藍牙翻頁筆的程序怎么寫吧。

翻頁筆程序

完整程序

這里先把完整程序放上來:

引入頭文件

我們現在程序開頭引入了幾個頭文件,控制 OLED 顯示屏的 U8g2lib 和 Wire 庫,模擬鍵盤的 BleKeyboard 庫:

#include <U8g2lib.h> #include <Wire.h> #include <BleKeyboard.h>

然后定義了一個鍵盤對象 bleKeyboard。這里設置鍵盤的名稱為 mPython,鍵盤廠商為 Espressif,鍵盤電量為 95%。實際上這些設置都是隨意的,主要是鍵盤名稱,只要方便記憶就好了。

BleKeyboard bleKeyboard("mPython", "Espressif", 95);

接著定義了一個 OLED 屏對象 u8g2,OLED 屏幕的功能主要是提示我們控制 PPT 時按了哪個按鍵。這里需要根據你使用的 OLED 屏幕類型和連接方式來定義,先不展開講,后面有時間再專門講一講屏幕顯示的問題。掌控版自帶的 OLED 屏是通過 I2C 連接,只要通過下面的語句定義即可。

U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

setup() 初始化

然后在 setup() 初始化中,初始化串口 Serial 方便后面可以打印調試信息;初始化 OLED 屏并進行相應的設置;初始化藍牙鍵盤。

void setup() {Serial.begin(115200);// OLED 初始化u8g2.begin();u8g2.enableUTF8Print();u8g2.setFont(u8g2_font_wqy16_t_gb2312b); // 設置字體:宋體16號字u8g2.setFontPosTop(); // 設置字體的定位點為左上角u8g2.clearDisplay();// 藍牙鍵盤初始化Serial.println("Starting BLE Keyboard!");bleKeyboard.begin(); }

loop() 主程序

在 loop() 循環中,通過 bleKeyboard.isConnected() 來判斷我們的鍵盤有沒有與電腦連接上了,如果沒有連接,寫在這里面的程序是不會執行的,只有在電腦上我們與這個藍牙鍵盤配對連接之后,里面的程序才會執行。

void loop() {if (bleKeyboard.isConnected()) {// codes here ...} }

下面的程序,用來讀取掌控版上的按鍵 A 和 B,以及觸摸按鍵 P、Y、T、H、O、N 的值,通過讀取他們的值,去判斷按鍵有沒有被按下觸發。

// button A and B int buttonA = !digitalRead(0); int buttonB = !digitalRead(2);// touchpad P Y T H O N int touchpadP = touchRead(27); int touchpadY = touchRead(14); int touchpadT = touchRead(12); int touchpadH = touchRead(13); int touchpadO = touchRead(15); int touchpadN = touchRead(4);

掌控板上的按鍵 A 和 B 是數字信號,而且默認情況下高電平信號,按下按鍵,通過 digitalRead() 函數會讀取到低電平。所以前面加了個非(!),方便后面判斷。

掌控板或 ESP32 自帶了幾個觸摸按鍵,所以系統也自帶了檢測觸摸按鍵的函數 touchRead() ,觸摸按鍵讀取的值是一個模擬量。

至于這幾個按鍵的引腳編號為什么是這些呢?也就是 digitalRead() 和 touchRead() 函數里面的數字,為什么是這些呢?我們來看一下掌控板的引腳定義圖。

先來看一下上圖中的“引腳定義正面”這張圖,我們看到觸摸引腳 P 對飲的編號是 P23。再來看一下芯片引腳定義,P23 對應的芯片引腳是 IO27。在 Arduino 程序中,我們實際上編寫的是芯片引腳,所以讀取觸摸引腳 P 的值時,我們在 touchRead() 函數中的數字是 27。其他幾個觸摸引腳對應的芯片引腳 IO 口,讀者可以自己對應查一下。

讀者也可以查詢掌控板的官方文檔,獲取掌控板引腳定義: https://mpython.readthedocs.io/zh/master/board/hardware.html
如果使用的是其他 ESP32 開發板的話,也可以查詢相應的官方產品資料,獲取對應的引腳編號。

然后通過判斷按鍵 A 和 B 的值,控制 PPT 開始播放與結束播放。控制 PPT 播放,我們只要按 F5 鍵即可以,所以調用的程序是 bleKeyboard.write(KEY_F5);結束 PPT 播放,只要按 ESC 鍵即可以,所以調用的程序是bleKeyboard.write(KEY_ESC)。注意,由于是程序控制鍵盤,所以加了 delay(500) 程序,以防止按鍵按得太快。

// Start PPT if (buttonA) {Serial.println("Button A pressed!");Serial.println("Sending key: F5 (start PPT");display("開始播放");bleKeyboard.write(KEY_F5);delay(500); }// Quit PPT if (buttonB) {Serial.println("Button B pressed!");Serial.println("Sending key: ESC (quit PPT)");display("結束播放");bleKeyboard.write(KEY_ESC);delay(500); }

里面的 display() 函數后面再講,是用來控制掌控板的 OLED 顯示屏上顯示相應的提示語的,比如“開始播放”、“結束播放”等。

同樣道理,我們可以通過檢測觸摸按鍵 P 和 N 的值,來控制 PPT 播放上一頁和下一頁,這里分別用 bleKeyboard.write(KEY_LEFT_ARROW) 和 bleKeyboard.write(KEY_RIGHT_ARROW) 來控制。

// Previous page if (touchpadP < 20 && touchpadP > 0) {Serial.println("Touchpad P touched!");Serial.println("Sending key: <-- (previous page)");display("上一頁");bleKeyboard.write(KEY_LEFT_ARROW);delay(500); }// Next page if (touchpadN < 20 && touchpadN > 0) {Serial.println("Touchpad N touched!");Serial.println("Sending key: --> (next page)");display("下一頁");bleKeyboard.write(KEY_RIGHT_ARROW);delay(500); }

至此,主程序也講解完成了,邏輯是不是很簡單,只要通過判斷掌控板上哪個按鍵被按下了,模擬鍵盤觸發相應的按鍵行為就好了。

display() 函數

在程序中,我們還定義了另外一個函數 display(String tipsOnScreen),它的功能是根據掌控板上的按鍵,用來控制 OLED 顯示相應的內容的,直接看代碼就行。

void display(String tipsOnScreen) {u8g2.firstPage();do{u8g2.clearDisplay();u8g2.setCursor(32, 24);u8g2.print(tipsOnScreen);} while (u8g2.nextPage()); }

至此,程序講解完成,上傳到掌控板即可。

連接藍牙

上面我們通過編寫程序已經將掌控板模擬成了藍牙鍵盤,接下來只要與電腦進行配對,就可以愉快的使用啦。

這里我以 Windows 10 系統為例,其他系統類似。首先打開電腦的設置,找到添加藍牙設備頁面,點擊最上面的“+”號,準備添加藍牙設備。

選擇“藍牙”,開始搜尋電腦附近的藍牙設備。

這個時候就會出現一個名稱為“mPython”的藍牙設備,“mPython”是我們在程序中給掌控板起的名字,這個邊上有一個鍵盤的圖標,說明掌控板已經被電腦識別為藍牙鍵盤了,選擇它與電腦進行配對連接即可。

連接成功后,我們就可以在藍牙設置頁面看到剛剛添加的藍牙鍵盤“mPython”了,再看一看它的電量,95%,跟程序里設置的一模一樣!

這個時候,你就可以在電腦中打開一個 PPT,試試看你的翻頁筆好不好使了~

彩蛋

看到這里的朋友,為了感謝你,所以特意留了一個彩蛋。

相信好多朋友看到代碼就頭大,所以我給大家做了一個藍牙鍵盤的圖形庫,大家只要打開 Mind+ 軟件 v1.6.2 及以上的版本,在用戶庫中加入我的藍牙鍵盤庫,就可以開始藍牙鍵盤編程之旅啦。

藍牙鍵盤庫直達網址:https://gitee.com/ironpanda/ext-BLEKeyboard

這上面有這個藍牙鍵盤庫的使用教程和簡單案例。

將上述網址添加到 Mind+ 軟件用戶庫中,如下圖所示:

導入完成后,就可以在“用戶庫”分類中看到藍牙鍵盤庫相應的編程模塊了。

本文對應的藍牙鍵盤 Mind+ 圖形程序如下:

是不是很簡單?你會了么?

代碼下載

關注本賬號,獲取代碼下載地址。

總結

以上是生活随笔為你收集整理的c++ windows 蓝牙库_蓝牙翻页笔(PPT 控制器) | ESP32学习之旅-Arduino版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。