Step 1: Updating the Firmware
The firmware on your feather's probably out of date. Let's fix that.
Because you won't be updating the firmware often, it requires a little work.
-
Acquire Adafruit's Bluetooth LE Connect app
-
Run the app
-
Connect a wire from the DFU pin to the GND pin.
-
Power up the Feather.
-
Connect to DfuTarg
-
Use the drop-down menu in the upper-right to select Firmware Updates
-
You'll want to choose the Version 0.7.7 BLESPIFRIEND update, or higher.
Updates and their associated devices are listed
here.
-
Wait for the update to complete, unpower the Feather, disconnect the
DFU-GND wire.
-
Yay!
More info
Step 2: Udev Rules
The feather requires a Reset during the first load. Linux likes to move devices
around between ports. These two behaviours are not very compatible. To fix them,
install Adafruit's udev rules,
as copied below.
Open (thereby creating) this file:
sudo pico /etc/udev/rules.d/99-adafruit-boards.rules
Copy the following into it and save:
# udev rules for Adafruit's boards like Trinket, Gemma, Flora, Bluefruit Micro, etc.
#
# Copy this file to the location of your distribution's udev rules, for example on Ubuntu:
# sudo cp adafruit-trinket.rules /etc/udev/rules.d/
# Then reload udev configuration by executing:
# sudo reload udev
# Or if that doesn't work try:
# sudo udevadm control --reload-rules
# sudo udevadm trigger
# Rule to make Trinket/Pro Trinket/Gemma/Flora programmable without running Arduino as root.
# Tested with Ubuntu 14.04 and 12.04. Other distributions might need to update GROUP="dialout"
# to another group value like "users".
SUBSYSTEM=="usb", ATTRS{idProduct}=="0c9f", ATTRS{idVendor}=="1781", MODE="0660", GROUP="dialout"
# Rule to blacklist Adafruit USB CDC boards from being manipulated by ModemManager.
# Fixes issue with hanging references to /dev/ttyACM* devices on Ubuntu 15.04.
ATTRS{idVendor}=="239a", ENV{ID_MM_DEVICE_IGNORE}="1"
# Circuit Playground
# General rule (actually covers all Adafruit boards with same USB VID):
ATTRS{idVendor}=="239a", MODE="0660", GROUP="adm"
# pedantic rule: normal operation
#SUBSYSTEM=="tty", ATTRS{idProduct}=="8011", ATTRS{idVendor}=="239a", MODE="0660", GROUP="adm"
# pedentic rule: bootloader/programming
#SUBSYSTEM=="tty", ATTRS{idProduct}=="0011", ATTRS{idVendor}=="239a", MODE="0660", GROUP="adm"
Reload udev's rules using either:
or
sudo udevadm control --reload-rules
sudo udevadm trigger
whichever works. It's safe to run both.
Ensure your user is part of the dialout group:
sudo usermod -a -G dialout $USER
Step 3: Install Arduino IDE
The package manager's Arduino IDE and associated components are usually quite a
bit out of date, so it's useful to get the required software directly from
Arduino.
Get the newest Arduino IDE from here
Step 4: Acquire Adafruit's Board Codez
Open the Arduino IDE and go to File->Preferences and look for Additional
Board Manager URLS. Add the following line to the manager:
https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
Now go to Tools->Board->Boards Manager....
For Type choose Contributed and install Adafruit AVR Boards.
Success looks like this:
More info
Step 5: Install the Adafruit nRF51 BLE Library
Acquire the Adafruit nRF51 BLE Library from
here.
Rename the uncompressed folder Adafruit_BluefruitLE_nRF51 and ensure it
contains Adafruit_BLE.cpp and Adafruit_BLE.h (as well as a bunch of other files)
Place the Adafruit_BluefruitLE_nRF51 library folder your
arduino/libraries/ folder. This folder should have been created when you
acquired the Arduino IDE, but you may also need to create it yourself.
Restart the IDE.
You'll know this worked if you see a number of examples in the menu
File->Examples->Adafruit_Bluefruit_nRF51.
More info
Step 6: Get a BLE Dongle Working
Worried that my old phone wouldn't be able to work with BLE, I acquired
this dongle.
Unfortunately, when I start it, I see this in dmesg | tail -n 20
[71112.636865] usb 1-1.1: new full-speed USB device number 10 using ehci-pci
[71112.749205] usb 1-1.1: New USB device found, idVendor=0a5c, idProduct=21e8
[71112.749210] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[71112.749213] usb 1-1.1: Product: BCM20702A0
[71112.749216] usb 1-1.1: Manufacturer: Broadcom Corp
[71112.749218] usb 1-1.1: SerialNumber: 5CF3707F3F1B
[71112.756203] Bluetooth: hci1: BCM: chip id 63
[71112.772214] Bluetooth: hci1: BCM20702A
[71112.773211] Bluetooth: hci1: BCM20702A1 (001.002.014) build 0000
[71112.773239] bluetooth hci1: Direct firmware load for brcm/BCM20702A1-0a5c-21e8.hcd failed with error -2
[71112.773243] Bluetooth: hci1: BCM: Patch brcm/BCM20702A1-0a5c-21e8.hcd not found
Let's fix that:
-
Open your favorite terminal
-
Acquire the driver file from me or from Amazon.
-
Run sudo mkdir /lib/firmware/brcm
-
Copy the firmware file to the /lib/firmware/brcm
folder and rename the file to BCM20702A0-0a5c-21e8.hcd
with, e.g.:
sudo mv fw-0a5c_21e8.hcd /lib/firmware/brcm/BCM20702A0-0a5c-21e8.hcd
-
Now ensure all versions of this dongle work by running:
sudo cp /lib/firmware/brcm/BCM20702A0-0a5c-21e8.hcd /lib/firmware/brcm/BCM20702A1-0a5c-21e8.hcd
TODO
AT+HWGETDIETEMP
sudo apt install gcc-avr avr-libc