-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBLE_HID.ino
More file actions
108 lines (89 loc) · 3.56 KB
/
BLE_HID.ino
File metadata and controls
108 lines (89 loc) · 3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <BLE2902.h>
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
// Define the UUIDs for the services and characteristics
#define SERIAL_HID_SERVICE_UUID "00001812-0000-1000-8000-00805f9b34fb"
#define SERIAL_HID_TX_CHARACTERISTIC_UUID "00002a4d-0000-1000-8000-00805f9b34fb"
#define SERIAL_HID_RX_CHARACTERISTIC_UUID "00002a4c-0000-1000-8000-00805f9b34fb"
#define KEYBOARD_HID_SERVICE_UUID "00001803-0000-1000-8000-00805f9b34fb"
#define KEYBOARD_HID_CHARACTERISTIC_UUID "00002a2d-0000-1000-8000-00805f9b34fb"
// Create the BLE Server, services, and characteristics
BLEServer* bleServer;
BLEService* serialHidService;
BLEService* keyboardHidService;
BLECharacteristic* serialHidTxCharacteristic;
BLECharacteristic* serialHidRxCharacteristic;
BLECharacteristic* keyboardHidCharacteristic;
// Button pin
const int buttonPin = 4;
// Callbacks for BLE server events
class MyServerCallbacks : public BLEServerCallbacks {
void onConnect(BLEServer* server) {
// Handle device connection
}
void onDisconnect(BLEServer* server) {
// Handle device disconnection
}
};
// Callbacks for receiving data on Serial HID characteristic
class SerialHidRxCallbacks : public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic* characteristic) {
std::string value = characteristic->getValue();
if (value.length() > 0) {
// Handle incoming data (Serial HID) here
}
}
};
// Callbacks for receiving data on Keyboard HID characteristic
class KeyboardHidCallbacks : public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic* characteristic) {
std::string value = characteristic->getValue();
if (value.length() > 0) {
// Handle incoming data (Keyboard HID) here
}
}
};
void setup() {
Serial.begin(115200);
pinMode(buttonPin, INPUT_PULLUP);
Serial.println("Starting BLE work!");
// Initialize BLE
BLEDevice::init("ESP32");
bleServer = BLEDevice::createServer();
bleServer->setCallbacks(new MyServerCallbacks());
Serial.println("Create Serial HID Service");
// Create Serial HID Service
serialHidService = bleServer->createService(SERIAL_HID_SERVICE_UUID);
serialHidTxCharacteristic = serialHidService->createCharacteristic(
SERIAL_HID_TX_CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_NOTIFY
);
serialHidRxCharacteristic = serialHidService->createCharacteristic(
SERIAL_HID_RX_CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_WRITE
);
serialHidRxCharacteristic->setCallbacks(new SerialHidRxCallbacks());
serialHidService->start();
Serial.println("Create Keyboard HID Service");
// Create Keyboard HID Service
keyboardHidService = bleServer->createService(KEYBOARD_HID_SERVICE_UUID);
keyboardHidCharacteristic = keyboardHidService->createCharacteristic(
KEYBOARD_HID_CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_WRITE
);
keyboardHidCharacteristic->setCallbacks(new KeyboardHidCallbacks());
keyboardHidService->start();
Serial.println("Start advertising");
BLEAdvertising* advertising = BLEDevice::getAdvertising();
advertising->addServiceUUID(SERIAL_HID_SERVICE_UUID);
advertising->addServiceUUID(KEYBOARD_HID_SERVICE_UUID);
advertising->setScanResponse(true);
advertising->setMinPreferred(0x06); // functions that help with iPhone connections issue
advertising->setMinPreferred(0x12);
BLEDevice::startAdvertising();
Serial.println("Characteristic defined! Now you can read it in your phone!");
}
void loop() {
// Your main code here, if needed
}