众所周知,掌控板在创客教育中用的非常广泛,它是一块基于 ESP32 的学习开发板。大家对掌控板编程,用的比较多的都是图形化编程的方式,比如 mPython、Mind+ 等。但是,既然掌控板是基于 ESP32 芯片的,所以我们也可以用 Arduino 软件对其编程。所以,有时间的话,我准备给大家分享一系列用 Arduino 代码对掌控板(ESP32)编程的教程:用Arduino玩转ESP32与掌控板系列。
ESP32轻松学系列文章目录:
在前面几期中,有读者反馈,因为网络原因,在 Arduino 软件中配置 ESP32 和 ESP8266 开发环境,经常会失败。所以这次我给大家带来了已经配置好开发环境的 Arduino 绿色版软件,解压即用,可直达文末获取下载地址。
本期给大家带来的案例是:蓝牙翻页笔。
先来看一下演示视频吧:
https://www.bilibili.com/video/av90824717/
前言
关于翻页笔,其实我在之前就已经给大家分享过用好搭徽章板和 micro:bit 来实现翻页笔的案例,大家可以跳转下面的连接去查看:
这次要设计的翻页笔,功能与之前做的类似,不同点在于:
- 主控板采用了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() 函数相反,是用来控制松开
键盘上的按键的,在定义中也有两个: