Author Topic: Low-power listening using RFM69  (Read 251 times)

Ryan

  • NewMember
  • *
  • Posts: 5
Low-power listening using RFM69
« on: September 17, 2021, 12:37:03 AM »
I'm working on a DIY project built on the Moteino M0 + RFM69 consisting of a battery-powered receiver and a line-powered transmitter.

My goal is to reduce power consumption for the receiver to the absolute minimum while still allowing it to detect a transmitted signal within ~1 second. The transmitter is always-on with no power restrictions, and transmissions are rare (e.g. a few per day), so it can blast out and repeat a transmission until the receiver sends an ACK.

I understand that the RFM69 radio will always draw ~17mA when in receive mode, so I assume that any power reduction will come from minimizing its RX duty cycle. I read elsewhere on the form, for example, that the radio may only need ~250uS to reliably detected a transmission with a long enough preamble, however I'm not sure if that was verified or followed through with working code.

Does this come down to calling radio.receiveDone() once per second for as short a time a possible, or are there other tips/tricks/best practices here?

Ryan

  • NewMember
  • *
  • Posts: 5
Re: Low-power listening using RFM69
« Reply #1 on: September 17, 2021, 11:14:29 PM »
Just to clarify my question a bit further: It sounds like the most battery-efficient way for the RFM69 to work as a receiver for this use case is to:
  • Have the transmitting RFM69 (which is not battery powered) send a burst transmission whenever I want to trigger the receiver (which, again, will be rare)
  • Have the receiver's (battery-powered) MCU + RFM69 wake from sleep once a second, and spend a very short (< 1ms) amount of time looking for indications that a transmission is coming in (e.g. RSSI threshold, some type of RX interrupt from the RFM69, or a full-on packet RX operation? I'm not clear on the best/fastest means of detection here). The idea would be to minimize the duty cycle so that the average current draw when there are no transmissions to receive is very low (e.g. no more than tens of uA).
  • When a transmission is detected, receive the full packet, send an ACK, then go back to sleep
So far all the examples I've seen (e.g. for "listen mode") are for older AVR boards, but with the latest Moteino M0 being SAMD-based, I haven't found any implementations of this type of scheme anywhere.

I'm really impressed with the job Felix and the community have done utilizing Moteinos and the RFM69 for low-power use cases, and appreciate any guidance here.

redpoll123

  • NewMember
  • *
  • Posts: 23
Re: Low-power listening using RFM69
« Reply #2 on: September 18, 2021, 12:04:54 PM »
I have  a Moteino/RFM95 lora controlling a remote gate opener.
The Moteino needs to listen 24/7  (drawing 16 ma).
It  listens for 4 seconds and sleeps 8 seconds.
The 6 volt battery needed charging every 10 days.
Changed  the  Moteino to an 8 mhz.
Changed the battery to a single cell  >25ah<  3.2v Lithium Iron Phosphate (LiFePO4).
Now it has been running for 30 days and voltage has dropped .1 volt.
Sometimes  the solution is a bigger hammer.

Ryan

  • NewMember
  • *
  • Posts: 5
Re: Low-power listening using RFM69
« Reply #3 on: September 18, 2021, 12:20:48 PM »
Sounds like brute force is getting the job done for your use case! Iím building a lightweight wearable, so doing the same isnít an option for me.

Iím sure there must be some way to set the receiver to listen for ~1ms then sleep for 1000ms, ensuring both a low duty cycle as well as a reasonably quick response time after a burst transmission. Hoping someone out there can educate us a bit here!