Adafruit Feather 32u4 Radio with RFM69HCW Module Created by lady ada Last updated on 2019-09-05 09:52:39 PM UTC
Overview Feather is the new development board from Adafruit, and like its namesake it is thin, light, and lets you fly! We designed Feather to be a new standard for portable microcontroller cores. This is the Adafruit Feather 32u4 Radio (RFM69HCW) - our take on an microcontroller packet radio transceiver with built in USB and battery charging. Its an Adafruit Feather 32u4 with a 433 or 868/915 MHz radio module cooked in! Great for making wireless networks that can go further than 2.4GHz 802.15.
At the Feather 32u4's heart is at ATmega32u4 clocked at 8 MHz and at 3.3V logic, a chip setup we've had tons of experience with as it's the same as the Flora (https://adafru.it/dVl). This chip has 32K of flash and 2K of RAM, with built in USB so not only does it have a USB-to-Serial program & debug capability built in with no need for an FTDI-like chip, it can also act like a mouse, keyboard, USB MIDI device, etc. To make it easy to use for portable projects, we added a connector for any of our 3.
monitor the battery voltage to detect when you need a recharge. Here's some handy specs! Like all Feather 32u4's you get: Measures 2.0" x 0.9" x 0.28" (51mm x 23mm x 8mm) without headers soldered in Light as a (large?) feather - 5.5 grams ATmega32u4 @ 8MHz with 3.3V logic/power 3.
Simple wire antenna or spot for uFL connector Comes fully assembled and tested, with a USB bootloader that lets you quickly use it with the Arduino IDE. We also toss in some header so you can solder it in and plug into a solderless breadboard. You will need to cut and solder on a small piece of wire (any solid or stranded core is fine) in order to create your antenna. Lipoly battery and USB cable not included but we do have lots of options in the shop if you'd like! © Adafruit Industries https://learn.
Pinouts The Feather 32u4 Radio is chock-full of microcontroller goodness. There's also a lot of pins and ports. We'll take you a tour of them now! Note that the pinouts are identical for both the Feather 32u4 RFM69 and LoRa radios - you can look at the silkscreen of the Feather to see it says "RFM69" or "LoRa" Pinouts are also the same for both 433MHz and 900Mhz.
Power Pins GND - this is the common ground for all power and logic BAT - this is the positive voltage to/from the JST jack for the optional Lipoly battery USB - this is the positive voltage to/from the micro USB jack if connected EN - this is the 3.3V regulator's enable pin. It's pulled up, so connect to ground to disable the 3.3V regulator 3V - this is the output from the 3.3V regulator, it can supply 500mA peak Logic pins © Adafruit Industries https://learn.adafruit.
This is the general purpose I/O pin set for the microcontroller. All logic is 3.3V #0 / RX - GPIO #0, also receive (input) pin for Serial1 and Interrupt #2 #1 / TX - GPIO #1, also transmit (output) pin for Serial1 and Interrupt #3 #2 / SDA - GPIO #2, also the I2C (Wire) data pin. There's no pull up on this pin by default so when using with I2C, you may need a 2.2K-10K pullup. Also Interrupt #1 #3 / SCL - GPIO #3, also the I2C (Wire) clock pin.
Since not all pins can be brought out to breakouts, due to the small size of the Feather, we use these to control the radio module #8 - used as the radio CS (chip select) pin #7 - used as the radio GPIO0 / IRQ (interrupt request) pin. #4 - used as the radio Reset pin Since these are not brought out there should be no risk of using them by accident! There are also breakouts for 3 of the RFM's GPIO pins (IO1, IO2 and IO3).
Assembly We ship Feathers fully tested but without headers attached - this gives you the most flexibility on choosing how to use and configure your Feather Header Options! Before you go gung-ho on soldering, there's a few options to consider! The first option is soldering in plain male headers, this lets you plug in the Feather into a solderless breadboard © Adafruit Industries https://learn.adafruit.
Another option is to go with socket female headers. This won't let you plug the Feather into a breadboard but it will let you attach featherwings very easily © Adafruit Industries https://learn.adafruit.
We also have 'slim' versions of the female headers, that are a little shorter and give a more compact shape © Adafruit Industries https://learn.adafruit.
Finally, there's the "Stacking Header" option. This one is sort of the best-of-both-worlds. You get the ability to plug into a solderless breadboard and plug a featherwing on top. But its a little bulky Soldering in Plain Headers Prepare the header strip: Cut the strip to length if necessary. It will be easier to solder if you insert it into a breadboard - long pins down Add the breakout board: Place the breakout board over the pins so that the short © Adafruit Industries https://learn.adafruit.
pins poke through the breakout pads And Solder! Be sure to solder all pins for reliable electrical contact. (For tips on soldering, be sure to check out our Guide to Excellent Soldering (https://adafru.it/aTk)). © Adafruit Industries https://learn.adafruit.
Solder the other strip as well. © Adafruit Industries https://learn.adafruit.
You're done! Check your solder joints visually and continue onto the next steps Soldering on Female Header Tape In Place For sockets you'll want to tape them in place so when you flip over the board they don't fall out Flip & Tack Solder After flipping over, solder one or two points on each strip, to 'tack' the header in place © Adafruit Industries https://learn.adafruit.
© Adafruit Industries https://learn.adafruit.
And Solder! Be sure to solder all pins for reliable electrical contact. (For tips on soldering, be sure to check out our Guide to Excellent Soldering (https://adafru.it/aTk)). © Adafruit Industries https://learn.adafruit.
You're done! Check your solder joints visually and continue onto the next steps © Adafruit Industries https://learn.adafruit.
Antenna Options Your Feather Radio does not have a built-in antenna. Instead, you have two options for attaching an antenna. For most low cost radio nodes, a wire works great. If you need to put the Feather into an enclosure, soldering in uFL and using a uFL to SMA adapter will let you attach an external antenna Wire Antenna A wire antenna, aka "quarter wave whip antenna" is low cost and works very well! You just have to cut the wire down to the right length.
That's pretty much it, you're done! uFL Antenna If you want an external antenna, you need to do a tiny bit more work but its not too difficult. You'll need to get an SMT uFL connector, these are fairly standard (http://adafru.it/1661) You'll also need a uFL to SMA adapter (http://adafru.
Check the bottom of the uFL connector, note that there's two large side pads (ground) and a little inlet pad. The other small pad is not used! Solder all three pads to the bottom of the Feather © Adafruit Industries https://learn.adafruit.
Once done attach your uFL adapter and antenna! © Adafruit Industries https://learn.adafruit.
Power Management Battery + USB Power We wanted to make the Feather easy to power both when connected to a computer as well as via battery. There's two ways to power a Feather. You can connect with a MicroUSB cable (just plug into the jack) and the Feather will regulate the 5V USB down to 3.3V. You can also connect a 4.2/3.7V Lithium Polymer (Lipo/Lipoly) or Lithium Ion (LiIon) battery to the JST jack. This will let the Feather run on a rechargable battery.
The above shows the Micro USB jack (left), Lipoly JST jack (top left), as well as the 3.3V regulator and changeover diode (just to the right of the JST jack) and the Lipoly charging circuitry (to the right of the Reset button). There's also a CHG LED, which will light up while the battery is charging. This LED might also flicker if the battery is not connected. The charge LED is automatically driven by the Lipoly charger circuit. It will try to detect a battery and is expecting one to be attached.
then slowly sink down to 3.2V or so before the protection circuitry cuts it off. By measuring the voltage you can quickly tell when you're heading below 3.7V To make this easy we stuck a double-100K resistor divider on the BAT pin, and connected it to D9 (a.k.a analog #7 A7). You can read this pin's voltage, then double it, to get the battery voltage. #define VBATPIN A9 float measuredvbat = analogRead(VBATPIN); measuredvbat *= 2; // we divided by 2, so multiply back measuredvbat *= 3.3; // Multiply by 3.
cost. It is not recommended, but technically possible: Connect an external 3.3V power supply to the 3V and GND pins. Not recommended, this may cause unexpected behavior and the EN pin will no longer. Also this doesn't provide power on BAT or USB and some Feathers/Wings use those pins for high current usages. You may end up damaging your Feather. Connect an external 5V power supply to the USB and GND pins.
You still have the 25mA average, but during transmit, it only uses another 20mA not 100mA If you put the radio to sleep after transmitting, rather than just sitting in receive mode, you can save more current, after transmit is complete, the average current drops to ~10mA which is just for the microcontroller If you want to reduce even more power, use the Adafruit Sleepdog (https://adafru.it/fp8)library by installing and adding #include "Adafruit_SleepyDog.
During the super sleepy mode you're using only 300uA (0.3mA)! While its not easy to get the exact numbers for all of what comprise the 300uA there are a few quiescent current items on the Feather 32u4: 2 x 100K resistors for VBAT measurement = 25uA AP2112K 3.3V regulator = 55uA MCP73871 batt charger = up to 100uA even when no battery is connected The rest is probably the Atmega32u4 peripherals including the brown-out detect and bandgap circuitry, ceramic oscillator, etc.
ENable pin If you'd like to turn off the 3.3V regulator, you can do that with the EN(able) pin. Simply tie this pin to Ground and it will disable the 3V regulator. The BAT and USB pins will still be powered © Adafruit Industries https://learn.adafruit.
Arduino IDE Setup The first thing you will need to do is to download the latest release of the Arduino IDE. You will need to be using version 1.8 or higher for this guide https://adafru.it/f1P https://adafru.it/f1P After you have downloaded and installed the latest version of Arduino IDE, you will need to start the IDE and navigate to the Preferences menu. You can access it from the File menu in Windows or Linux, or the Arduino menu on OS X. A dialog will pop up just like the one shown below.
We will be adding a URL to the new Additional Boards Manager URLs option. The list of URLs is comma separated, and you will only have to add each URL once. New Adafruit boards and updates to existing boards will automatically be picked up by the Board Manager each time it is opened. The URLs point to index files that the Board Manager uses to build the list of available & installed boards.
Here's a short description of each of the Adafruit supplied packages that will be available in the Board Manager when you add the URL: Adafruit AVR Boards - Includes support for Flora, Gemma, Feather 32u4, Trinket, & Trinket Pro.
Using with Arduino IDE Since the Feather 32u4 uses an ATmega32u4 chip running at 8 MHz, you can pretty easily get it working with the Arduino IDE. Many libraries (including the popular ones like NeoPixels and display) work great with the '32u4 and 8 MHz clock speed. Now that you have added the appropriate URLs to the Arduino IDE preferences, you can open the Boards Manager by navigating to the Tools->Board menu.
Install Drivers (Windows Only) When you plug in the Feather, you'll need to possibly install a driver Click below to download our Driver Installer https://adafru.it/AB0 https://adafru.it/AB0 Download and run the installer Run the installer! Since we bundle the SiLabs and FTDI drivers as well, you'll need to click through the license © Adafruit Industries https://learn.adafruit.
Select which drivers you want to install: Click Install to do the installin' Blink Now you can upload your first blink sketch! © Adafruit Industries https://learn.adafruit.
Plug in the Feather 32u4 and wait for it to be recognized by the OS (just takes a few seconds). It will create a serial/COM port, you can now select it from the dropdown, it'll even be 'indicated' as Feather 32u4! Now load up the Blink example // the setup function runs once when you press reset or power the board void setup() { // initialize digital pin 13 as an output.
Don't click the reset button before uploading, unlike other bootloaders you want this one to run at the time Arduino is trying to upload Ubuntu & Linux Issue Fix If you're on Linux, and are seeing multi-second delays connecting to the serial console, or are seeing "AT" and other gibberish when you connect, follow the steps on this page. (https://adafru.it/iOE) © Adafruit Industries https://learn.adafruit.
Feather HELP! Even though this FAQ is labeled for Feather, the questions apply to ItsyBitsy's as well! My ItsyBitsy/Feather stopped working when I unplugged the USB! A lot of our example sketches have a while (!Serial); line in setup(), to keep the board waiting until the USB is opened. This makes it a lot easier to debug a program because you get to see all the USB data output.
My Feather never shows up as a COM or Serial port in the Arduino IDE A vast number of Itsy/Feather 'failures' are due to charge-only USB cables We get upwards of 5 complaints a day that turn out to be due to charge-only cables! Use only a cable that you know is for data syncing If you have any charge-only cables, cut them in half throw them out.
Ack! I "did something" and now when I plug in the Itsy/Feather, it doesn't show up as a device anymore so I cant upload to it or fix it... No problem! You can 'repair' a bad code upload easily. Note that this can happen if you set a watchdog timer or sleep mode that stops USB, or any sketch that 'crashes' your board 1. 2. 3. 4. 5. 6. 7. 8. 9.
© Adafruit Industries https://learn.adafruit.
I can't get the Itsy/Feather USB device to show up - I get "USB Device Malfunctioning" errors! This seems to happen when people select the wrong board from the Arduino Boards menu. If you have a Feather 32u4 (look on the board to read what it is you have) Make sure you select Feather 32u4 for ATMega32u4 based boards! Do not use anything else, do not use the 32u4 breakout board line.
I'm having problems with COM ports and my Itsy/Feather 32u4/M0 Theres two COM ports you can have with the 32u4/M0, one is the user port and one is the bootloader port. They are not the same COM port number! When you upload a new user program it will come up with a user com port, particularly if you use Serial in your user program. If you crash your user program, or have a program that halts or otherwise fails, the user COM port can disappear.
I don't understand why the COM port disappears, this does not happen on my Arduino UNO! UNO-type Arduinos have a seperate serial port chip (aka "FTDI chip" or "Prolific PL2303" etc etc) which handles all serial port capability seperately than the main chip. This way if the main chip fails, you can always use the COM port. M0 and 32u4-based Arduinos do not have a seperate chip, instead the main processor performs this task for you. It allows for a lower cost, higher power setup...
I'm trying to upload to my 32u4, getting "avrdude: butterfly_recv(): programmer is not responding" errors This is likely because the bootloader is not kicking in and you are accidentally trying to upload to the wrong COM port The best solution is what is detailed above: manually upload Blink or a similar working sketch by hand by manually launching the bootloader © Adafruit Industries https://learn.adafruit.
I'm trying to upload to my Feather M0, and I get this error "Connecting to programmer: .avrdude: butterfly_recv(): programmer is not responding" You probably don't have Feather M0 selected in the boards drop-down. Make sure you selected Feather M0. © Adafruit Industries https://learn.adafruit.
I'm trying to upload to my Feather and i get this error "avrdude: ser_recv(): programmer is not responding" You probably don't have Feather M0 / Feather 32u4 selected in the boards drop-down. Make sure you selected Feather M0 (or Feather 32u4). © Adafruit Industries https://learn.adafruit.
I attached some wings to my Feather and now I can't read the battery voltage! Make sure your Wing doesn't use pin #9 which is the analog sense for the lipo battery! © Adafruit Industries https://learn.adafruit.
The yellow LED Is flickering on my Feather, but no battery is plugged in, why is that? The charge LED is automatically driven by the Lipoly charger circuit. It will try to detect a battery and is expecting one to be attached. If there isn't one it may flicker once in a while when you use power because it's trying to charge a (non-existant) battery. It's not harmful, and its totally normal! © Adafruit Industries https://learn.adafruit.
© Adafruit Industries https://learn.adafruit.
Using the RFM69 Radio This page is shared between the RFM69 breakout and the all-in-one Feather RFM69's. The example code and overall functionality is the same, only the pinouts used may differ! Just make sure the example code is using the pins you have wired up. Before beginning make sure you have your Arduino or Feather working smoothly, it will make this part a lot easier. Once you have the basic functionality going - you can upload code, blink an LED, use the serial output, etc.
correction so you can be sure the whole data set was transmitted correctly, automatic re-transmit retries and returnreceipt when the packet was delivered. Basically, you get the transparency of a data pipe without the annoyances of radio transmission unreliability Arduino Libraries These radios have really great libraries already written, so rather than coming up with a new standard we suggest using existing libraries such as LowPowerLab's RFM69 Library (https://adafru.
Before uploading, check for the #define FREQUENCY RF69_915MHZ line and comment that out (and uncomment the line above) to match the frequency of the hardware you're using These examples are optimized for the Feather 32u4/M0.
Now open up another instance of the Arduino IDE - this is so you can see the serial console output from the TX device while you set up the RX device. Basic receiver example code This code will receive and reply with a small packet of data. Open up the example RadioHead -> feather -> RadioHead69_RawDemo_RX Load this code into your Receiver Arduino/Feather! © Adafruit Industries https://learn.adafruit.
Before uploading, check for the #define FREQUENCY RF69_915MHZ line and comment that out (and uncomment the line above) to match the frequency of the hardware you're using These examples are optimized for the Feather 32u4/M0.
That's pretty much the basics of it! Lets take a look at the examples so you know how to adapt to your own radio network Radio Freq. Config Each radio has a frequency that is configurable in software. You can actually tune outside the recommended frequency, but the range won't be good. 900 MHz can be tuned from about 850-950MHz with good performance. 433 MHz radios can be tuned from 400-460 MHz or so. // Change to 434.0 or other frequency, must match RX's freq! #define RF69_FREQ 915.
If you're using a Feather M0, the pinout is slightly different: #if defined(ARDUINO_SAMD_FEATHER_M0) // Feather M0 w/Radio #define RFM69_CS 8 #define RFM69_INT 3 #define RFM69_RST 4 #define LED 13 #endif If you're using an Arduino UNO or compatible, we recommend: #if defined (__AVR_ATmega328P__) // UNO or Feather 328P w/wing #define RFM69_INT 3 // #define RFM69_CS 4 // #define RFM69_RST 2 // "A" #define LED 13 #endif If you're using a FeatherWing or different setup, you'll have to set up the #define state
Initializing Radio Once initialized, you can set up the frequency, transmission power, radio type and encryption key. For the frequency, we set it already at the top of the sketch For transmission power you can select from 14 to 20 dBi. Lower numbers use less power, but have less range. The second argument to the function is whether it is an HCW type radio, with extra amplifier. This should always be set to true! Finally, if you are encrypting data transmission, set up the encryption key if (!rf69.
void loop() { delay(1000); // Wait 1 second between transmits, could also 'sleep' here! char radiopacket[20] = "Hello World #"; itoa(packetnum++, radiopacket+13, 10); Serial.print("Sending "); Serial.println(radiopacket); // Send a message! rf69.send((uint8_t *)radiopacket, strlen(radiopacket)); rf69.waitPacketSent(); // Now wait for a reply uint8_t buf[RH_RF69_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (rf69.waitAvailableTimeout(500)) { // Should be a reply message for us now if (rf69.
void loop() { if (rf69.available()) { // Should be a message for us now uint8_t buf[RH_RF69_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (rf69.recv(buf, &len)) { if (!len) return; buf[len] = 0; Serial.print("Received ["); Serial.print(len); Serial.print("]: "); Serial.println((char*)buf); Serial.print("RSSI: "); Serial.println(rf69.lastRssi(), DEC); if (strstr((char *)buf, "Hello World")) { // Send a reply! uint8_t data[] = "And hello back to you"; rf69.send(data, sizeof(data)); rf69.
This demo code shows how you can listen for packets and also check for button presses (or sensor data or whatever you like) and send them back and forth between the two radios! Addressed RX and TX Demo OK so the basic demo is well and good but you have to do a lot of management of the connection to make sure packets were received. Instead of manually sending acknowledgements, you can have the RFM69 and library do it for you! Thus the Reliable Datagram part of the RadioHead library.
Because the data is being sent to address #1, but #1 is not acknowledging that data. If you have the server running, with no clients, it will sit quietly: Turn on the client and you'll see acknowledged packets! © Adafruit Industries https://learn.adafruit.
And the server is also pretty happy The secret sauce is the addition of this new object: // Class to manage message delivery and receipt, using the driver declared above RHReliableDatagram rf69_manager(rf69, MY_ADDRESS); Which as you can see, is the manager for the RFM69. In setup() you'll need to init it, although you still configure the underlying rfm69 like before: if (!rf69_manager.init()) { Serial.
if (rf69_manager.sendtoWait((uint8_t *)radiopacket, strlen(radiopacket), DEST_ADDRESS)) { on the 'other side' use the recvFromAck which will receive and acknowledge a packet // Wait for a message addressed to us from the client uint8_t len = sizeof(buf); uint8_t from; if (rf69_manager.recvfromAck(buf, &len, &from)) { That function will wait forever. If you'd like to timeout while waiting for a packet, use recvfromAckTimeout which will wait an indicated # of milliseconds if (rf69_manager.
Radio Range F.A.Q. Which gives better range, LoRa or RFM69? All other things being equal (antenna, power output, location) you will get better range with LoRa than with RFM69 modules. We've found 50% to 100% range improvement is common. © Adafruit Industries https://learn.adafruit.
What ranges can I expect for RFM69 radios? The RFM69 radios have a range of approx. 500 meters line of sight with tuned uni-directional antennas. Depending on obstructions, frequency, antenna and power output, you will get lower ranges - especially if you are not line of sight. © Adafruit Industries https://learn.adafruit.
What ranges can I expect for RFM9X LoRa radios? The RFM9x radios have a range of up to 2 km line of sight with tuned uni-directional antennas. Depending on obstructions, frequency, antenna and power output, you will get lower ranges - especially if you are not line of sight. © Adafruit Industries https://learn.adafruit.
I don't seem to be getting the range advetised! Is my module broken? Your module is probably not broken. Radio range is dependant on a lot of things and all must be attended to to make sure you get the best performance! 1. Tuned antenna for your frequency - getting a well tuned antenna is incredibly important. Your antenna must be tuned for the exact frequency you are using 2. Matching frequency - make sure all modules are on the same exact frequency 3.
How do I pick/design the right antenna? Various antennas will cost diferent amounts and give you different directional gain. In general, spending a lot on a large fixed antenna can give you better power transfer if the antenna is well tuned. For most simple uses, a wire works pretty well The ARRL antena book is recommended if you want to learn how to do the modeling and analysis But nothing beats actual tests in your environment! © Adafruit Industries https://learn.adafruit.
What frequency is my module? Look for a little colored paint dot on top of the module. GREEN or BLUE = 900 MHz RED = 433 MHz Every now and then the paint dot shows up without a color or with the ink dot burnt. This is just a manufacturing variance and there is nothing wrong with the board. You should get the frequency you ordered though. So if you plan on mixing these up, you may want to add a new mark of your own. © Adafruit Industries https://learn.adafruit.
My radio has a burnt blob on it, is it damaged? Nope! The radios have an ink dot on them, which sometimes gets toasty when we put the board through the oven, or rework it, so it may have a burnt appearance. The chip is fine! © Adafruit Industries https://learn.adafruit.
© Adafruit Industries https://learn.adafruit.
Downloads Datasheets & Files FCC Test Report (https://adafru.it/oC0) RoHS Test Report (https://adafru.it/oC1) RoHS Test Report (https://adafru.it/oC2) REACH Test Report (https://adafru.it/oC3) RFM69HCW datasheet - contains the SX1231 datasheet plus details about the module (https://adafru.it/mCu) SX1231 Transceiver Datasheet (https://adafru.it/mCv) EagleCAD PCB Files on GitHub (https://adafru.it/obt) Fritzing object in Adafruit Fritzing Library (https://adafru.it/aP3) https://adafru.it/z3E https://adafru.
© Adafruit Industries https://learn.adafruit.
© Adafruit Industries Last Updated: 2019-09-05 09:52:39 PM UTC Page 78 of 78