建设网站好公司简介,做网站需要注册哪类商标,如何去除痘痘有效果,开发公司已经卖出生地本系列历史文章目录#xff1a;ESP32概述与Arduino软件准备新冠肺炎疫情数据实时显示器B 粉计数器本期给大家带来的案例是#xff1a;蓝牙翻页笔。先来看一下演示视频吧#xff1a;蓝牙翻页笔 | PPT播放控制器 | 蓝牙键盘 | 用 Arduino 玩转掌控板 ESP32 / ESP8266 | 图形化…本系列历史文章目录ESP32概述与Arduino软件准备新冠肺炎疫情数据实时显示器B 粉计数器本期给大家带来的案例是蓝牙翻页笔。先来看一下演示视频吧蓝牙翻页笔 | PPT播放控制器 | 蓝牙键盘 | 用 Arduino 玩转掌控板 ESP32 / ESP8266 | 图形化编程 | 铁熊出品_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.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-9A-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 屏对象 u8g2OLED 屏幕的功能主要是提示我们控制 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 图形程序如下是不是很简单你会了么代码下载关注本账号获取代码下载地址。