This is the library that I’ve been working on for the new RFM69 modules from HopeRF. I consider this an initial beta release and it surely is a work in progress, it may contain bugs, but the provided Gateway and Node examples should work out of the box and illustrate basic usage. Please let me know if you find issues. The syntax is a little similar to that of the RFM12B library, but I went with some new conventions on naming and overall structure to improve readability and overall code quality.
This is a video introduction to Moteino R3:
This is a new product and the library needs more testing and performance tuning. The library currently is tuned for fixed 433/868/915 Mhz frequencies, and a 50khz bitrate, 50khz frequency deviation. I am hoping others will contribute and test the library to find the best combination of these settings and power level vs range vs frequency vs bitrate, etc.
Here’s a comparison between RFM12B and RFM69:
Among others, this is a set of features implemented in this library:
- easy to use API with a few simple functions for basic usage
- 255 possible nodes on 256 possible networks
- 61 bytes max message length (limited to 61 to support AES hardware encryption)
- customizable transmit power (32 levels) for low-power transmission control
- sleep function for power saving
- automatic ACKs with the sendWithRetry() function
- hardware 128bit AES encryption
- hardware preamble, synch recognition and CRC check
- digital RSSI can be read at any time with readRSSI()
- other features like frequency hopping can be achieved by extending the library
- interrupt driven
- tested on Moteino R3 (ATMega328p) – see my other posts and youtube videos
- works with RFM69W and RFM69HW, Semtech SX1231/SX1231H transceivers
- promiscuous mode allows any node to listen to any packet on same network
- The source code and examples are on GitHub: RFM69 Library
Promiscuous mode is a very desirable feature, to be able to listen to any packets on the same network. A decision was made to not use the hardware address filtering because promiscuous mode would not be possible while using AES encryption (hardware would automatically filter out packets with different addresses after decryption). RFM69 modules support packets 255bytes long, or even unlimited, however since AES hardware encryption must have all 64 encryptable bytes before encryption engine can do it’s work, this library was limited to 65 bytes total payload, including a 4 header bytes. The payload length is automatically controlled by hardware and is not encrypted. Only the DestID, SenderID and CTL bytes are encrypted. Hence 61 other encryptable bytes remain for data. This is more than sufficient for most situations and longer packets are not always desirable for several reasons but mainly longer packets take longer to transmit and increase the chance for collisions and interference/errors, and also longer packets will need larger RAM buffers to hold the received data. Longer packets can easily be achieved by chaining while retaining all of the desirable hardware features this transceiver has to offer.