97 lines
3.5 KiB
C++
97 lines
3.5 KiB
C++
// This example code is in the Public Domain (or CC0 licensed, at your option.)
|
|
// By Victor Tchistiak - 2019
|
|
//
|
|
// This example demonstrates master mode Bluetooth connection to a slave BT device
|
|
// defined either by String "slaveName" by default "ESP32-BT-Slave" or by MAC address
|
|
//
|
|
// This example creates a bridge between Serial and Classical Bluetooth (SPP)
|
|
// This is an extension of the SerialToSerialBT example by Evandro Copercini - 2018
|
|
//
|
|
// DO NOT try to connect to phone or laptop - they are master
|
|
// devices, same as the ESP using this code - you will be able
|
|
// to pair, but the serial communication will NOT work!
|
|
//
|
|
// You can try to flash a second ESP32 with the example SerialToSerialBT - it should
|
|
// automatically pair with ESP32 running this code
|
|
// Note: Pairing is authenticated automatically by this device
|
|
|
|
#include "BluetoothSerial.h"
|
|
|
|
#define USE_NAME // Comment this to use MAC address instead of a slaveName
|
|
|
|
// Check if Bluetooth is available
|
|
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
|
|
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
|
|
#endif
|
|
|
|
// Check Serial Port Profile
|
|
#if !defined(CONFIG_BT_SPP_ENABLED)
|
|
#error Serial Port Profile for Bluetooth is not available or not enabled. It is only available for the ESP32 chip.
|
|
#endif
|
|
BluetoothSerial SerialBT;
|
|
|
|
#ifdef USE_NAME
|
|
String slaveName = "ESP32-BT-Slave"; // Change this to reflect the real name of your slave BT device
|
|
#else
|
|
String MACadd = "AA:BB:CC:11:22:33"; // This only for printing
|
|
uint8_t address[6] = {0xAA, 0xBB, 0xCC, 0x11, 0x22, 0x33}; // Change this to reflect real MAC address of your slave BT device
|
|
#endif
|
|
|
|
String myName = "ESP32-BT-Master";
|
|
|
|
void setup() {
|
|
bool connected;
|
|
Serial.begin(115200);
|
|
|
|
SerialBT.begin(myName, true);
|
|
//SerialBT.deleteAllBondedDevices(); // Uncomment this to delete paired devices; Must be called after begin
|
|
Serial.printf("The device \"%s\" started in master mode, make sure slave BT device is on!\n", myName.c_str());
|
|
|
|
#ifndef USE_NAME
|
|
SerialBT.setPin(pin);
|
|
Serial.println("Using PIN");
|
|
#endif
|
|
|
|
// connect(address) is fast (up to 10 secs max), connect(slaveName) is slow (up to 30 secs max) as it needs
|
|
// to resolve slaveName to address first, but it allows to connect to different devices with the same name.
|
|
// Set CoreDebugLevel to Info to view devices Bluetooth address and device names
|
|
#ifdef USE_NAME
|
|
connected = SerialBT.connect(slaveName);
|
|
Serial.printf("Connecting to slave BT device named \"%s\"\n", slaveName.c_str());
|
|
#else
|
|
connected = SerialBT.connect(address);
|
|
Serial.print("Connecting to slave BT device with MAC ");
|
|
Serial.println(MACadd);
|
|
#endif
|
|
|
|
if (connected) {
|
|
Serial.println("Connected Successfully!");
|
|
} else {
|
|
while (!SerialBT.connected(10000)) {
|
|
Serial.println("Failed to connect. Make sure remote device is available and in range, then restart app.");
|
|
}
|
|
}
|
|
// Disconnect() may take up to 10 secs max
|
|
if (SerialBT.disconnect()) {
|
|
Serial.println("Disconnected Successfully!");
|
|
}
|
|
// This would reconnect to the slaveName(will use address, if resolved) or address used with connect(slaveName/address).
|
|
SerialBT.connect();
|
|
if (connected) {
|
|
Serial.println("Reconnected Successfully!");
|
|
} else {
|
|
while (!SerialBT.connected(10000)) {
|
|
Serial.println("Failed to reconnect. Make sure remote device is available and in range, then restart app.");
|
|
}
|
|
}
|
|
}
|
|
|
|
void loop() {
|
|
if (Serial.available()) {
|
|
SerialBT.write(Serial.read());
|
|
}
|
|
if (SerialBT.available()) {
|
|
Serial.write(SerialBT.read());
|
|
}
|
|
delay(20);
|
|
}
|