Getting started on the Adafruit Feather 32u4
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.
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!
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:
sudo reload udev
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.
<video width="100%" controls> <source src="/images/2017-03-15-install.mp4" type="video/mp4"> Your browser does not support the video tag. </video>
Success looks like this:
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.
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
Run
sudo mkdir /lib/firmware/brcm
Copy the firmware file to the
/lib/firmware/brcm
folder and rename the file toBCM20702A0-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