Arduino library for nRF51822-based Adafruit Bluefruit LE modules

Overview

This library is for all nRF51 based Adafruit Bluefruit LE modules that use SPI or UART.

Current nRF51 based Bluefruit LE products include:

AT Commands

The Bluefruit LE modules this library talks to use AT-style commands and responses.

If you are using a UART board, the commands are sent directly as text using a SW serial transport.

If your are using an SPI board, the AT commands are wrapped in a thin SDEP (Simple Data Exchange Protocol) wrapper to transmit and received text data over the binary SPI transport. Details of this SPI transport layer are detailed in SDEP.md in this same folder.

Hardware Setup

There are two variants of the nRF51 Bluefruit LE modules. One uses SPI to communicate, the other uses UART with flow control (TXD, RXD, CTS, RTS). The wiring you use will depend on the module you are trying to connect.

On both boards, power should be connected as shown below:

Bluefruit LE Arduino Uno
VIN 5V (assuming a 5V board)
GND GND

Software UART Pinout

If you are using a UART Bluefruit LE board, your Arduino should be connected to the Bluefruit LE UART module using the following pinout:

Bluefruit LE UART Arduino Uno
RTS 8
RXI 9
TXO 10
CTS 11

Optional Pins

Bluefruit LE UART Arduino Uno
MODE 12

SPI Pinout

If you are using an SPI Bluefruit LE board, your Arduino should be connected to the Bluefruit LE SPI module using the following pinout:

Bluefruit LE SPI Arduino Uno
SCLK 13
MISO 12
MOSI 11
CS 8
IRQ 7

Optional Pins (enable these in the sample sketches)

Bluefruit LE SPI Arduino Uno
RESET 6
Comments
  • What is the motivation for starting GATT values with '!'?

    What is the motivation for starting GATT values with '!'?

    In the examples, it is not documented why the packet reading code requires all GATT values to begin with the '!' character.

    Especially curious is why the replyidx is reset when a second '!' character is encountered in the value. What if a '!' character is actually intended to be part of the value the master device is trying to send to the BluefruitLE?

    https://github.com/adafruit/Adafruit_BluefruitLE_nRF51/blob/b80b880a62646223ba28b93301164c2134c9f4fc/examples/cplay_neopixel_picker/packetParser.cpp#L101

    opened by tedhenry100 8
  • heartratemonitor sketch will not connect to nRF Toolbox

    heartratemonitor sketch will not connect to nRF Toolbox

    • Arduino board: Arduino UNO
    • Arduino IDE version (found in Arduino -> About Arduino menu): 1.6.12
    • Bluefruit board: BluefruitLE UART Friend
      • Nordic Chip: nRF5182
      • Firmware: 0.7.0
    • Android nRF Toolbox version 1.18.4

    Possible defect in heartratemonitor example sketch (as of git commit 0c841d49, but sketch was last touched f248eec9).

    In short, try the nRF Connect app if the nRF Toolbox app doesn't work.

    As expected:

    The Bluefruit shows up under AVAILABLE DEVICES: as Bluefruit HRM, followed by the MAC address.

    sketch-1475707956814

    Not expected:

    Attempting to connect fails, and the nRF toolbox gives a notification:

    The device does not have required services.

    screenshot_20161005-145338

    Short-term solution

    However, using the nRF Connect app instead does allow me to connect, and it does show the appropriate output for Body Sensor Location and an updating output for Heart Rate Measurement.

    screenshot_20161005-151139

    Just getting started in this, so I'm not sure whether the problem connecting to nRF Toolbox is due to incomplete information on the Bluefruit side or to a bug on the nRF Toolbox side.

    opened by bluesquall 6
  • Packet loss and infinite loops

    Packet loss and infinite loops

    Hi! I noticed several problems when using the library. I will sometimes see the library getting into infinite loops and also loosing packets. It took me a while, but I realized what the problems are (I'll also post on the Adafruit forums soon). I forked and fixed them with minimal changes in https://github.com/corbinstreehouse/Adafruit_BluefruitLE_nRF51, I also have re-write branch that does it better.

    Conceptually, here are the issues:

    1. Adafruit_BluefruitLE_SPI::getResponse has this while loop: while ( digitalRead(m_irq_pin) && m_rx_fifo.remaining() >= SDEP_MAX_PACKETSIZE )

    The problem here is the irq pin might still be left pulled, but data isn't available..this causes problems in getPacket, where it reads the header based on it not reading SPI_IGNORED_BYTE. However, it will eventually get a non-ignored byte from the last packet, and the code:

    while ( p_header->msg_type != SDEP_MSGTYPE_RESPONSE && p_header->msg_type != SDEP_MSGTYPE_ERROR )
    {
      p_header->msg_type = spixfer(0xff);
    }
    

    will skip over bytes loosing data. This is the cause of packet loss.

    1. getPacket needs to be rewritten to do the IRQ assertion test at its start. However, I find that on a fast processor (teensy 3.1) it will still be asserted from the last packet. This causes the header to get SPI_OVERREAD_BYTE. If we get SPI_OVERREAD_BYTE , we should wait more on the m_irq_pin.

    Anyways... I'll send you a pull request that fixes this.

    opened by corbinstreehouse 6
  • Make Adafruit_BluefruitLE_SPI an Arduino Stream

    Make Adafruit_BluefruitLE_SPI an Arduino Stream

    Enhancement request:

    This API is currently already close to Arduino's Stream as is: https://www.arduino.cc/en/Reference/Stream

    If it fully implemented it, we could do fun stuff like plugging it into Firmata and have the uart service pipe data back and forth.

    opened by monteslu 4
  • ble.update() leaks

    ble.update() leaks "OK"s

    • Arduino board: Adafruit Feather 32u4 BlueFruitLE
    • Arduino IDE version (found in Arduino -> About Arduino menu): 1.6.8
    • Adafruit_BluefruitLE_nRF51 version: 1.9.1
    • List the steps to reproduce the problem below (if possible attach a sketch or copy the sketch code in too):

    I'm using the new callbacks to handle UART RX's and GATT writes, but I am also forwarding traffic between the BlueFruit and Serial so I can talk to the module directly for debugging. (while (ble.available()){Serial.write(ble.read()} and vice-versa). When I first got it running I was getting a constant stream of "OK"s from my reads. I tracked them down to being the responses to println( F("AT+EVENTSTATUS") ); in Adafruit_BLE::update line 284. I think line 285 should be waitForOK(); instead of readline(); so that update() consumes the full result of "AT+EVENTSTATUS". I made the change locally and it seems to work, I can interact with the BLE module without a any excess OK's appearing. It shouldn't require any other changes to the code since waitForOK() puts the data in this->buffer same as readline(). I guess it does cost another BLE_BUFSIZE+1 (49) bytes of ram though.

    opened by crackmonkey 4
  • SDEP_MAX_PACKETSIZE should be 20.

    SDEP_MAX_PACKETSIZE should be 20.

    SDEP_MAX_PACKETSIZE should really be 20. That is because the BLE spec can send up to 20 bytes at a time. This means that to send a 20 byte packet over BLE with the SPI Friend BlueFruit will take two SPI data packet send/response pairs (since the value is 16):

    #define SDEP_MAX_PACKETSIZE       16 // Maximum payload per packet
    

    This is slow and too chatty.

    opened by corbinstreehouse 3
  • Characteristic MAX_LEN doesn't seem to take effect

    Characteristic MAX_LEN doesn't seem to take effect

    Hello, I'm creating my own services and characteristics using the module's AT commands. Below is a printout from when I send "AT+GATTLIST" to the module. As you can see, I've created a service 0x6900, with one "read" characteristic with a value of "hello".

    ID=01,UUID=0x6900
      ID=01,UUID=0x1110,PROPERTIES=0x02,MIN_LEN=1,MAX_LEN=20,VALUE=hello
    

    However, when I connect to the module using the Light Blue app on iOS, the characteristic's value shows up as only the first letter "h". If I change the module's value to "world," then only "w" shows up on the app.

    Light Blue

    I do not think this is the app's error, because the UART examples work just fine. I am wondering if it has to do with the MAX_LEN property not being set properly?

    The following code is creating the service and characteristic. Before running these lines, I run .factoryReset() and send an ""AT+GATTCLEAR". After the following lines, I then run .reset(). Both the module's firmware and Adafruit library are up to date, and it's being run on an Arduino Uno.

    // first, create the service
    String serviceString = "AT+GATTADDSERVICE=";
    serviceString += "UUID=0x6900";
    
    int serviceID = BLE_print_with_reply(serviceString, 200);
    
    // second, create the characteristic
    String charString = "AT+GATTADDCHAR=";
    charString += "UUID=0x1110";
    charString += ", PROPERTIES=0x02"; // read only
    charString += ", MIN_LEN=1";
    charString += ", MAX_LEN=20";
    charString += ", VALUE=hello";
    
    int charID = BLE_print_with_reply(charString, 200);
    
    // below is a helper function to send dynamic strings to the module
    // and return the integer value sent back
    
    int BLE_print_with_reply(String msg, int delayTime) {
      delay(delayTime); // optional delay, because it seemed to help communication
      uint32_t reply = -1;
      ble.println(msg);
      ble.sendCommandWithIntReply(F(""), &reply);
      return reply;
    }
    
    opened by andySigler 3
  • Port the neopixel sketch from the nRF52 library

    Port the neopixel sketch from the nRF52 library

    This is a port of the neopixel sketch in existing in the nRF52 library

    No files where modified, only the sketch example was added

    I do not have a large selection of chips, so this was only tested on a: Adafruit Feather 32u4 Bluefruit LE connected to a Adafruit NeoPixel FeatherWing

    There is a spot in the code for sending an image, but the Android app doesn't have support for it (or I just couldn't find it). Although, other then the bluetooth connection, very little was changed.

    opened by justmobilize 2
  • blueart_datamode (UART) issues

    blueart_datamode (UART) issues

    Circuit Playground Arduino IDE: 1.8.5

    I have some issues with the code. When I connect my Circuit Playground to the BLE module and upload the sketch through my Mac everything looks fine. I am using the bluart_datamode sketch. I can both send and receive uart data, but when I connect the Circuit Playground to an external power resource or replug the Circuit Playground to my computer, I dont receive uart data anymore. It possible to connect to the BLE through the app, but the data dont appear.

    `/********************************************************************* This is an example for our nRF51822 based Bluefruit LE modules

    Pick one up today in the adafruit shop!

    Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit!

    MIT license, check LICENSE for more information All text above, and the splash screen below must be included in any redistribution *********************************************************************/

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

    #include "BluefruitConfig.h"

    #if SOFTWARE_SERIAL_AVAILABLE #include <SoftwareSerial.h> #endif

    /*========================================================================= APPLICATION SETTINGS

        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 values.             Some sketches that require you to bond to a central device (HID mouse, keyboard, etc.) won't work at all with this feature enabled since the factory reset will clear all of the bonding data stored on the chip, meaning the central device won't be able to reconnect. 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" /=========================================================================*/

    // Create the bluefruit object, either software serial...uncomment these lines /* SoftwareSerial bluefruitSS = SoftwareSerial(BLUEFRUIT_SWUART_TXD_PIN, BLUEFRUIT_SWUART_RXD_PIN);

    Adafruit_BluefruitLE_UART ble(bluefruitSS, BLUEFRUIT_UART_MODE_PIN, BLUEFRUIT_UART_CTS_PIN, BLUEFRUIT_UART_RTS_PIN); */

    /* ...or hardware serial, which does not need the RTS/CTS pins. Uncomment this line */ Adafruit_BluefruitLE_UART ble(BLUEFRUIT_HWSERIAL_NAME, BLUEFRUIT_UART_MODE_PIN);

    /* ...hardware SPI, using SCK/MOSI/MISO hardware SPI pins and then user selected CS/IRQ/RST */ //xxcAdafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_CS, BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);

    /* ...software SPI, using SCK/MOSI/MISO user-defined SPI pins and then user selected CS/IRQ/RST */ //Adafruit_BluefruitLE_SPI ble(BLUEFRUIT_SPI_SCK, BLUEFRUIT_SPI_MISO, // BLUEFRUIT_SPI_MOSI, BLUEFRUIT_SPI_CS, // BLUEFRUIT_SPI_IRQ, BLUEFRUIT_SPI_RST);

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

    /************************************************************************/ /*! @brief Sets up the HW an the BLE module (this function is called automatically on startup) */ /************************************************************************/ void setup(void) { while (!Serial); // required for Flora & Micro delay(500);

    Serial.begin(115200); Serial.println(F("Adafruit Bluefruit Command <-> Data Mode Example")); Serial.println(F("------------------------------------------------"));

    /* 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!") );

    if ( FACTORYRESET_ENABLE ) { /* 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 */ ble.echo(false);

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

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

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

    /* Wait for connection */ while (! ble.isConnected()) { delay(500); }

    Serial.println(F("******************************"));

    // 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); }

    // Set module to DATA mode Serial.println( F("Switching to DATA mode!") ); ble.setMode(BLUEFRUIT_MODE_DATA);

    Serial.println(F("******************************")); }

    /************************************************************************/ /*! @brief Constantly poll for new command or response data */ /************************************************************************/ void loop(void) { // Check for user input char n, inputs[BUFSIZE+1]; ble.print("test"); if (Serial.available()) { n = Serial.readBytes(inputs, BUFSIZE); inputs[n] = 0; // Send characters to Bluefruit Serial.print("Sending: "); Serial.println(inputs);

    // Send input data to host via Bluefruit
    ble.print(inputs);
    

    }

    // Echo received data while ( ble.available() ) { int c = ble.read();

    Serial.print((char)c);
    
    // Hex output too, helps w/debugging!
    Serial.print(" [0x");
    if (c <= 0xF) Serial.print(F("0"));
    Serial.print(c, HEX);
    Serial.print("] ");
    

    } }`

    opened by MichaelKonnerup 2
  • Fix some issues revealed by integration with StandardFirmataBLE

    Fix some issues revealed by integration with StandardFirmataBLE

    I've been working on adding support for the Feather M0 Bluefruit LE to StandardFirmataBLE. While doing so, I discovered a few issues, which are addressed by this pull request. The changes here affect only the Adafruit_BluefruitLE_SPI class.

    First, when alternating between reads and writes in DATA mode, it was possible to lose received data that hadn't yet been read. For example, I was testing a scenario where the Firmata client (a Mac desktop) sent 6 bytes to the Feather. After reading the first 3 bytes, the Firmata library wrote a response. However, because Adafruit_BluefruitLE_SPI::sendPacket always empties the RX FIFO when more_data is 0, the last 3 bytes were lost. I've changed it so that the FIFO is emptied only when not in DATA mode. Also, I modified Adafruit_BluefruitLE_SPI::setMode to empty the RX FIFO when entering DATA mode, so that a previous command response isn't interpreted as incoming UART data.

    Second, I was nervous about Adafruit_BluefruitLE_SPI's simulated handling of the "+++" command. Since Firmata is a binary protocol, it's possible that that sequence of bytes could be sent to the client, which would then trigger an unexpected switch to command mode and break everything. To eliminate this possibility, I added a method to disable the simulated "+++" handling. It's still enabled by default, so the behavior of existing code won't change.

    opened by cstawarz 2
  • adafruit.BLE.cpp troubles

    adafruit.BLE.cpp troubles

    Whenever I try to verify or upload any code from the adafruit bluefruitLE nrf51 I get the error

    C:\Program Files (x86)\Arduino\libraries\Adafruit_BluefruitLE_nRF51\Adafruit_BLE.cpp: In member function 'int Adafruit_BLE::readBLEUart(uint8_t*, int)': C:\Program Files (x86)\Arduino\libraries\Adafruit_BluefruitLE_nRF51\Adafruit_BLE.cpp:543: error: invalid conversion from 'uint8_t*' to 'char*' C:\Program Files (x86)\Arduino\libraries\Adafruit_BluefruitLE_nRF51\Adafruit_BLE.cpp:543: error: initializing argument 1 of 'size_t Stream::readBytes(char*, size_t)'

    Is this error from my end or is there a coding error?

    opened by purplefrost 2
  • Setting BUFSIZE (in BluefruitConfig.h) to 256 breaks SPI comms with the module.

    Setting BUFSIZE (in BluefruitConfig.h) to 256 breaks SPI comms with the module.

    Running the atcommand example, I am using an otherwise unmodifiedBluefruitConfig.h, with settings for a MKRZero using hardware SPI. This means that the only change I had to make was:

    #define BLUEFRUIT_SPI_CS               5
    #define BLUEFRUIT_SPI_IRQ              3
    #define BLUEFRUIT_SPI_RST              6    // Optional but recommended, set to -1 if unused
    

    I did make one other change, however. I have a lot of memory to work with on this board and I'm not sure how often I'll be able to check for incoming messages - and I know that they'll be on the order of 32B and coming fast. So.... I set the buffer size (BUFSIZE) to 256.

    With the buffer at 160, I can send AT commands just fine. Here's ATI:

    -------------------------------------
    Initialising the Bluefruit LE module: OK!
    Performing a factory reset: 
    AT+FACTORYRESET
    
    <- OK
    ATE=0
    
    <- OK
    Requesting Bluefruit info:
    ----------------
    BLESPIFRIEND
    nRF51822 QFACA00
    4A01B079A608DD56
    0.6.7
    0.6.7
    Sep 17 2015
    S110 8.0.0, 0.2
    ----------------
    AT > ATI
    
    <- BLESPIFRIEND
    nRF51822 QFACA00
    4A01B079A608DD56
    0.6.7
    0.6.7
    Sep 17 2015
    S110 8.0.0, 0.2
    OK
    AT >
    

    And here it is again with a buffer of 256:

    -------------------------------------
    Initialising the Bluefruit LE module: OK!
    Performing a factory reset: 
    AT+FACTORYRESET
    
    <- OK
    ATE=0
    
    <- OK
    Requesting Bluefruit info:
    ----------------
    BLESPIFRIEND
    nRF51822 QFACA00
    4A01B079A608DD56
    0.6.7
    0.6.7
    Sep 17 2015
    S110 8.0.0, 0.2
    ----------------
    AT > Y*
    
    <- ERROR
    AT > Y*
    
    <- ERROR
    AT > Y*
    ...
    ...
    ...
    ...
    

    (With the errors coming in, nonstop, at maybe 100/sec?)

    The buffer size is the only thing I have changed between the two examples. The working version is the default 160 and the broken one is 256. Given that the MKRZero has something like 32KB of memory, I'm not running out. Strangely, setting BUFSIZE to 300 works, as does 1000. If it needs to be divisible by a specific number, BluefruitConfig.h should note this.

    opened by foodini 0
  • Midi example should test for FW version prior to setting callbacks.

    Midi example should test for FW version prior to setting callbacks.

    • Arduino board: Mega 2560

    • Arduino IDE version (found in Arduino -> About Arduino menu): PlatformIO - Visual Studio Code

    • List the steps to reproduce the problem below (if possible attach a sketch or copy the sketch code in too): LIST REPRO STEPS BELOW

    I have firmware version 0.6.7 on my BlueFruitLE. The callbacks in the MIDI example fails due the wrong FW version.

    Putting this code prior to the callbacks would help for those debugging issues.

      if ( !ble.isVersionAtLeast(MINIMUM_FIRMWARE_VERSION) )
      {
        error( F("Callback requires at least 0.7.0") );
      }
    
    opened by TrackDaddy5 1
  • Not getting HWADDR back

    Not getting HWADDR back

    void setup(void)
    {
    
      //while (!Serial);
      delay(500);
    
      Serial.begin(115200);
      Serial.println(F("BT Remote"));
      Serial.println(F("---------------------------------------"));
    
      /* 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!"));
    
       ble.println(F("AT+BLEGETADDR"));
       ble.waitForOK();
       Serial.print(F("Done."));
    }
    

    Whatever I try I cannot get the HWAddr from the Feather 32u4. I need either that or the serial number.

    With ble.println(F("AT+BLEGETADDR")); or just ble.println ("AT+BLEGETADDR"); nothing is printed in the console.

    opened by Fossil01 0
  • Pairing code/password

    Pairing code/password

    How would one implement a pairing code or password for peers? I couldn't find anything about this in the docs.

    Because anyone can connect to my device now blocking any further connections from my own devices. A simple 4 digit code like some other accessories require would solve this problem.

    opened by Fossil01 0
  • Read from Lipo batt level always returns 0

    Read from Lipo batt level always returns 0

    • Arduino board: Adafruit Bluefruit Feather 32u4 BLE
    • Arduino IDE version (found in Arduino -> About Arduino menu): 1.8.6

    Hi, I have tried two ways in order to get a value read from the Lipo:

    1. With the official docs, simply as follows:
    #define VBATPIN A9
    float measuredvbat = analogRead(VBATPIN);
    measuredvbat *= 2; // we divided by 2, so multiply back
    measuredvbat *= 3.3; // Multiply by 3.3V, our reference voltage
    measuredvbat /= 1024; // convert to voltage
    Serial.print("VBat: " ); Serial.println(measuredvbat);
    

    I have read VBatt: 0

    1. I've executed the code supplied with battery.ino and I've got an ERROR displayed with the Serial

    What could be happening?

    opened by billyjoker 2
Releases(1.10.0)
  • 1.10.0(Oct 16, 2020)

    Added two pairs of helper functions to Adafruit_ATParser that allow the user to read back results from AT commands that return string values

    Source code(tar.gz)
    Source code(zip)
  • 1.9.6(Jul 10, 2019)

  • 1.9.5(Oct 6, 2017)

  • 1.9.4(Dec 9, 2016)

  • 1.9.3(Aug 19, 2016)

  • 1.9.2(Aug 3, 2016)

  • 1.9.1(Jul 13, 2016)

  • 1.9.0(Jun 28, 2016)

    • Added Adafruit_ATParser helper class to facilitate sending and receiving AT commands:
      • .atcommand() : Send a command without reply (several variants defined for various input parameters)
      • .atcommandIntReply() : Send a command with integer reply (several variants defined for various input parameters)
      • .atcommand_full() : General purpose command execution with a pointer to the reply buffer
      • .printByteArray() : Outputs a byte array in the AA-BB-CC format from a buffer. Useful for executing AT commands.
      • .waitForOK() : Uses a separate temporary buffer to avoid overwriting response content.
    • Callback support in Adafruit_BLE class
      • Supported Events are:
        • Connect: Set using setConnectCallback()
        • Disconnect: Set using setDisconnectCallback()
        • BLE UART RX: Set using .setBleUartRxCallback()
        • MIDI RX: Set using .setBleMidiRxCallback()
        • GATT Characteristic RX: Set using .setBleGattRxCallback()
      • .update(ms) must be placed in the loop() function to fire the callbacks, where ms is the interval in milliseconds to poll for new events
      • See 'examples/callbacks' for more details
    • Added Adafruit_BLEGatt helper class to make working with custom GATT services and characteristics easier:
      • Helpers to add custom GATT services and characteristics
      • Helpers to read/write previously defined characteristics
      • Callback support for characteristic updates
      • Added User Description and Presentation Format support for GATT characteristics
      • Add BLEDataType_t typedef for GATT characteristics
      • See 'example/healththermometer' for an example of using the Adafruit_BLEGatt class
    • Added BLE MIDI service support with the Adafruit_BLEMIDI class
      • See 'examples/midi' for details
    • Added BLE Battery service support via the Adafruit_BLEBattery class
      • See 'example/battery' for more details
    • Added BLE Eddystone helper class to facilitate using Eddystone beacon
      • See 'example/eddystone' for more details
    • Add a 256 byte user NVM data section that can be accessed via .writeNVM() and .readNVM() in Adafruit_BLE. User can use this small chunk of NVM memory to store application specific data.
      • See 'example/nvmdata' for more details
    • Additional Adafruit_BLE class changes:
      • Added a setAdvData() helper to advertise custom data payloads
    Source code(tar.gz)
    Source code(zip)
  • 1.8.0(Feb 13, 2016)

  • 1.7.8(Feb 13, 2016)

  • 1.7.7(Feb 13, 2016)

  • 1.7.6(Jan 31, 2016)

  • 1.7.5(Jan 22, 2016)

  • 1.7.4(Jan 13, 2016)

  • 1.7.3(Dec 27, 2015)

  • 1.7.2(Dec 17, 2015)

  • 1.7.1(Oct 8, 2015)

  • 1.7.0(Oct 6, 2015)

  • 1.6.3(Sep 3, 2015)

  • 1.6.2(Sep 2, 2015)

  • 1.6.1(Sep 1, 2015)

  • 1.6.0(Aug 21, 2015)

  • 1.0.0(Jun 27, 2015)

Owner
Adafruit Industries
Adafruit Industries
Arduino library to access Adafruit IO from WiFi, cellular, and ethernet modules.

Adafruit IO Arduino Library This library provides a simple device independent interface for interacting with Adafruit IO using Arduino. It allows you

Adafruit Industries 168 Dec 23, 2022
Arduino library for the Adafruit FONA

Adafruit FONA Library This library requires Arduino v1.0.6 or higher This is a library for the Adafruit FONA Cellular GSM Breakouts etc Designed speci

Adafruit Industries 199 Dec 15, 2022
Arduino library for the Si4714 FM+RDS Transmitter in the Adafruit shop

Adafruit-Si4713-Library This is the Adafruit FM Transmitter with RDS/RBDS Breakout - Si4713 library Tested and works great with the Adafruit Si4713 Br

Adafruit Industries 19 Oct 26, 2022
Library code for Adafruit's CC3000 WiFi breakouts &c

Adafruit CC3000 Library This is a library for the Adafruit CC3000 WiFi Breakouts etc Designed specifically to work with the Adafruit CC3000 Breakout -

Adafruit Industries 267 Sep 9, 2022
Arduino-compatible library to interface RC1701HP-OSP/WIZE radio modules.

AllWize Arduino-compatible library to interface RC1701HP-OSP/WIZE radio modules. Compatible radios: RadioCrafts RC1701HP-OSP (Ondeo version) RadioCraf

allwize 16 Aug 3, 2022
Drivers for Adafruit's nRF8001 Bluetooth Low Energy Breakout

Adafruit_nRF8001 Driver and example code for Adafruit's nRF8001 Bluetooth Low Energy Breakout. PINOUT The pin locations are defined in ble_system.h, t

Adafruit Industries 106 Nov 28, 2022
Set of Arduino sketches for Neotrellis 8x8 Feather M4 Express & NeoTrellisM4 (4x8) for use specifically with Trowasoft multiSeq and MindMeld Mixer modules for VCVRack2, with accompanying Rack file.

Set of Arduino sketches for Neotrellis 8x8 Feather M4 Express & NeoTrellisM4 (4x8) for use specifically with Trowasoft multiSeq and MindMeld Mixer modules for VCVRack2, with accompanying Rack file.

Marci 10 Dec 2, 2022
Arduino Arduino library for the CloudStorage server project. The library provides easy access to server-stored values and operations.

Arduino-CloudStorage Arduino/ESP8266 library that allows you to easly store and retreive data from a remote (cloud) storage in a key/value fashion. Cl

Gil Maimon 7 Jan 30, 2022
Arduino library for making an IHC in or output module using an Arduino

Introduction This is an Arduino library for making an IHC in or output module using an Arduino. (IHC controller is a home automation controller made b

Jens Østergaard Nielsen 2 Mar 26, 2020
ArduinoIoTCloud library is the central element of the firmware enabling certain Arduino boards to connect to the Arduino IoT Cloud

ArduinoIoTCloud What? The ArduinoIoTCloud library is the central element of the firmware enabling certain Arduino boards to connect to the Arduino IoT

Arduino Libraries 64 Dec 16, 2022
Arduino client library for websocket based communication with archer panels.

ArduinoArcherPanelClient Arduino client library for websocket based communication with archer panels. Archer Cloud panels provide you an easy and fast

byteAgenten 1 May 18, 2018
Arduino software emulation of a real-time clock based on the milliseconds timer of the CPU

Clock-Library Arduino software emulation of a real-time clock based on the milliseconds timer of the CPU. The clock works with a resolution of one min

Dirk Ohme 4 Jun 25, 2022
The Approximate Library is a WiFi Arduino library for building proximate interactions between your Internet of Things and the ESP8266 or ESP32

The Approximate Library The Approximate library is a WiFi Arduino Library for building proximate interactions between your Internet of Things and the

David Chatting 102 Dec 7, 2022
Arduino library for controlling the MCP2515 in order to receive/transmit CAN frames.

107-Arduino-MCP2515 Arduino library for controlling the MCP2515 in order to receive/transmit CAN frames. This library is prepared to interface easily

107-Systems 51 Nov 16, 2022
Arduino library for interfacing with any GPS, GLONASS, Galileo or GNSS module and interpreting its NMEA messages.

107-Arduino-NMEA-Parser Arduino library for interfacing with any GPS, GLONASS, Galileo or GNSS module and interpreting its NMEA messages. This library

107-Systems 15 Jan 1, 2023
Arduino library for providing a convenient C++ interface for accessing UAVCAN.

107-Arduino-UAVCAN Arduino library for providing a convenient C++ interface for accessing UAVCAN (v1.0-beta) utilizing libcanard. This library works f

107-Systems 54 Jan 2, 2023
Arduino web server library.

aWOT Arduino web server library. Documentation 1. Getting started Hello World Basic routing Application generator Serving static files 2. Guide Routin

Lasse Lukkari 246 Jan 4, 2023
Arduino, esp32 and esp8266 library for ABB (ex PowerOne) Aurora Inverter, implement a full methods to retrieve data from the Inverter via RS-485

ABB Aurora protocol You can refer the complete documentation on my site ABB Aurora PV inverter library for Arduino, esp8266 and esp32 I create this li

Renzo Mischianti 22 Nov 22, 2022
Arduino library for the MCP2515 CAN Controller

MCP2515 CAN Controller Library for Arduino Compatibility with the ACAN library This library is fully compatible with the Teensy 3.x ACAN library https

Pierre Molinaro 4 Dec 18, 2022