The codes below are for Bluetooth Classic using HC-05 or ESP32.
In your Arduino code often you need to set certain I/O to a specific state, depending on the Bluetooth connection status.
This can be done in many ways, here is the way I do it:
If you are using HC-05, you can do it like this:
- Define a I/O pin to monitor the connection status: const int BtStatus = 2;
- Set the BtStatus pin to: pinMode (BtStatus, INPUT);
- Connect the STATE pin from the HC-05 to BtStatus pin.
- Monitor the connection in the loop().
Example:
const int BtStatus = 2;
void setup() {
Serial.begin(9600);
pinMode (BtStatus, INPUT);
}
void loop() {
if (digitalRead (BtStatus) == 1)
{
Serial.println ("Client Connected");
// Do stuff if connected
}
else
{
Serial.println ("Client Disconnected");
// Do stuff if not connected
}
}
If you are using ESP32, you can do it like this:
- Define and register a Bt_Status callback.
- Create a Bt_Status callback function.
Example:
#include "BluetoothSerial.h"
#define LED2 2 // Built-in LED
// Bluetooth Serial object
BluetoothSerial SerialBT;
// Bt_Status callback function
void Bt_Status (esp_spp_cb_event_t event, esp_spp_cb_param_t *param) {
if (event == ESP_SPP_SRV_OPEN_EVT) {
Serial.println ("Client Connected");
DigitalWrite (LED2, HIGH);
// Do stuff if connected
}
else if (event == ESP_SPP_CLOSE_EVT ) {
Serial.println ("Client Disconnected");
DigitalWrite (LED2, LOW);
// Do stuff if not connected
}
}
void setup() {
Serial.begin (115200);
PinMode (LED2, OUTPUT);
// Define the Bt_Status callback
SerialBT.register_callback (Bt_Status);
SerialBT.begin ("ESP32");
Serial.println ();
Serial.println ("Client Disconnected");
}
void loop() {
// put your main code here, to run repeatedly:
}
I hope some people find this code useful.
Mike.