7429| 9
|
[高级教程] 蓝牙翻页笔(PPT控制器) | ESP32轻松学 |
本系列历史文章目录: 在前面几期中,有读者反馈,因为网络原因,在 Arduino 软件中配置 ESP32 和 ESP8266 开发环境,经常会失败。所以这次我给大家带来了已经配置好开发环境的 Arduino 绿色版软件,解压即用,可直达文末获取下载地址。 本期给大家带来的案例是:蓝牙翻页笔。 先来看一下演示视频吧: # 前言 # 关于翻页笔,其实我在之前就已经给大家分享过用好搭徽章板和 micro:bit 来实现翻页笔的案例,大家可以跳转下面的连接去查看: 萌宠体感翻页笔DIY教程 这次要设计的翻页笔,功能与之前做的类似,不同点在于:
下面开始进入正题。 # ESP32 蓝牙键盘库 # 编写蓝牙翻页笔程序之前,我们先来了解一下 ESP32-BLE-Keyboard 这个 Arduino 库。我们编写翻页笔程序主要是借助这个库来完成。这个库的功能,主要是将 ESP32 模拟成蓝牙键盘,然后向电脑发送按键命令,比如说我们翻页笔中会用到的:F5 按键(控制 PPT 开始播放)、ESC 按键(控制 PPT 退出播放)、还有上、下翻页按键 Page Up 和 Page Down(或者箭头 ← 和 →)。 使用这个库之前,首先我们要将这个库导入 Arduino 软件中,具体导入方法,这里不展开了,网上随便搜一下就有。 我们打开这个库的头文件 BleKeyboard.h,可以对这个库有一个大概的了解。这个库里面主要有以下几个功能模块: ## BleKeyboard 对象 BleKeyboard 用来声明蓝牙键盘对象,用在程序开头,用来初始化设定蓝牙键盘的名称 deviceName 、键盘生产厂商 deviceManufacturer、键盘电量 batteryLevel。当然你也可以不用设置,这个时候,程序就会用默认值来对键盘进行设置。
## begin() 和 end() 函数 这两个函数的定义如下:
主要是用来启动与结束键盘的。 ## press() 函数 在头文件定义中,press() 函数有两个:
这两个 press() 函数,可以用来控制`按下`键盘上的所有按键,比如 0-9,A-Z,以及一些特殊的功能键等。 注意,这边我写的是 按下 键盘上的按键,表示并没有松开,这样的好处是,可以控制键盘发送一些组合键。 区别在于前一个是用来控制普通按键的,后一个是用来控制媒体键(MediaKey)的。什么是媒体键呢?比如说控制音乐播放的上一首、下一首、暂停、控制音量的加减等,这些都是媒体键。 实际上我们在使用时不用去区分,程序会根据我们输入的按键,自动去调用相应的函数。 比如我们要按下键盘上的 A 键,只要调用 press(‘a’) 就可以了;如果我们要按下键盘上的 Ctrl 按键,只要调用 press(KEY_LEFT_CTRL) 就可以了。普通按键,类似 A-Z 或者 0-9,我们只要正常输入就可以了,但是 Ctrl 这类特殊按键在程序中的对应名称是什么呢?在这个库的头文件 `BleKeyboard.h`中都有定义,读者可以自行去查看,这里由于篇幅原因不再赘述。 ## release() 函数 release() 正好与 press() 函数相反,是用来控制`松开`键盘上的按键的,在定义中也有两个:
这两个函数的区别不再赘述,press() 函数和 release() 一般组合起来使用,可以用在需用使用组合键的场合,比如需要使用 Ctrl + C 按键时,可以先按下两个按键,再松开这两个按键。 ## releaseAll() 函数 从名字就可以看出,是 release() 函数的加强版,可以一次性松开所有按键。比如我们同时按下 Ctrl + Alt + Delete 按键,可以通过 releaseAll() 函数,一次性松开 3 个按键。 ## write() 函数 write() 函数可以简单理解为 press() 函数和 release() 函数的相加,也就是先按下按键,再松开按键,这个过程自动完成,适合用在发送单独按键的场合。
## isConnected() 函数 这个函数用来判断 ESP32 模拟的蓝牙键盘,是否与电脑已经配对连接。 ## print() 函数 除了以上这些函数之外,还有一个 print() 函数,这个函数是继承自 Arduino 自带的库 Print 类的。 这个函数有什么用呢?试想一下,如果我们要一次性发送好几个按键,比如电脑上输入“Hello World!”这句话的时候,难道要调用好几次 write() 函数来把这句话发送完成么?其实不是的,只要通过 print("Hello World!") 这一句话就够了。 OK,有了这些讲解,模拟键盘控制电脑就很简单了,我们来看一下蓝牙翻页笔的程序怎么写吧。 # 翻页笔程序 # ## 完整程序 这里先把完整程序放上来: ## 引入头文件 我们现在程序开头引入了几个头文件,控制 OLED 显示屏的 U8g2lib 和 Wire 库,模拟键盘的 BleKeyboard 库:
然后定义了一个键盘对象 bleKeyboard。这里设置键盘的名称为 mPython,键盘厂商为 Espressif,键盘电量为 95%。实际上这些设置都是随意的,主要是键盘名称,只要方便记忆就好了。
接着定义了一个 OLED 屏对象 u8g2,OLED 屏幕的功能主要是提示我们控制 PPT 时按了哪个按键。这里需要根据你使用的 OLED 屏幕类型和连接方式来定义,先不展开讲,后面有时间再专门讲一讲屏幕显示的问题。掌控版自带的 OLED 屏是通过 I2C 连接,只要通过下面的语句定义即可。
## setup() 初始化 然后在 setup() 初始化中,初始化串口 Serial 方便后面可以打印调试信息;初始化 OLED 屏并进行相应的设置;初始化蓝牙键盘。
## loop() 主程序 在 loop() 循环中,通过 bleKeyboard.isConnected() 来判断我们的键盘有没有与电脑连接上了,如果没有连接,写在这里面的程序是不会执行的,只有在电脑上我们与这个蓝牙键盘配对连接之后,里面的程序才会执行。
下面的程序,用来读取掌控版上的按键 A 和 B,以及触摸按键 P、Y、T、H、O、N 的值,通过读取他们的值,去判断按键有没有被按下触发。
掌控板上的按键 A 和 B 是数字信号,而且默认情况下高电平信号,按下按键,通过 digitalRead() 函数会读取到低电平。所以前面加了个非(!),方便后面判断。 掌控板或 ESP32 自带了几个触摸按键,所以系统也自带了检测触摸按键的函数 touchRead() ,触摸按键读取的值是一个模拟量。 至于这几个按键的引脚编号为什么是这些呢?也就是 digitalRead() 和 touchRead() 函数里面的数字,为什么是这些呢?我们来看一下掌控板的引脚定义图。 先来看一下上图中的“引脚定义正面”这张图,我们看到触摸引脚 P 对饮的编号是 P23。再来看一下芯片引脚定义,P23 对应的芯片引脚是 IO27。在 Arduino 程序中,我们实际上编写的是芯片引脚,所以读取触摸引脚 P 的值时,我们在 touchRead() 函数中的数字是 27。其他几个触摸引脚对应的芯片引脚 IO 口,读者可以自己对应查一下。 读者也可以查询掌控板的官方文档,获取掌控板引脚定义: 然后通过判断按键 A 和 B 的值,控制 PPT 开始播放与结束播放。控制 PPT 播放,我们只要按 F5 键即可以,所以调用的程序是 bleKeyboard.write(KEY_F5);结束 PPT 播放,只要按 ESC 键即可以,所以调用的程序是 bleKeyboard.write(KEY_ESC)。注意,由于是程序控制键盘,所以加了 delay(500) 程序,以防止按键按得太快。
里面的 display() 函数后面再讲,是用来控制掌控板的 OLED 显示屏上显示相应的提示语的,比如“开始播放”、“结束播放”等。 同样道理,我们可以通过检测触摸按键 P 和 N 的值,来控制 PPT 播放上一页和下一页,这里分别用 bleKeyboard.write(KEY_LEFT_ARROW) 和 bleKeyboard.write(KEY_RIGHT_ARROW) 来控制。
至此,主程序也讲解完成了,逻辑是不是很简单,只要通过判断掌控板上哪个按键被按下了,模拟键盘触发相应的按键行为就好了。 ## display() 函数 在程序中,我们还定义了另外一个函数 display(String tipsOnScreen),它的功能是根据掌控板上的按键,用来控制 OLED 显示相应的内容的,直接看代码就行。
至此,程序讲解完成,上传到掌控板即可。 # 连接蓝牙 # 上面我们通过编写程序已经将掌控板模拟成了蓝牙键盘,接下来只要与电脑进行配对,就可以愉快的使用啦。 这里我以 Windows 10 系统为例,其他系统类似。首先打开电脑的设置,找到添加蓝牙设备页面,点击最上面的“+”号,准备添加蓝牙设备。 选择“蓝牙”,开始搜寻电脑附近的蓝牙设备。 这个时候就会出现一个名称为“mPython”的蓝牙设备,“mPython”是我们在程序中给掌控板起的名字,这个边上有一个键盘的图标,说明掌控板已经被电脑识别为蓝牙键盘了,选择它与电脑进行配对连接即可。 连接成功后,我们就可以在蓝牙设置页面看到刚刚添加的蓝牙键盘“mPython”了,再看一看它的电量,95%,跟程序里设置的一模一样! 这个时候,你就可以在电脑中打开一个 PPT,试试看你的翻页笔好不好使了~ # 彩蛋 # 看到这里的朋友,为了感谢你,所以特意留了一个彩蛋。 相信好多朋友看到代码就头大,所以我给大家做了一个蓝牙键盘的图形库,大家只要打开 Mind+ 软件 v1.6.2 及以上的版本,在用户库中加入我的蓝牙键盘库,就可以开始蓝牙键盘编程之旅啦。 蓝牙键盘库直达网址:https://gitee.com/ironpanda/ext-BLEKeyboard 这上面有这个蓝牙键盘库的使用教程和简单案例。 将上述网址添加到 Mind+ 软件用户库中,如下图所示: 导入完成后,就可以在“用户库”分类中看到蓝牙键盘库相应的编程模块了。 本文对应的蓝牙键盘 Mind+ 图形程序如下: 是不是很简单?你会了么?学会了的话,就点个“在看”吧~ # 代码下载 # 欢迎关注公众号:铁熊玩创客,不定期更新创客制作、技术教程、创客教育等相关内容。
|
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed