A multifunctional and modular Firmware for Multitech's mDot based on ARM mBed provides a widerange of functionality for several Sensors such as MAX44009, BME280, MPU9250, SI1143 and uBlox. It allows you to quickly build a Sensornode that measures specific data with its sensors and sends it via LoRaWAN.

Dependencies:   mDot_LoRa_Sensornode_Flowmeter_impl mbed-rtos mbed

LoRa-Sensornode Firmware for Multitech mDot

A multifunctional and modular Firmware for Multitech's mDot which provides a widerange of functionality for several Sensors. It allows you to quickly build a Sensornode that measures specific data with its sensors and sends it via LoRaWAN.

/media/uploads/mitea1/logo-lora-600x370.png /media/uploads/mitea1/mt_mdot_family_642px.png

Supported Sensors

Idea

The Firmware has some predefined Application Modes running different Tasks(Measurements). Each mode can be used in a different Scenario. Application_Modes define which sensors are used, how often they aquire data and how often the data has to be sent via LoRa. Lets say you just want to measure the Light then you choose an Application_Mode (or define one) that only runs TaskLight for light measurement. As a standard all measurements are taken every second and sent via LoRa but you can change that interval depending on your usage Scenario

Committer:
mitea1
Date:
Tue Nov 01 19:42:40 2016 +0000
Revision:
8:4b4d58bd631c
Parent:
1:fe242f3e341b
declared APP_EUI and APP_KEY for TTN OTAA as MSB

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mitea1 0:f2815503561f 1 /*
mitea1 0:f2815503561f 2 * LoRaConfig.cpp
mitea1 0:f2815503561f 3 *
mitea1 0:f2815503561f 4 * Created on: Jun 11, 2016
mitea1 0:f2815503561f 5 * Author: Adrian
mitea1 0:f2815503561f 6 */
mitea1 0:f2815503561f 7
mitea1 0:f2815503561f 8 #include "LoRaConfig.h"
mitea1 0:f2815503561f 9
mitea1 0:f2815503561f 10 //LoRaConfig::LoRaConfig(){
mitea1 0:f2815503561f 11 //
mitea1 0:f2815503561f 12 //}
mitea1 0:f2815503561f 13 //
mitea1 0:f2815503561f 14 //LoRaConfig::~LoRaConfig(){
mitea1 0:f2815503561f 15 //
mitea1 0:f2815503561f 16 //}
mitea1 0:f2815503561f 17
mitea1 0:f2815503561f 18 void LoRaConfig::build(LORA_MODE desiredMode){
mitea1 1:fe242f3e341b 19
mitea1 0:f2815503561f 20 setLORA_MODE(desiredMode);
mitea1 1:fe242f3e341b 21 setNetworkName(LORA_NETWORK_NAME);
mitea1 1:fe242f3e341b 22 setNetworkPassphrase(LORA_NETWORK_PASSPHRASE);
mitea1 1:fe242f3e341b 23 setAppEUI();
mitea1 1:fe242f3e341b 24 setAppKey();
mitea1 1:fe242f3e341b 25 setDeviceEUI();
mitea1 0:f2815503561f 26
mitea1 0:f2815503561f 27 switch(desiredMode){
mitea1 0:f2815503561f 28
mitea1 0:f2815503561f 29 case LORA_MODE_0_OFF:
mitea1 0:f2815503561f 30 setNetworkPublicity(true);
mitea1 0:f2815503561f 31 setActivity(false);
mitea1 0:f2815503561f 32 setFrequencySubBand(LORA_SUBBAND_0);
mitea1 0:f2815503561f 33 setSpreadingFactor(LORA_SPREADING_FACTOR_7);
mitea1 0:f2815503561f 34 setTxPowerdBm(LORA_TX_POWER_16_DBM);
mitea1 0:f2815503561f 35 setAcknowledgeRetries(LORA_ACKNOWLEDGE_RETRIES_1);
mitea1 1:fe242f3e341b 36 setJOIN_MODE(ABP);
mitea1 0:f2815503561f 37 break;
mitea1 0:f2815503561f 38
mitea1 0:f2815503561f 39 case LORA_MODE_1:
mitea1 0:f2815503561f 40 setNetworkPublicity(true);
mitea1 0:f2815503561f 41 setActivity(true);
mitea1 1:fe242f3e341b 42 setFrequencySubBand(LORA_SUBBAND_1);
mitea1 1:fe242f3e341b 43 setSpreadingFactor(LORA_SPREADING_FACTOR_8);
mitea1 0:f2815503561f 44 setTxPowerdBm(LORA_TX_POWER_16_DBM);
mitea1 1:fe242f3e341b 45 setAcknowledgeRetries(LORA_ACKNOWLEDGE_RETRIES_0);
mitea1 1:fe242f3e341b 46 setJOIN_MODE(OTA);
mitea1 0:f2815503561f 47 break;
mitea1 0:f2815503561f 48
mitea1 0:f2815503561f 49 case LORA_MODE_2:
mitea1 0:f2815503561f 50 setNetworkPublicity(true);
mitea1 0:f2815503561f 51 setActivity(true);
mitea1 0:f2815503561f 52 setFrequencySubBand(LORA_SUBBAND_0);
mitea1 0:f2815503561f 53 setSpreadingFactor(LORA_SPREADING_FACTOR_12);
mitea1 0:f2815503561f 54 setTxPowerdBm(LORA_TX_POWER_16_DBM);
mitea1 0:f2815503561f 55 setAcknowledgeRetries(LORA_ACKNOWLEDGE_RETRIES_1);
mitea1 1:fe242f3e341b 56 setJOIN_MODE(ABP);
mitea1 0:f2815503561f 57 break;
mitea1 0:f2815503561f 58
mitea1 0:f2815503561f 59 case LORA_MODE_3:
mitea1 0:f2815503561f 60 setNetworkPublicity(true);
mitea1 0:f2815503561f 61 setActivity(true);
mitea1 0:f2815503561f 62 setFrequencySubBand(LORA_SUBBAND_0);
mitea1 0:f2815503561f 63 setSpreadingFactor(LORA_SPREADING_FACTOR_7);
mitea1 0:f2815503561f 64 setTxPowerdBm(LORA_TX_POWER_16_DBM);
mitea1 0:f2815503561f 65 setAcknowledgeRetries(LORA_ACKNOWLEDGE_RETRIES_1);
mitea1 1:fe242f3e341b 66 setJOIN_MODE(ABP);
mitea1 0:f2815503561f 67 break;
mitea1 0:f2815503561f 68
mitea1 0:f2815503561f 69 case LORA_MODE_4:
mitea1 0:f2815503561f 70 setNetworkPublicity(true);
mitea1 0:f2815503561f 71 setActivity(true);
mitea1 0:f2815503561f 72 setFrequencySubBand(LORA_SUBBAND_0);
mitea1 0:f2815503561f 73 setSpreadingFactor(LORA_SPREADING_FACTOR_7);
mitea1 0:f2815503561f 74 setTxPowerdBm(LORA_TX_POWER_16_DBM);
mitea1 0:f2815503561f 75 setAcknowledgeRetries(LORA_ACKNOWLEDGE_RETRIES_1);
mitea1 1:fe242f3e341b 76 setJOIN_MODE(ABP);
mitea1 0:f2815503561f 77 break;
mitea1 0:f2815503561f 78
mitea1 0:f2815503561f 79 case LORA_MODE_5:
mitea1 0:f2815503561f 80 setNetworkPublicity(true);
mitea1 0:f2815503561f 81 setActivity(true);
mitea1 0:f2815503561f 82 setFrequencySubBand(LORA_SUBBAND_0);
mitea1 0:f2815503561f 83 setSpreadingFactor(LORA_SPREADING_FACTOR_7);
mitea1 0:f2815503561f 84 setTxPowerdBm(LORA_TX_POWER_20_DBM);
mitea1 0:f2815503561f 85 setAcknowledgeRetries(LORA_ACKNOWLEDGE_RETRIES_1);
mitea1 1:fe242f3e341b 86 setJOIN_MODE(ABP);
mitea1 0:f2815503561f 87 break;
mitea1 0:f2815503561f 88
mitea1 0:f2815503561f 89 default:
mitea1 0:f2815503561f 90 setNetworkPublicity(true);
mitea1 0:f2815503561f 91 setActivity(false);
mitea1 0:f2815503561f 92 setFrequencySubBand(LORA_SUBBAND_0);
mitea1 0:f2815503561f 93 setSpreadingFactor(LORA_SPREADING_FACTOR_7);
mitea1 0:f2815503561f 94 setTxPowerdBm(LORA_TX_POWER_16_DBM);
mitea1 0:f2815503561f 95 setAcknowledgeRetries(LORA_ACKNOWLEDGE_RETRIES_1);
mitea1 1:fe242f3e341b 96 setJOIN_MODE(ABP);
mitea1 0:f2815503561f 97 break;
mitea1 0:f2815503561f 98 }
mitea1 0:f2815503561f 99 }
mitea1 0:f2815503561f 100
mitea1 0:f2815503561f 101 bool LoRaConfig::isPublic(){
mitea1 0:f2815503561f 102 return publicity;
mitea1 0:f2815503561f 103 }
mitea1 0:f2815503561f 104
mitea1 0:f2815503561f 105 bool LoRaConfig::isActiv(){
mitea1 0:f2815503561f 106 return activity;
mitea1 0:f2815503561f 107 }
mitea1 0:f2815503561f 108
mitea1 0:f2815503561f 109 std::string LoRaConfig::getNetworkName(){
mitea1 0:f2815503561f 110 return *networkName;
mitea1 0:f2815503561f 111 }
mitea1 0:f2815503561f 112
mitea1 0:f2815503561f 113 std::string LoRaConfig::getNetworkPassphrase(){
mitea1 0:f2815503561f 114 return *networkPassphrase;
mitea1 0:f2815503561f 115 }
mitea1 0:f2815503561f 116
mitea1 1:fe242f3e341b 117 std::string LoRaConfig::getNetworkAddress(){
mitea1 1:fe242f3e341b 118 return *networkAddress;
mitea1 1:fe242f3e341b 119 }
mitea1 1:fe242f3e341b 120
mitea1 1:fe242f3e341b 121 std::vector<uint8_t> LoRaConfig::getAppEUI(){
mitea1 1:fe242f3e341b 122 return *appEUI;
mitea1 1:fe242f3e341b 123 }
mitea1 1:fe242f3e341b 124
mitea1 1:fe242f3e341b 125 std::vector<uint8_t> LoRaConfig::getAppKey(){
mitea1 1:fe242f3e341b 126 return *appKey;
mitea1 1:fe242f3e341b 127 }
mitea1 1:fe242f3e341b 128
mitea1 1:fe242f3e341b 129 std::vector<uint8_t> LoRaConfig::getDeviceEUI(){
mitea1 1:fe242f3e341b 130 return *deviceEUI;
mitea1 1:fe242f3e341b 131 }
mitea1 1:fe242f3e341b 132
mitea1 0:f2815503561f 133 uint8_t LoRaConfig::getFrequencySubBand(){
mitea1 0:f2815503561f 134 return frequencySubBand;
mitea1 0:f2815503561f 135 }
mitea1 0:f2815503561f 136
mitea1 0:f2815503561f 137 uint8_t LoRaConfig::getSpreadingFactor(){
mitea1 0:f2815503561f 138 return spreadingFactor;
mitea1 0:f2815503561f 139 }
mitea1 0:f2815503561f 140
mitea1 0:f2815503561f 141 uint8_t LoRaConfig::getTxPowerdBm(){
mitea1 0:f2815503561f 142 return txPowerdBm;
mitea1 0:f2815503561f 143 }
mitea1 0:f2815503561f 144
mitea1 0:f2815503561f 145 uint8_t LoRaConfig::getAcknowledgeRetries(){
mitea1 0:f2815503561f 146 return acknowledgeRetries;
mitea1 0:f2815503561f 147 }
mitea1 0:f2815503561f 148
mitea1 0:f2815503561f 149 LORA_MODE LoRaConfig::getLORA_MODE(){
mitea1 0:f2815503561f 150 return loraMode;
mitea1 0:f2815503561f 151 }
mitea1 0:f2815503561f 152
mitea1 1:fe242f3e341b 153 JOIN_MODE LoRaConfig::getJOIN_MODE(){
mitea1 1:fe242f3e341b 154 return joinMode;
mitea1 1:fe242f3e341b 155 }
mitea1 1:fe242f3e341b 156
mitea1 0:f2815503561f 157 void LoRaConfig::setNetworkPublicity(bool publicity){
mitea1 0:f2815503561f 158 this->publicity = publicity;
mitea1 0:f2815503561f 159 }
mitea1 0:f2815503561f 160
mitea1 0:f2815503561f 161 void LoRaConfig::setActivity(bool activity){
mitea1 0:f2815503561f 162 this->activity = activity;
mitea1 0:f2815503561f 163 }
mitea1 0:f2815503561f 164
mitea1 0:f2815503561f 165 void LoRaConfig::setNetworkName(char* networkName){
mitea1 0:f2815503561f 166 this->networkName = new std::string(networkName);
mitea1 0:f2815503561f 167 }
mitea1 0:f2815503561f 168
mitea1 0:f2815503561f 169 void LoRaConfig::setNetworkPassphrase(char* networkPassphrase){
mitea1 0:f2815503561f 170 this->networkPassphrase = new std::string(networkPassphrase);
mitea1 0:f2815503561f 171 }
mitea1 0:f2815503561f 172
mitea1 1:fe242f3e341b 173 void LoRaConfig::setNetworkAddress(char* networkAddress){
mitea1 1:fe242f3e341b 174 this->networkAddress = new std::string(networkAddress);
mitea1 1:fe242f3e341b 175 }
mitea1 1:fe242f3e341b 176
mitea1 1:fe242f3e341b 177 void LoRaConfig::setAppEUI(){
mitea1 1:fe242f3e341b 178 this->appEUI = new std::vector<uint8_t>();
mitea1 1:fe242f3e341b 179
mitea1 1:fe242f3e341b 180 for(int i = 0; i < 8; i++){
mitea1 8:4b4d58bd631c 181 this->appEUI->push_back(LORA_APP_EUI_MSB[i]);
mitea1 1:fe242f3e341b 182 }
mitea1 1:fe242f3e341b 183 }
mitea1 1:fe242f3e341b 184
mitea1 1:fe242f3e341b 185 void LoRaConfig::setAppKey(){
mitea1 1:fe242f3e341b 186 this->appKey = new std::vector<uint8_t>();
mitea1 1:fe242f3e341b 187
mitea1 1:fe242f3e341b 188 for(int i = 0; i < 16; i++){
mitea1 8:4b4d58bd631c 189 this->appKey->push_back(LORA_APP_KEY_MSB[i]);
mitea1 1:fe242f3e341b 190 }
mitea1 1:fe242f3e341b 191 }
mitea1 1:fe242f3e341b 192
mitea1 1:fe242f3e341b 193 void LoRaConfig::setDeviceEUI(){
mitea1 1:fe242f3e341b 194 this->deviceEUI = new std::vector<uint8_t>();
mitea1 1:fe242f3e341b 195
mitea1 1:fe242f3e341b 196 for(int i = 0; i < 8; i++){
mitea1 8:4b4d58bd631c 197 this->deviceEUI->push_back(LORA_DEVICE_EUI_MSB[i]);
mitea1 1:fe242f3e341b 198 }
mitea1 1:fe242f3e341b 199 }
mitea1 1:fe242f3e341b 200
mitea1 0:f2815503561f 201 void LoRaConfig::setFrequencySubBand(uint8_t frequencySubBand){
mitea1 0:f2815503561f 202 this->frequencySubBand = frequencySubBand;
mitea1 0:f2815503561f 203 }
mitea1 0:f2815503561f 204
mitea1 0:f2815503561f 205 void LoRaConfig::setSpreadingFactor(uint8_t spreadingFactor){
mitea1 0:f2815503561f 206 this->spreadingFactor = spreadingFactor;
mitea1 0:f2815503561f 207 }
mitea1 0:f2815503561f 208
mitea1 0:f2815503561f 209 void LoRaConfig::setTxPowerdBm(uint8_t txPowerdBm){
mitea1 0:f2815503561f 210 this->txPowerdBm = txPowerdBm;
mitea1 0:f2815503561f 211 }
mitea1 0:f2815503561f 212
mitea1 0:f2815503561f 213 void LoRaConfig::setAcknowledgeRetries(uint8_t acknowledgeRetries){
mitea1 0:f2815503561f 214 this->acknowledgeRetries = acknowledgeRetries;
mitea1 0:f2815503561f 215 }
mitea1 0:f2815503561f 216
mitea1 0:f2815503561f 217 void LoRaConfig::setLORA_MODE(LORA_MODE loraMode){
mitea1 0:f2815503561f 218 this->loraMode = loraMode;
mitea1 0:f2815503561f 219 }
mitea1 0:f2815503561f 220
mitea1 1:fe242f3e341b 221 void LoRaConfig::setJOIN_MODE(JOIN_MODE joinMode){
mitea1 1:fe242f3e341b 222 this->joinMode = joinMode;
mitea1 1:fe242f3e341b 223 }
mitea1 0:f2815503561f 224
mitea1 1:fe242f3e341b 225