LoRa Access Point 1.5.2018

Dependencies:   mbed ds3231 SX1276Lib_LoRa_Access_Point

Committer:
lukas_formanek
Date:
Mon Apr 30 22:41:48 2018 +0000
Revision:
5:19b34c4d27a1
Parent:
4:e20eb5efd859
Child:
8:5d99fbf255d6
1.5.2018

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lukas_formanek 0:ea088908ad26 1 #ifndef RFM95W_H
lukas_formanek 0:ea088908ad26 2 #define RFM95W_H
lukas_formanek 0:ea088908ad26 3
lukas_formanek 0:ea088908ad26 4 #include "mbed.h"
lukas_formanek 0:ea088908ad26 5 #include "sx1276-hal.h"
lukas_formanek 0:ea088908ad26 6 #include "ESP8266.h"
lukas_formanek 1:7543af31b91f 7 #include "Board.h"
lukas_formanek 0:ea088908ad26 8
lukas_formanek 5:19b34c4d27a1 9 #define GATEWAY_ID 1 // Adresa Access pointu
lukas_formanek 0:ea088908ad26 10
lukas_formanek 0:ea088908ad26 11 ////////////////////////////////////////////////////////////////////////////////
lukas_formanek 0:ea088908ad26 12
lukas_formanek 0:ea088908ad26 13 /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
lukas_formanek 0:ea088908ad26 14 #define USE_MODEM_LORA 1
lukas_formanek 0:ea088908ad26 15 #define USE_MODEM_FSK !USE_MODEM_LORA
lukas_formanek 0:ea088908ad26 16
lukas_formanek 0:ea088908ad26 17 #define RF_FREQUENCY 869525000 //868000000 // Hz
lukas_formanek 0:ea088908ad26 18 #define TX_OUTPUT_POWER 20 // 20 dBm
lukas_formanek 0:ea088908ad26 19
lukas_formanek 0:ea088908ad26 20 #if USE_MODEM_LORA == 1
lukas_formanek 5:19b34c4d27a1 21 // Max range, slow data rate = BW=125, CR=4/5, SF=12
lukas_formanek 5:19b34c4d27a1 22 #define LORA_BANDWIDTH 1 // [0: 125 kHz,
lukas_formanek 5:19b34c4d27a1 23 // 1: 250 kHz,
lukas_formanek 5:19b34c4d27a1 24 // 2: 500 kHz,
lukas_formanek 5:19b34c4d27a1 25 // 3: Reserved]
lukas_formanek 5:19b34c4d27a1 26 #define LORA_SPREADING_FACTOR 12 // [SF7..SF12]
lukas_formanek 5:19b34c4d27a1 27 #define LORA_CODINGRATE 1 // [1: 4/5,
lukas_formanek 5:19b34c4d27a1 28 // 2: 4/6,
lukas_formanek 5:19b34c4d27a1 29 // 3: 4/7,
lukas_formanek 5:19b34c4d27a1 30 // 4: 4/8]
lukas_formanek 5:19b34c4d27a1 31 #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
lukas_formanek 5:19b34c4d27a1 32 #define LORA_SYMBOL_TIMEOUT 5 // Symbols
lukas_formanek 5:19b34c4d27a1 33 #define LORA_FIX_LENGTH_PAYLOAD_ON false
lukas_formanek 5:19b34c4d27a1 34 #define LORA_FHSS_ENABLED false
lukas_formanek 5:19b34c4d27a1 35 #define LORA_NB_SYMB_HOP 4
lukas_formanek 5:19b34c4d27a1 36 #define LORA_IQ_INVERSION_ON false
lukas_formanek 5:19b34c4d27a1 37 #define LORA_CRC_ENABLED true
lukas_formanek 0:ea088908ad26 38
lukas_formanek 0:ea088908ad26 39 #elif USE_MODEM_FSK == 1
lukas_formanek 0:ea088908ad26 40
lukas_formanek 5:19b34c4d27a1 41 #define FSK_FDEV 25000 // Hz
lukas_formanek 5:19b34c4d27a1 42 #define FSK_DATARATE 19200 // bps
lukas_formanek 5:19b34c4d27a1 43 #define FSK_BANDWIDTH 50000 // Hz
lukas_formanek 5:19b34c4d27a1 44 #define FSK_AFC_BANDWIDTH 83333 // Hz
lukas_formanek 5:19b34c4d27a1 45 #define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx
lukas_formanek 5:19b34c4d27a1 46 #define FSK_FIX_LENGTH_PAYLOAD_ON false
lukas_formanek 5:19b34c4d27a1 47 #define FSK_CRC_ENABLED true
lukas_formanek 0:ea088908ad26 48
lukas_formanek 0:ea088908ad26 49 #else
lukas_formanek 5:19b34c4d27a1 50 #error "Please define a modem in the compiler options."
lukas_formanek 0:ea088908ad26 51 #endif
lukas_formanek 0:ea088908ad26 52
lukas_formanek 0:ea088908ad26 53 #define RX_TIMEOUT_VALUE 2500000 // in us // 3500000
lukas_formanek 0:ea088908ad26 54 #define BUFF_SIZE 255 // Define the payload size here // 32
lukas_formanek 2:0499e1d037a5 55 #define MAX_DEVICES 255
lukas_formanek 4:e20eb5efd859 56 #define MAX_RESENDS 4
lukas_formanek 0:ea088908ad26 57 //------------------------------------------------------------------------------
lukas_formanek 0:ea088908ad26 58
lukas_formanek 0:ea088908ad26 59 class RFM95W
lukas_formanek 0:ea088908ad26 60 {
lukas_formanek 0:ea088908ad26 61 private:
lukas_formanek 0:ea088908ad26 62 RadioEvents_t radioEvents; /**< Radio events function pointer */
lukas_formanek 0:ea088908ad26 63 SX1276MB1xAS radio; /**< Radiovy modul */
lukas_formanek 0:ea088908ad26 64 DigitalOut indicationLed; /**< Indikacna led */
lukas_formanek 5:19b34c4d27a1 65 AnalogIn noise;
lukas_formanek 0:ea088908ad26 66 Ticker ledTicker;
lukas_formanek 3:7a3ddda464bf 67 Ticker sendTicker;
lukas_formanek 3:7a3ddda464bf 68 Ticker ackTicker;
lukas_formanek 3:7a3ddda464bf 69
lukas_formanek 1:7543af31b91f 70 uint8_t receivedMessage[BUFF_SIZE];
lukas_formanek 3:7a3ddda464bf 71 uint8_t sendBuffer[BUFF_SIZE];
lukas_formanek 3:7a3ddda464bf 72 uint8_t ack[3];
lukas_formanek 0:ea088908ad26 73 volatile uint8_t messageNumbers[MAX_DEVICES];
lukas_formanek 3:7a3ddda464bf 74 volatile uint8_t messageNumber; /**< My message number */
lukas_formanek 0:ea088908ad26 75 volatile uint8_t ledState;
lukas_formanek 0:ea088908ad26 76 volatile float timeOnAirSec;
lukas_formanek 3:7a3ddda464bf 77 volatile bool receivedAck;
lukas_formanek 3:7a3ddda464bf 78 volatile bool sendingAck;
lukas_formanek 3:7a3ddda464bf 79 volatile uint8_t sendCounter;
lukas_formanek 5:19b34c4d27a1 80
lukas_formanek 3:7a3ddda464bf 81 float CalculateRandomTime();
lukas_formanek 3:7a3ddda464bf 82 void InitRandom();
lukas_formanek 0:ea088908ad26 83 void OnLedTick();
lukas_formanek 3:7a3ddda464bf 84 void SendMessage();
lukas_formanek 0:ea088908ad26 85 void SendAck(uint8_t addr, uint8_t messageNumber);
lukas_formanek 3:7a3ddda464bf 86 void OnCheckAck();
lukas_formanek 3:7a3ddda464bf 87 void OnSendAgain();
lukas_formanek 0:ea088908ad26 88 public:
lukas_formanek 0:ea088908ad26 89 RFM95W();
lukas_formanek 0:ea088908ad26 90 void Init();
lukas_formanek 0:ea088908ad26 91 void OnTxDone( void );
lukas_formanek 0:ea088908ad26 92 void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr );
lukas_formanek 0:ea088908ad26 93 void OnTxTimeout( void );
lukas_formanek 0:ea088908ad26 94 void OnRxTimeout( void );
lukas_formanek 0:ea088908ad26 95 void OnRxError( void );
lukas_formanek 5:19b34c4d27a1 96 void OnCadDone( bool channelActivityDetected );
lukas_formanek 3:7a3ddda464bf 97 void SendValue(uint8_t addr, float value);
lukas_formanek 4:e20eb5efd859 98 void SendValue(uint8_t addr, int value);
lukas_formanek 4:e20eb5efd859 99 void SendMessage(char* message);
lukas_formanek 0:ea088908ad26 100 };
lukas_formanek 0:ea088908ad26 101 extern RFM95W rfm;
lukas_formanek 0:ea088908ad26 102
lukas_formanek 0:ea088908ad26 103 #endif