0
点赞
收藏
分享

微信扫一扫

MicroByte蓝牙手柄初探

罗子僧 2022-02-26 阅读 63
github

https://github.com/lemmingDev/ESP32-BLE-Gamepad

很早就想把microbyte做成蓝牙手柄。最近摆弄世嘉手柄。就想过把世嘉五代手柄连上电脑。(网上有图纸)后来想想com/usb/的迭代有够麻烦的。

在查看的过程发现esp32 模拟电脑外设输入的项目还挺多的。比如这个esp32-BLE-Gamepad

它在arduino库上有登录,readme上明确说了,必须搜索
ESP32-BLE-Gamepad
才能搜索出来。安装好后就有BleGamepad.

打开testall例程。里面是测试手柄128个键是否有反馈,就是说连接上的电脑接收没有,就是说等于它把所有顺序按了一遍(你并没有动手)

结合TGA9555的代码(请参考我关于TGA9555的文章,我修改如下
arduino 代码
#include <BleGamepad.h>
#include “TCA9555.h”
#include <SPI.h>
#include <Wire.h>

#include <TFT_eSPI.h> // Hardware-specific library

TFT_eSPI tft = TFT_eSPI(); // Invoke custom library

TCA9555 TCA(0x20);

BleGamepad bleGamepad;

void setup(void) {
Serial.begin(115200);
Serial.println(“Starting BLE work!”);
bleGamepad.setAutoReport(false);
bleGamepad.setControllerType(CONTROLLER_TYPE_GAMEPAD); //CONTROLLER_TYPE_JOYSTICK, CONTROLLER_TYPE_GAMEPAD (DEFAULT), CONTROLLER_TYPE_MULTI_AXIS
bleGamepad.begin(); //Simulation controls are disabled by default

tft.init();

tft.fillScreen(TFT_BLACK);

Wire.begin();
TCA.begin();

}

void loop() {
tft.fillScreen(TFT_BLACK);
for (int pin = 0; pin < 16; pin++)
{
int val = TCA.digitalRead(pin);
tft.setCursor(0, pin20, 4);
tft.setTextColor(TFT_BLUE, TFT_BLACK);
tft.println(pin);
tft.setCursor(100, pin
20, 4);
tft.println(val);
if (val == 0){
bleGamepad.press(pin);
bleGamepad.sendReport();
delay(100);
bleGamepad.release(pin);
bleGamepad.sendReport();
delay(25);
}
}
}
//不要说我没有任何注释。其实很好理解的按键反馈通过microbyte的屏幕显示。然后按键序号直接送到bleGamepad(完)

唠叨唠叨。开始构思的代码会不会用到case switch 又参考microbyte源代码对TGA9555的控制判断……竟然用if(size==0) 好吧我也只有用if判断了,有没有不用if的代码。
电脑接收什么代码才形成上下左右的判断呢,我也是太多思虑。竟然被arduino简化成1-128
就如同蓝牙,你也不用考虑它如何工作了,只要两设备握手通过了,就可以象 com一样传数据了。
至此,终于可以和电脑连上了吧。可惜我没法连上,但是连上手机,可以控制手机,哈哈(尽管只有两个操作,打开和关闭,嘎嘎)
天气图标被套中了,可以打开或关闭

电脑上的蓝牙或许本身问题或者驱动问题。可就是不能搜索设备出来。
在控制面板搜索,蓝牙
我找到2000年的蓝牙1.1死活搜出手机和蓝牙音箱,但是还是驱动和兼容问题没能连接。ESP32 BLE Gamepad无法搜索出来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

好吧,我好歹有个蓝牙手柄了。
在这里插入图片描述

举报

相关推荐

0 条评论