视频加载失败

我去图书馆远程蓝牙签到

1045 字
5 分钟
我去图书馆远程蓝牙签到
我去图书馆远程蓝牙签到

esp32实现我去图书馆远程蓝牙签到#

背景#

由于冬天非常寒冷,很容易把我们冻死 (bushi),所以早上人与床往往难舍难分;但是另一方面又要早起去图书馆签到,因此我们很容易陷入两难的境地。

实现#

刚好前些日子在小黄鱼上看到了一个我去图书馆远程签到的软件,当即给他买了下来,很快,啊。但是呢,有个缺点就是需要两个移动设备才能签到成功。

这里简单介绍一下方法:

  1. 两个移动设备(平板or手机)确保都打开蓝牙,其中一个下载BrightBeacon,苹果: appstore下载,安卓: 下载链接
  2. 底部导航栏中间蓝色选项 -> 模拟Beacon -> 分别填入 UUID: FDA50693-A4E2-4FB1-AFCF-C6EB07647825, Major: 10199, Minor: 42474
  3. 用另一个设备进行蓝牙签到就行了

刚好这两天又看到了一个关于esp32蓝牙模拟应用的视频(bilibili),于是去GitHub上面搜了一下,果然找到一个关于用esp32模拟蓝牙签到的项目,京东上面一看,一个esp32的板子才二十来块钱,直接就给他拿下了。等了三天,板子到货了,直接拿去跟着GitHub的教程跑了一遍,可惜并没有达到预期效果。

于是慢慢顺着问题寻找解决方案,第一次知道原来这个数据线还分充电线和数据线的!充电线只能充电,数据线还可以进行数据传输,但我一开始用的几根线都是充电线(这些usb线都是当时买的一些其他设备送的,也怪不得),导致电脑已知无法识别板子,哎 : ( 又花了十块钱买了根数据线(以前买东西都买的快递,现在发现有些东西直接外卖就行了~真的很快啊,半个小时就到了)

然后就开始各种找教程找方法,一开始都是问的chatgpt,但是chatgpt给的代码全都是错误,果然AI还是靠不住啊,关键时候还是得靠自己。网上找了一圈,又找不到相关的代码,最后没办法,干脆直接开始学习esp32蓝牙开发。这里找到一个很详细的基础教程。跟着教程一步一步,最后结合上面的GitHub的部分代码,经过在宿舍的测试,最后也是实现了远程签到。

和爬虫还是挺像的感觉,就是抓包+模拟的一个过程。

代码#

以下是代码部分:

#include <BLEDevice.h>
#define SERVICE_UUID "FDA50693-A4E2-4FB1-AFCF-C6EB07647825" // 自己通过brightbeacon以及nRF Connect抓到的签到的UUID
uint8_t bleRaw[] = {0x02,0x01,0x06,0x1A,0xFF,0x4C,0x00,0x02,0x15,0xFD,0xA5,0x06,0x93,0xA4,0xE2,0x4F,0xB1,0xAF,0xCF,0xC6,0xEB,0x07,0x64,0x78,0x25,0x27,0xD7,0xA5,0xEA,0xC5}; // nRF Connect中抓到的广播数据
class MyServerCallbacks: public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) {
      Serial.println("签到成功辽~"); // 好像并没什么卵用
      pServer->startAdvertising(); // 有客户端连接后广播会停止,这里再次打开使其它设备可以搜索到
    };
    void onDisconnect(BLEServer* pServer) {}
};
void setup() {
  Serial.begin(115200);
  Serial.println();
  BLEDevice::init("ESP32-BLE");
  BLEServer *pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());
  BLEService *pService = pServer->createService(SERVICE_UUID);
  pService->start();
  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising(); // 获取Advertising对象
  // 设备信息设置成空白的
  BLEAdvertisementData oScanResponseData = BLEAdvertisementData();
  pAdvertising->setScanResponseData(oScanResponseData);
  // 里面有个 m_customScanResponseData = true; 和 m_customScanResponseData = true; 所以只能先随便设置一下
  BLEAdvertisementData oAdvertisementData = BLEAdvertisementData();
  pAdvertising->setAdvertisementData(oAdvertisementData);
    // 简单粗暴直接底层api重新设置一下抓到的raw
  esp_err_t errRc = ::esp_ble_gap_config_adv_data_raw(bleRaw, 31);
  if (errRc != ESP_OK) {
    Serial.printf("esp_ble_gap_config_adv_data_raw: %d\n", errRc);
  }
  // pAdvertising->setMaxInterval(30);
  pAdvertising->addServiceUUID(SERVICE_UUID); // 广播Service的UUID
  BLEDevice::startAdvertising();
}
void loop() {}

TODO#

目前还是需要早上醒来手动进行签到,下一步打算开发一个手机上面的脚本,早上到时间就自动进行签到。

历史评论#

1500302659 ·

非常有用

哈哈哈 ·

大佬,我用了你的这个方法用iPad模拟手机签到在图书馆的话可以实现,在宿舍的话签到不上显示找不到设备,是不是因为定位的原因,有什么方法可以解决吗?

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
我去图书馆远程蓝牙签到
https://blog.ikarox.cn/posts/我去图书馆远程蓝牙签到/
作者
世間的美好
发布于
2025-01-03
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
Codex 每次都重连5次——可能是 WebSocket 没走代理
软件Codex 启动后反复显示 Reconnecting,通常是普通 HTTP 请求可以通过代理,但 WebSocket 没有正确走代理。本文介绍对应的代理配置和排查方法。
2
LX Music 桌面重置版:多平台推荐、歌单管理与个人音乐库
软件把不同平台的推荐和歌单,以及本地、云端的音乐收藏,放进同一个桌面播放器,让找歌、整理和播放都更方便。
3
阿里云+宝塔面板防火墙开放
技术使用阿里云服务器安装了宝塔面板之后,如果宝塔面板也开启了防火墙,则需要在两边都设置端口的开放。 如果遇到要开通某个端口访问的情况,必须在对应的控制台中的安全组和宝塔面板的安全中都打开这个端口,只打开其中一个的话,这个端口对外仍然是无法访问的。 至于宝塔面板防火墙和云服务器安全组的区别和联系, 参考这个文章。 此外,还需…
4
键盘上一些特殊案件以及FN层、Tab层
技术由于本人笔记本上面按键有限,因此对于很多的特殊功能按键不太熟悉,下面总结一下: 六个自带的功能按键 Home & End 1.光标锁定在编辑文字 Home键在编辑文字的时候可以跳转到行首,End则跳转到行末。 2.光标未锁定的时候 Home键跳转到网页或其他页面顶部, End跳转到底部。 PadgeUp & PageD…
5
2025-11408总结
学习70 + 75 + 120 + 127 = 392。 整个复习过程: 3月中才开始,才决定开始考研,院校考试科目啥的还没了解。 先选择了408,因为可选择的院校多,后面就是决定考11408还是22408(我是后来才选择的院校,但是其实一开始已经有一点选择了,比如省内的东大、南大),后来感觉我比较倾向于11408的一些学…
随机文章随机推荐

评论区

Profile Image of the Author
世間的美好
Hello, I'm Firefly.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
6
分类
3
标签
18
总字数
7,389
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录