ESP32蓝牙模拟键盘(工作笔记)
ESP32蓝牙键盘库的位置
https://github.com/T-vK/ESP32-BLE-Keyboard
https://www.arduino.cc/reference/en/language/functions/usb/keyboard/
蓝牙库诞生于USB的库中,所以keyboard全为blekeyboard
使用的时候调用的库
KEY_MEDIA_NEXT_TRACK
KEY_MEDIA_PREVIOUS_TRACK
KEY_MEDIA_STOP
KEY_MEDIA_PLAY_PAUSE
KEY_MEDIA_MUTE
KEY_MEDIA_VOLUME_UP
KEY_MEDIA_VOLUME_DOWN
KEY_MEDIA_WWW_HOME
KEY_MEDIA_LOCAL_MACHINE_BROWSER // 在 Windows 上打开“我的电脑”
KEY_MEDIA_CALCULATOR
KEY_MEDIA_WWW_BOOKMARKS
KEY_MEDIA_WWW_SEARCH
KEY_MEDIA_WWW_STOP
KEY_MEDIA_WWW_BACK
KEY_MEDIA_CONSUMER_CONTROL_CONFIGURATION // 媒体选择
KEY_MEDIA_EMAIL_READER
ble的库是有一些媒体按键,就是播放暂停什么的
BleKeyboard bleKeyboard("Bluetooth Device Name", "Bluetooth Device Manufacturer", 100);
使用前需要写一下这个,你模拟的设备的名字以及设备制造商的名字,以及一个电量,当然是假的。
bleKeyboard.setDelay(10)
这个是设置延时时间,就是有的设备会丢掉输入快的字符。默认是8
如果真的要用,也可以设置一下这个,节省空间嗷
下面是更加数据化的内容
#define USE_NIMBLE
#include <BleKeyboard.h>
使用的时候,把这个宏写上就好。
上面就是模拟按下一个按键,下面是模拟所谓的媒体键
注意一下,就是摁下去了。
release是对应的上面松开,后面是全松开
看下乱入的这个wirte,是个啥?
最后这个函数的参数有点没有看懂
就是按下+松开的结合体。组合按键及其有用,比如模拟各种快捷键。
去源码看看
press这不是就摁了吗?
接下来这不就释放了吗
我又去看看size_t是个啥,就当成一个int看
那对比的看就是相当于,后面的这个函数
传了好多的单独的这样的按键,以至于使用了一个缓冲的空间
一开始n=0
循环减去次数,每次循环里面都去判断缓冲里面的东西不等于
这个回车,因为就是一行一串命令嘛
里面循环的载调用write函数(有点递归的感觉),每次执行变量n+1
当没有可以执行的串就break,注意是全跳出循环
当size为0时,返回一个最终的计数值n。
注意这个代码是一串字符加一个回车,是一个要发送的命令列
Keyboard.write(65); // sends ASCII value 65, or A
Keyboard.write('A'); // same thing as a quoted character
Keyboard.write(0x41); // same thing in hexadecimal
Keyboard.write(0b01000001); // same thing in binary (weird choice, but it works)
写入的参数可以是这样的,返回值是一个字节数
还有一个这样的函数吗?
BleKeyboard bleKeyboard;
void setup()
{
Serial.begin(115200);
Serial.println("Starting BLE work!");
bleKeyboard.begin();
}
void loop()
{Hello world
if (bleKeyboard.isConnected())
{
Serial.println("Sending 'Hello world'...");
bleKeyboard.print("Hello world");
delay(1000);
Serial.println("Sending Enter key...");
bleKeyboard.write(KEY_RETURN);
delay(1000);
Serial.println("Sending Play/Pause media key...");
bleKeyboard.write(KEY_MEDIA_PLAY_PAUSE);
delay(1000);
Serial.println("Sending Ctrl+Alt+Delete...");
bleKeyboard.press(KEY_LEFT_CTRL);
bleKeyboard.press(KEY_LEFT_ALT);
bleKeyboard.press(KEY_DELETE);
delay(100);
bleKeyboard.releaseAll();
}
Serial.println("Waiting 5 seconds...");
delay(5000);
}
自带的demo不错子~
媒体按键的调用
快捷键的编组使用
我迷惑一点是,我都刷过这个程序了,居然现在屏幕还亮着。
https://github.com/arduino-libraries/Keyboard/
最后补一点,ble是从USB的库来的,所以大家可以看这个库掌握最初的设计思想。
赞 (0)