Adafruit Bluefruit nRF52832- connected to bluetooth but can't print to serial

Disclaimer: New to BLE so apologies if my questions sound foolish, but would really appreciate some tips

-I am using the Adafruit Bluefruit nRF52832 board w/ mac

-I have successfully added the board in 'board manager' and updated the bootloader, as advised by Adafruit. All that works great

-My goal: connect to computer via Bluetooth and send data from board to computer and read via serial monitor.

-I successfully connected using LightBlue BLE app and the connection shows up in my toolbar, as well as ports in IDE.

From forums and youtube, it looks like I should be able to use the "Serial.print" function to print to serial via Bluetooth, given that everything else is connected properly. Am I missing something?

Here is an example of one of the sketches I am using to test, from the Adafruit Bluefruit nRF52832 library-

#include <bluefruit.h>

// OTA DFU service
BLEDfu bledfu;

// Peripheral uart service
BLEUart bleuart;

// Central uart client
BLEClientUart clientUart;

void setup()
{
Serial.begin(115200);
while ( !Serial ) delay(10); // for nrf52840 with native usb

Serial.println("Bluefruit52 Dual Role BLEUART Example");
Serial.println("-------------------------------------\n");

// Initialize Bluefruit with max concurrent connections as Peripheral = 1, Central = 1
// SRAM usage required by SoftDevice will increase with number of connections
Bluefruit.begin(1, 1);
Bluefruit.setTxPower(4); // Check bluefruit.h for supported values
Bluefruit.setName("Bluefruit52 duo");

// Callbacks for Peripheral
Bluefruit.Periph.setConnectCallback(prph_connect_callback);
Bluefruit.Periph.setDisconnectCallback(prph_disconnect_callback);

// Callbacks for Central
Bluefruit.Central.setConnectCallback(cent_connect_callback);
Bluefruit.Central.setDisconnectCallback(cent_disconnect_callback);

// To be consistent OTA DFU should be added first if it exists
bledfu.begin();

// Configure and Start BLE Uart Service
bleuart.begin();
bleuart.setRxCallback(prph_bleuart_rx_callback);

// Init BLE Central Uart Serivce
clientUart.begin();
clientUart.setRxCallback(cent_bleuart_rx_callback);

/* Start Central Scanning

    • Enable auto scan if disconnected
    • Interval = 100 ms, window = 80 ms
    • Filter only accept bleuart service
    • Don't use active scan
    • Start(timeout) with timeout = 0 will scan forever (until connected)
      */
      Bluefruit.Scanner.setRxCallback(scan_callback);
      Bluefruit.Scanner.restartOnDisconnect(true);
      Bluefruit.Scanner.setInterval(160, 80); // in unit of 0.625 ms
      Bluefruit.Scanner.filterUuid(bleuart.uuid);
      Bluefruit.Scanner.useActiveScan(false);
      Bluefruit.Scanner.start(0); // 0 = Don't stop scanning after n seconds

// Set up and start advertising
startAdv();
}

void startAdv(void)
{
// Advertising packet
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit.Advertising.addTxPower();

// Include bleuart 128-bit uuid
Bluefruit.Advertising.addService(bleuart);

// Secondary Scan Response packet (optional)
// Since there is no room for 'Name' in Advertising packet
Bluefruit.ScanResponse.addName();

/* Start Advertising

    • Enable auto advertising if disconnected
    • Interval: fast mode = 20 ms, slow mode = 152.5 ms
    • Timeout for fast mode is 30 seconds
    • Start(timeout) with timeout = 0 will advertise forever (until connected)
  • For recommended advertising interval
  • Technical Q&A QA1931: Using the correct Bluetooth LE Advertising and Connection Parameters for a stable connection
    */
    Bluefruit.Advertising.restartOnDisconnect(true);
    Bluefruit.Advertising.setInterval(32, 244); // in unit of 0.625 ms
    Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode
    Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds
    }

void loop()
{
// do nothing, all the work is done in callback
}

/------------------------------------------------------------------/
/* Peripheral
------------------------------------------------------------------/
void prph_connect_callback(uint16_t conn_handle)
{
// Get the reference to current connection
BLEConnection* connection = Bluefruit.Connection(conn_handle);

char peer_name[32] = { 0 };
connection->getPeerName(peer_name, sizeof(peer_name));

Serial.print("[Prph] Connected to ");
Serial.println(peer_name);
}

void prph_disconnect_callback(uint16_t conn_handle, uint8_t reason)
{
(void) conn_handle;
(void) reason;

Serial.println();
Serial.println("[Prph] Disconnected");
}

void prph_bleuart_rx_callback(uint16_t conn_handle)
{
(void) conn_handle;

// Forward data from Mobile to our peripheral
char str[20+1] = { 0 };
bleuart.read(str, 20);

Serial.print("[Prph] RX: ");
Serial.println(str);

if ( clientUart.discovered() )
{
clientUart.print(str);
}else
{
bleuart.println("[Prph] Central role not connected");
}
}

/------------------------------------------------------------------/
/* Central
------------------------------------------------------------------/
void scan_callback(ble_gap_evt_adv_report_t* report)
{
// Since we configure the scanner with filterUuid()
// Scan callback only invoked for device with bleuart service advertised
// Connect to the device with bleuart service in advertising packet
Bluefruit.Central.connect(report);
}

void cent_connect_callback(uint16_t conn_handle)
{
// Get the reference to current connection
BLEConnection* connection = Bluefruit.Connection(conn_handle);

char peer_name[32] = { 0 };
connection->getPeerName(peer_name, sizeof(peer_name));

Serial.print("[Cent] Connected to ");
Serial.println(peer_name);;

if ( clientUart.discover(conn_handle) )
{
// Enable TXD's notify
clientUart.enableTXD();
}else
{
// disconnect since we couldn't find bleuart service
Bluefruit.disconnect(conn_handle);
}
}

void cent_disconnect_callback(uint16_t conn_handle, uint8_t reason)
{
(void) conn_handle;
(void) reason;

Serial.println("[Cent] Disconnected");
}

/**

  • Callback invoked when uart received data
  • @param cent_uart Reference object to the service where the data
  • arrived. In this example it is clientUart
    */
    void cent_bleuart_rx_callback(BLEClientUart& cent_uart)
    {
    char str[20+1] = { 0 };
    cent_uart.read(str, 20);

Serial.print("[Cent] RX: ");
Serial.println(str);

if ( bleuart.notifyEnabled() )
{
// Forward data from our peripheral to Mobile
bleuart.print( str );
}else
{
// response with no prph message
clientUart.println("[Cent] Peripheral role not connected");
}
}

Please follow the advice on posting code given in posting code

In particular note the advice to Auto format code in the IDE and to use code tags when posting code here as it prevents some combinations of characters in code being interpreted as HTML commands such as italics, bold or a smiley character, all of which render the code useless

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.