Для соединения нескольких ESP32-устройств по Bluetooth Low Energy (BLE) в Arduino IDE, вы можете использовать библиотеку ESP32 BLE Arduino. Эта библиотека предоставляет удобные функции для создания серверов и клиентов GATT, а также для обмена данными по BLE.
Вот простой пример, демонстрирующий, как установить соединение BLE между двумя ESP32-устройствами с использованием Arduino IDE и ESP32 BLE Arduino:
ESP32 A:
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
// Уникальный идентификатор сервиса
#define SERVICE_UUID "12345678-1234-5678-1234-56789abcdef"
// Уникальный идентификатор характеристики
#define CHARACTERISTIC_UUID "12345678-1234-5678-1234-56789abcdef"
BLEServer *pServer;
BLECharacteristic *pCharacteristic;
void setup() {
Serial.begin(115200);
BLEDevice::init("ESP32 A");
pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setCallbacks(new MyCallbacks());
pCharacteristic->addDescriptor(new BLE2902());
pService->start();
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->start();
}
void loop() {
// Основной код программы
}
ESP32 B:
#include <BLEDevice.h>
#include <BLEClient.h>
#include <BLEUtils.h>
#include <BLE2902.h>
// Уникальный идентификатор сервиса
#define SERVICE_UUID "12345678-1234-5678-1234-56789abcdef"
// Уникальный идентификатор характеристики
#define CHARACTERISTIC_UUID "12345678-1234-5678-1234-56789abcdef"
BLEClient *pClient;
BLECharacteristic *pCharacteristic;
class MyCallbacks: public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
std::string value = pCharacteristic->getValue();
Serial.println("Received: " + value);
}
};
void setup() {
Serial.begin(115200);
BLEDevice::init("ESP32 B");
pClient = BLEDevice::createClient();
pClient->connect(BLEAddress("A4:CF:12:34:56:78"));
BLERemoteService *pRemoteService = pClient->getService(SERVICE_UUID);
pCharacteristic = pRemoteService->getCharacteristic(CHARACTERISTIC_UUID);
pCharacteristic->setCallbacks(new MyCallbacks());
pCharacteristic->writeValue("Hello from ESP32 B");
}
void loop() {
// Основной код программы
}
В этом примере ESP32 A выступает в роли сервера GATT, а ESP32 B выступает в роли клиента GATT.
Рассмотрим, как обрабатывать запросы на чтение и запись характеристики между ESP32 A и ESP32 B.
ESP32 A:
class MyCallbacks: public BLECharacteristicCallbacks {
void onRead(BLECharacteristic *pCharacteristic) {
pCharacteristic->setValue("Hello from ESP32 A");
}
void onWrite(BLECharacteristic *pCharacteristic) {
std::string value = pCharacteristic->getValue();
Serial.println("Received: " + value);
}
};
В этом обновленном коде мы переопределяем методы onRead
и onWrite
в классе MyCallbacks
. Метод onRead
вызывается, когда клиент запрашивает чтение значения характеристики. Мы устанавливаем значение характеристики на “Hello from ESP32 A”. Метод onWrite
вызывается, когда клиент пытается записать значение характеристики. Мы выводим полученное значение в монитор порта.
ESP32 B:
void setup() {
// ...
pCharacteristic->setCallbacks(new MyCallbacks());
pCharacteristic->writeValue("Hello from ESP32 B");
delay(2000);
std::string value = pCharacteristic->readValue();
Serial.println("Read: " + value);
}
В этом обновленном коде ESP32 B использует метод readValue
для чтения значения характеристики с ESP32 A. Мы выводим полученное значение в монитор порта.
Обратите внимание, что вам также может понадобиться обработка разрыва соединения, повторного подключения и других событий BLE, в зависимости от ваших конкретных требований и протокола обмена данными.
Надеюсь, эти примеры помогут вам начать работу с соединением нескольких ESP32 по BLE в Arduino IDE с использованием библиотеки ESP32 BLE Arduino.