Converting example BLE sketch to usable ESP32 BLE Sketch?

I have a Adafruit HUZZAH32 and came across a sketch for an Adafruit Feather 32u4. I found it in this tutorial. I’d like to do exactly what occurs in that sketch just with my ESP32 based module. I’m pretty sure it needs to be converted to work with ESP32 libraries. How would I go about this?

This is the original

#include <Arduino.h>
#include <SPI.h>
#include "Adafruit_BLE.h"
#include "Adafruit_BluefruitLE_SPI.h"
#include "Adafruit_BluefruitLE_UART.h"

#include "BluefruitConfig.h"

  #include <SoftwareSerial.h>


    FACTORYRESET_ENABLE       Perform a factory reset when running this sketch
                              Enabling this will put your Bluefruit LE module
                              in a 'known good' state and clear any config
                              data set in previous sketches or projects, so
                              running this at least once is a good idea.
                              When deploying your project, however, you will
                              want to disable factory reset by setting this
                              value to 0.  If you are making changes to your
                              Bluefruit LE device via AT commands, and those
                              changes aren't persisting across resets, this
                              is the reason why.  Factory reset will erase
                              the non-volatile memory where config data is
                              stored, setting it back to factory default
    MINIMUM_FIRMWARE_VERSION  Minimum firmware version to have some new features
    MODE_LED_BEHAVIOUR        LED activity, valid options are
                              "DISABLE" or "MODE" or "BLEUART" or
                              "HWUART"  or "SPI"  or "MANUAL"
    #define FACTORYRESET_ENABLE         1
    #define MINIMUM_FIRMWARE_VERSION    "0.6.6"
    #define MODE_LED_BEHAVIOUR          "MODE"

// A small helper
void error(const __FlashStringHelper*err) {
  while (1);

void setup(void)
  while (!Serial);  // required for Flora & Micro

  Serial.println(F("Adafruit Bluefruit Command Mode Example"));

  /* Initialise the module */
  Serial.print(F("Initialising the Bluefruit LE module: "));

  if ( !ble.begin(VERBOSE_MODE) )
    error(F("Couldn't find Bluefruit, make sure it's in CoMmanD mode & check wiring?"));
  Serial.println( F("OK!") );

    /* Perform a factory reset to make sure everything is in a known state */
    Serial.println(F("Performing a factory reset: "));
    if ( ! ble.factoryReset() ){
      error(F("Couldn't factory reset"));

  /* Disable command echo from Bluefruit */

  Serial.println("Requesting Bluefruit info:");
  /* Print Bluefruit information */;

  Serial.println(F("Please use Adafruit Bluefruit LE app to connect in UART mode"));
  Serial.println(F("Then Enter characters to send to Bluefruit"));

  ble.verbose(false);  // debug info is a little annoying after this point!

  /* Wait for connection */
  while (! ble.isConnected()) {

  // LED Activity command is only supported from 0.6.6
  if ( ble.isVersionAtLeast(MINIMUM_FIRMWARE_VERSION) )
    // Change Mode LED Activity
    Serial.println(F("Change LED activity to " MODE_LED_BEHAVIOUR));
    ble.sendCommandCheckOK("AT+HWModeLED=" MODE_LED_BEHAVIOUR);

void loop(void)
  // Check for user input
  char inputs[BUFSIZE+1];

  if ( getUserInput(inputs, BUFSIZE) )
    // Send characters to Bluefruit
    Serial.print("[Send] ");


    // check response stastus
    if (! ble.waitForOK() ) {
      Serial.println(F("Failed to send?"));

  // Check for incoming characters from Bluefruit
  if (strcmp(ble.buffer, "OK") == 0) {
    // no data
  // Some data was found, its in the buffer
  Serial.print(F("[Recv] ")); Serial.println(ble.buffer);

bool getUserInput(char buffer[], uint8_t maxSize)
  // timeout in 100 milliseconds
  TimeoutTimer timeout(100);

  memset(buffer, 0, maxSize);
  while( (!Serial.available()) && !timeout.expired() ) { delay(1); }

  if ( timeout.expired() ) return false;

  uint8_t count=0;
    count += Serial.readBytes(buffer+count, maxSize);
  } while( (count < maxSize) && (Serial.available()) );

  return true;

Did you make any headway with this? I have the same issue....and was just thinking about doing it

ESP32 has its own ble stack. You would be better off to use it than to trying to convert the above sketch.

So you just want to send user input to a BLE host as a virtual serial port? That appears to be what the command "AT+BLEUARTTX" (BLE UART Transmit) does on a Bluefruit. I don't see why you would do anything special on the ESP32 since it doesn't have an AT Command Mode.