add Gateway_sleepMCU example
This commit is contained in:
parent
d6b2c19f2a
commit
d21c92eeb3
|
|
@ -0,0 +1,81 @@
|
|||
// Sample RFM69 receiver/gateway sketch, with ACK and optional encryption
|
||||
// MCU in SLEEP_FOREVER, radio in active RX mode
|
||||
// Passes through any wireless received messages to the serial port & responds to ACKs
|
||||
// Library and code by Felix Rusu - felix@lowpowerlab.com
|
||||
//****************************************************************************************************************
|
||||
#include <RFM69.h> //get it here: https://www.github.com/lowpowerlab/rfm69
|
||||
#include <RFM69_ATC.h>
|
||||
#include <LowPower.h> //get it here: https://www.github.com/lowpowerlab/lowpower
|
||||
//****************************************************************************************************************
|
||||
#define NODEID 1 //keep Gateways at ID=1
|
||||
#define NETWORKID 100 //the same on all nodes that talk to each other
|
||||
//Match frequency to the hardware version of the radio on your Moteino (uncomment one):
|
||||
//#define FREQUENCY RF69_433MHZ
|
||||
//#define FREQUENCY RF69_868MHZ
|
||||
#define FREQUENCY RF69_915MHZ
|
||||
//#define FREQUENCY_EXACT 917000000 //uncomment to set to a specific frequency
|
||||
#define IS_RFM69HW_HCW //uncomment only for RFM69HW! Leave out if you have RFM69W!
|
||||
#define ENABLE_ATC //AUTO TRANSMISSION CONTROL - comment out to disable it
|
||||
#define ENCRYPTKEY "sampleEncryptKey" //exactly the same 16 characters/bytes on all nodes!
|
||||
#define SERIAL_BAUD 115200
|
||||
//****************************************************************************************************************
|
||||
#ifdef ENABLE_ATC
|
||||
RFM69_ATC radio;
|
||||
#else
|
||||
RFM69 radio;
|
||||
#endif
|
||||
|
||||
char buff[61];
|
||||
void setup() {
|
||||
Serial.begin(SERIAL_BAUD);
|
||||
radio.initialize(FREQUENCY,NODEID,NETWORKID);
|
||||
#ifdef IS_RFM69HW
|
||||
radio.setHighPower(); //only for RFM69HW!
|
||||
#endif
|
||||
#ifdef ENCRYPTKEY
|
||||
radio.encrypt(ENCRYPTKEY);
|
||||
#endif
|
||||
|
||||
#ifdef FREQUENCY_EXACT
|
||||
radio.setFrequency(FREQUENCY_EXACT); //set frequency to some custom frequency
|
||||
#endif
|
||||
|
||||
sprintf(buff, "\nListening at %lu Mhz...", radio.getFrequency()/1000000L);
|
||||
|
||||
#ifdef ENABLE_ATC
|
||||
Serial.println("RFM69_ATC Enabled (Auto Transmission Control)");
|
||||
#endif
|
||||
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
}
|
||||
|
||||
uint32_t packetCount = 0;
|
||||
|
||||
void loop() {
|
||||
//ensure radio in RX mode before sleeping
|
||||
radio.receiveDone(); //this checks if a packet is ready and processes it (saves it in lib buffer), or else puts radio in RX mode
|
||||
|
||||
Serial.println("FOREVER SLEEP...");
|
||||
Serial.flush();
|
||||
|
||||
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF); //sleep the MCU
|
||||
|
||||
if (radio.receiveDone()) //WAKEUP by radio interrupt!
|
||||
{
|
||||
digitalWrite(LED_BUILTIN, HIGH);
|
||||
Serial.print("#[");
|
||||
Serial.print(++packetCount);
|
||||
Serial.print(']');
|
||||
Serial.print('[');Serial.print(radio.SENDERID, DEC);Serial.print("] ");
|
||||
|
||||
for (byte i = 0; i < radio.DATALEN; i++)
|
||||
Serial.print((char)radio.DATA[i]);
|
||||
|
||||
Serial.print(" [RSSI:");Serial.print(radio.RSSI);Serial.print("]");
|
||||
|
||||
if (radio.ACKRequested()) radio.sendACK();
|
||||
|
||||
Serial.println();
|
||||
digitalWrite(LED_BUILTIN, LOW);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue