Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // **********************************************************************************
- // Struct Send RFM69 Example
- // **********************************************************************************
- // Copyright Felix Rusu 2018, http://www.LowPowerLab.com/contact
- // **********************************************************************************
- // License
- // **********************************************************************************
- // This program is free software; you can redistribute it
- // and/or modify it under the terms of the GNU General
- // Public License as published by the Free Software
- // Foundation; either version 3 of the License, or
- // (at your option) any later version.
- //
- // This program is distributed in the hope that it will
- // be useful, but WITHOUT ANY WARRANTY; without even the
- // implied warranty of MERCHANTABILITY or FITNESS FOR A
- // PARTICULAR PURPOSE. See the GNU General Public
- // License for more details.
- //
- // Licence can be viewed at
- // http://www.gnu.org/licenses/gpl-3.0.txt
- //
- // Please maintain this license information along with authorship
- // and copyright notices in any redistribution of this code
- // **********************************************************************************
- #include <RFM69.h> //get it here: https://www.github.com/lowpowerlab/rfm69
- #include <RFM69_ATC.h> //get it here: https://www.github.com/lowpowerlab/rfm69
- #include <SPIFlash.h> //get it here: https://www.github.com/lowpowerlab/spiflash
- #include <SPI.h> //included with Arduino IDE install (www.arduino.cc)
- //*********************************************************************************************
- //************ IMPORTANT SETTINGS - YOU MUST CHANGE/CONFIGURE TO FIT YOUR HARDWARE *************
- //*********************************************************************************************
- #define NODEID 99
- #define NETWORKID 100
- #define GATEWAYID 1
- //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 ENCRYPTKEY "sampleEncryptKey" //has to be same 16 characters/bytes on all nodes, not more not less!
- #define IS_RFM69HW_HCW //uncomment only for RFM69HW/HCW! Leave out if you have RFM69W/CW!
- //*********************************************************************************************
- //Auto Transmission Control - dials down transmit power to save battery
- //Usually you do not need to always transmit at max output power
- //By reducing TX power even a little you save a significant amount of battery power
- //This setting enables this gateway to work with remote nodes that have ATC enabled to
- //dial their power down to only the required level
- #define ENABLE_ATC //comment out this line to disable AUTO TRANSMISSION CONTROL
- //*********************************************************************************************
- #define SERIAL_BAUD 115200
- #ifdef ENABLE_ATC
- RFM69_ATC radio;
- #else
- RFM69 radio;
- #endif
- SPIFlash flash(10, 0xEF30); //EF40 for 16mbit windbond chip
- int TRANSMITPERIOD = 300; //transmit a packet to gateway so often (in ms)
- byte sendSize=0;
- boolean requestACK = false;
- typedef struct {
- int nodeId; //store this nodeId
- unsigned long uptime; //uptime in ms
- float temp; //temperature maybe?
- } Payload;
- Payload theData;
- void setup() {
- Serial.begin(SERIAL_BAUD);
- radio.initialize(FREQUENCY,NODEID,NETWORKID);
- #ifdef IS_RFM69HW_HCW
- radio.setHighPower(); //must include this only for RFM69HW/HCW!
- #endif
- radio.encrypt(ENCRYPTKEY);
- char buff[50];
- sprintf(buff, "\nTransmitting at %d Mhz...", FREQUENCY==RF69_433MHZ ? 433 : FREQUENCY==RF69_868MHZ ? 868 : 915);
- Serial.println(buff);
- if (flash.initialize())
- Serial.println("SPI Flash Init OK!");
- else
- Serial.println("SPI Flash Init FAIL! (is chip present?)");
- }
- long lastPeriod = -1;
- void loop() {
- //process any serial input
- if (Serial.available() > 0)
- {
- char input = Serial.read();
- if (input >= 48 && input <= 57) //[0,9]
- {
- TRANSMITPERIOD = 100 * (input-48);
- if (TRANSMITPERIOD == 0) TRANSMITPERIOD = 1000;
- Serial.print("\nChanging delay to ");
- Serial.print(TRANSMITPERIOD);
- Serial.println("ms\n");
- }
- if (input == 'r') //d=dump register values
- radio.readAllRegs();
- //if (input == 'E') //E=enable encryption
- // radio.encrypt(ENCRYPTKEY);
- //if (input == 'e') //e=disable encryption
- // radio.encrypt(null);
- if (input == 'd') //d=dump flash area
- {
- Serial.println("Flash content:");
- int counter = 0;
- while(counter<=256){
- Serial.print(flash.readByte(counter++), HEX);
- Serial.print('.');
- }
- while(flash.busy());
- Serial.println();
- }
- if (input == 'e')
- {
- Serial.print("Erasing Flash chip ... ");
- flash.chipErase();
- while(flash.busy());
- Serial.println("DONE");
- }
- if (input == 'i')
- {
- Serial.print("DeviceID: ");
- word jedecid = flash.readDeviceId();
- Serial.println(jedecid, HEX);
- }
- }
- //check for any received packets
- if (radio.receiveDone())
- {
- 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(" [RX_RSSI:");Serial.print(radio.readRSSI());Serial.print("]");
- if (radio.ACKRequested())
- {
- radio.sendACK();
- Serial.print(" - ACK sent");
- delay(10);
- }
- Blink(LED_BUILTIN,5);
- Serial.println();
- }
- int currPeriod = millis()/TRANSMITPERIOD;
- if (currPeriod != lastPeriod)
- {
- //fill in the struct with new values
- theData.nodeId = NODEID;
- theData.uptime = millis();
- theData.temp = 91.23; //it's hot!
- Serial.print("Sending struct (");
- Serial.print(sizeof(theData));
- Serial.print(" bytes) ... ");
- if (radio.sendWithRetry(GATEWAYID, (const void*)(&theData), sizeof(theData)))
- Serial.print(" ok!");
- else Serial.print(" nothing...");
- Serial.println();
- Blink(LED_BUILTIN,3);
- lastPeriod=currPeriod;
- }
- }
- void Blink(byte PIN, int DELAY_MS)
- {
- pinMode(PIN, OUTPUT);
- digitalWrite(PIN,HIGH);
- delay(DELAY_MS);
- digitalWrite(PIN,LOW);
- }
Advertisement
Add Comment
Please, Sign In to add comment