手把手教学: 键鼠 有线/适配器 改无线(蓝牙/WiFi), 普通键鼠改鼠标宏

您所在的位置:网站首页 蓝牙适配器和无线接收器一样吗 手把手教学: 键鼠 有线/适配器 改无线(蓝牙/WiFi), 普通键鼠改鼠标宏

手把手教学: 键鼠 有线/适配器 改无线(蓝牙/WiFi), 普通键鼠改鼠标宏

2024-07-01 17:26:30| 来源: 网络整理| 查看: 265

一: 需要准备的材料/设备/环境:

   1.arduino1.8以上 (最好是1.8,因为2.0我没用过)

arduino1.8

   2. esp32带蓝牙的单片机*1 (改蓝牙的需要一个, 如果改WiFi需要一个esp32s2,淘宝10块钱 ),   

esp32s2

   3. ch9350模块一个  (带host的esp32 s2也可以,不过我手里只有一个s2, 用来插没蓝牙功能的台式机上了)

   4. 杜邦线几根

二 :  设备连接

    没啥好说的,直接上图

    

    这里连接的是单片机的16 17 引脚

三 : 代码(全功能代码)

    直接上图

#include //串口库

#include "CH9350_USBKEY.h"//ch9350

#include //蓝牙库

这里如果需要改WiFi就需要引用的库,只用蓝牙功能就可以不要

如果需要WiFi功能

这段程序实现WiFi发送结构体, 由于点对点,所以不需要加密

各种初始化

代码部分结束----------------------------------------------------------

四:蓝牙连接(改无线完成,学会了吗)

好了,代码直接上传之后电脑就能搜索到一个蓝牙

连接成功后将鼠标插入就能看到串口打印的鼠标信息了

同时你的电脑上的鼠标指针也会跟着动起来, 到这一步改蓝牙就完成了,可能有的人会觉得没有意义, 请接着往下看

五: WiFi连接

首先我的代码本身是支持WiFi 蓝牙同时工作的, 也就是除了之前介绍的设备外不需要其他任何辅助设备或软件

WiFi的优势:  可以实现一个鼠标同时控制多个设备而不需要设备提前安装啥软件之类的.

WiFi控制的缺点:  被控制的每个设备都需要花10块钱买一个esp32 s2 模块作为物理连接使用, 如果不用物理连接的话网上办法一堆,我就不废话了

本程序使用的WiFi方案是ESP-NOW, 想详细了解的同学请参考官方文档, NOW的控制距离受WiFi信号的约束(空旷距离一百米左右,穿墙要看多厚), 如果需要在复杂环境远程使用建议将NOW换成 ESP-MESH, mesh相较于NOW优势是理论上AB两个设备之间只要有若干个设备C,那么控制距离可以是很远很远, 铺满全国也不是不可能, NOW的优势是两个设备之间不需要连接,跟无线键鼠的原理类似.

使用WiFi的情况下需要将程序稍做改动,例如以鼠标左键为例 , jm_arr(String a) 中可以是任意值,这主要看接收端的配套程序

原程序更改之后的程序

    5. ESP32 s2 接收端程序 :      

        

由于我本身不需要使用WiFi功能,只是先弄着等以后需要的时候再玩,到这里WiFi功能介绍完毕

附上五郎esp32 s2 实现速射的视频【10块钱的简单鼠标宏】

六: 普通鼠标添加宏功能

首先感谢能耐心看到这里, 关于之前的代码部分相信大家有看到

这就是鼠标按下组合键后esp32要实现的功能

这段程序就是将鼠标左键与右键同时按住就会触发鼠标左键连续单击的程序

单击延时, 这段代码很重要!!! 

    这段代码很重要!!! 如果不想玩游戏被封号的话请一定要注意,!!

    目前大多数游戏都排斥鼠标宏, 想我这个案例使用的严格来讲属于物理外挂, 但是各大游戏厂商都只能通过判断游戏内的数据普通人能不能办到从而来判断是不是使用了外挂, 像我现在这个配置就是我自己按鼠标能达到的一个平均值.

     玩FPS游戏的时候也能自己调节压枪,当然也可以调节武器射速

右后

这一段是将鼠标右键与后退键同时按住就触发左右键同时按住的程序, 比如你想要扫射的时候但是锁了射速就可以这样解决

这一段是触发后就用WiFi发送一条消息出去,比如桌子接收到后就亮红光,RGB开始光污染等等, 我这里是通知键盘可以按下"R"键了

七: 如果觉得有用还请点个三连,附代码鼠标端口

#include //Serial Interfaces

#include "CH9350_USBKEY.h"

#include

#include

#include

BleMouse bleMouse;

//IOs for CH9350 used on ESP32

#define RXKEY 16

#define TXKEY 17

HardwareSerial SerialKey(2);   //Keyboard USB to Serial CH9350 @ Serial Interface 1

USB9350_KeyMouse USBKeyMouse;  //Create an Instance for Keyboard/ Mouse Decoder

int x, y, z, x1, yi, Button;

unsigned long StartTime, StartTime1, sbmov;

unsigned long rrl; //按键延时

// >>> >>> >>

// REPLACE WITH THE MAC Address of your receiver

uint8_t mac_to[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

typedef struct test_struct  {                         // 设置ESP-NOW数据结构体

  char a[250];

} test_struct ;

test_struct  to_str;

//创建类型变量esp_now_peer_info_t存储有关对等点的信息。

esp_now_peer_info_t peerInfo;

void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {

  String st = status ? "No!" : "Ok!";

  Serial.println("`发送回调 :" + st + " `");

}

// >>> >>> >>

void jm_arr(String a) {

  //  char jm = 'z';  //加密

  //  char lls[245];

  //  a.toCharArray(lls, sizeof(lls));

  //  for (int i = 0; i < a.length(); i++) {

  //    if (lls[i] != jm) {

  //      lls[i] = (char)(lls[i] ^ jm);

  //    }

  //  }

  //  String(lss).toCharArray(to_str.a, sizeof(to_str.a));

  String(a).toCharArray(to_str.a, sizeof(to_str.a));

  esp_now_send(mac_to, (uint8_t *)&to_str, sizeof(to_str));

}

// >>> >>> >>

void setup()

{

  WiFi.mode(WIFI_STA);

  Serial.begin(115200);

  Serial.println("Start");

  Serial.println("[OLD] MAC: " + WiFi.macAddress());

  Serial.println("NEW Wi-Fi 通道: " + String(WiFi.channel()));

  bleMouse.begin();

  SerialKey.begin(115200, SERIAL_8N1, RXKEY, TXKEY);

  USBKeyMouse.begin(SerialKey);

  Serial.printf("CH9350_USBKEY Demonstration\n");

  Serial.printf("14. September 2022 By Jann Oesch\n");

  Serial.printf("Press any key or move the mouse. Press space to change ASCII to RAW mode for keyboard\n");

  Serial.printf("Press left mousebutton to set the coordinate to 1000/1000 ant the right one for 0/0\n\n");

  if (esp_now_init() != ESP_OK) return;  //ESP-NOW初始化

  esp_now_register_send_cb(OnDataSent);  //发送回调

  //  esp_now_register_recv_cb(OnDataRecv);  //接收回调

  memcpy(peerInfo.peer_addr, mac_to, 6); //配对点

  peerInfo.channel = 0;

  peerInfo.encrypt = false;

  if (esp_now_add_peer(&peerInfo) != ESP_OK) {

    Serial.println("Failed to add peer mac1");

    return;

  }

}

void loop() {

  int Change = USBKeyMouse.GetMouseXY(&x, &y, &z, &Button);

  if (Change) {

    Serial.printf("Mouse X: %d, Y: %d Z: %d Button:%d\n", x, y, z, Button);

    sbmov = millis();

  } 

//  else if ((millis() - sbmov) > 10000) { //10秒未动鼠标清空坐标

//    USBKeyMouse.SetMouseXY(0, 0);

//    x1 = 0;

//    yi = 0;

//  }

  if (bleMouse.isConnected()) { //如果蓝牙连接成功

    sbmov_go(Change);  //鼠标篇

  }

}

//鼠标按钮及移动

void sbmov_go(int Change) {

  if (Change) {//滚轮

    if (z == 1) bleMouse.move(0, 0, 1);

    else if (z == 255) {

      bleMouse.move(0, 0, -1);

    }

  }

  //xy

  int x2 = x - x1;

  int y2 = y - yi;

  if ((x2 != 0) || (y2 != 0)) {

    bleMouse.move(x2, y2);

    x1 = x;

    yi = y;

  }

  if (Button == 6) {                            //右中键同时

    bleMouse.press(MOUSE_RIGHT | MOUSE_MIDDLE);

  } else if (Button == 10) {                    //右后键同时

    bleMouse.press(MOUSE_RIGHT | MOUSE_LEFT);

  } else if ((Button == 11) || (Button == 3)) { //右后左键同时 || 左右键同时

    if (!bleMouse.isPressed(MOUSE_RIGHT)) {

      bleMouse.press(MOUSE_RIGHT);

    }

    if (millis() > StartTime1) {                //同时按下执行鼠标连点

      bleMouse.click(MOUSE_LEFT);

      StartTime1 = millis() + random(120, 153);

      //      bleMouse.move(0, 10);//鼠标下移 压枪

    }

  } else  if (Button == 17) {                   //左键 前进键 执行r r 左

    if (millis() > rrl) {

      jm_arr("r");

      rrl = millis() + 190;//延时

      StartTime1 = millis() + random(85, 90);//延时

    } else if (millis() > StartTime1) {

      bleMouse.click(MOUSE_LEFT);

      StartTime1 = millis() + 500;//延时

    }

  } else if (Button == 9) {                      //左键 后退键 同时按下执行鼠标连点

    if (millis() > StartTime1) {

      bleMouse.click(MOUSE_LEFT);

      StartTime1 = millis() + random(85, 113);//延时

    }

  } else

  {

    // if 左键

    if (Button == 1) {

      if (!bleMouse.isPressed(MOUSE_LEFT)) {

        bleMouse.press(MOUSE_LEFT);

      }

    }

    else if (bleMouse.isPressed(MOUSE_LEFT)) {

      bleMouse.release(MOUSE_LEFT);

    }

    //右键

    if (Button == 2)  {

      if (!bleMouse.isPressed(MOUSE_RIGHT)) {

        bleMouse.press(MOUSE_RIGHT);

      }

    }

    else if (bleMouse.isPressed(MOUSE_RIGHT)) {

      bleMouse.release(MOUSE_RIGHT);

    }

    //中键

    if (Button == 4) {

      if (!bleMouse.isPressed(MOUSE_MIDDLE)) {

        bleMouse.press(MOUSE_MIDDLE);

      }

    } else if (bleMouse.isPressed(MOUSE_MIDDLE)) {

      bleMouse.release(MOUSE_MIDDLE);

    }

    //后退

    if (Button == 8) {

      if (!bleMouse.isPressed(MOUSE_BACK)) {

        bleMouse.press(MOUSE_BACK);

      }

    } else if (bleMouse.isPressed(MOUSE_BACK)) {

      bleMouse.release(MOUSE_BACK);

    }

    //前进

    if (Button == 16) {

      if (!bleMouse.isPressed(MOUSE_FORWARD)) {

        bleMouse.press(MOUSE_FORWARD);

      }

    } else if (bleMouse.isPressed(MOUSE_FORWARD)) {

      bleMouse.release(MOUSE_FORWARD);

    }

  }

}



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭