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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.h Source File

main.h

00001 /*
00002  * main.h
00003  *
00004  *  Created on: May 27, 2016
00005  *      Author: Adrian
00006  */
00007 #ifndef MAIN_H_
00008 #define MAIN_H_
00009 
00010 #include <Queue.h>
00011 #include "BME280.h"
00012 #include "BME280TemperatureMessage.h "
00013 #include "BME280PressureMessage.h "
00014 #include "BME280HumidityMessage.h "
00015 #include "MAX44009.h "
00016 #include "MAX44009Message.h "
00017 #include "MPU9250.h "
00018 #include "MPU9250AccelerationMessage.h "
00019 #include "MPU9250GyroscopeMessage.h "
00020 #include "MPU9250TeslaMessage.h "
00021 #include "SI1143ProximityMessage.h "
00022 #include "uBlox.h "
00023 #include "UBloxGPSMessage.h "
00024 #include "LoRaMeasuermentMessage.h "
00025 #include "CommandMessage.h "
00026 #include "FlowMeterMessage.h"
00027 
00028 #define GPS_MESSAGE_LENGTH  36
00029 #define BAUD_UART   9600
00030 #define BAUD_USB    9600
00031 
00032 /**
00033  * @defgroup Queue Lenghts
00034  * @{
00035  */
00036 
00037 #define LIGHT_QUEUE_LENGHT                  1
00038 #define ACCELERATION_QUEUE_LENGHT           1
00039 #define GYROSCOPE_QUEUE_LENGHT              1
00040 #define TESLA_QUEUE_LENGHT                  1
00041 #define TEMPERATURE_QUEUE_LENGHT            1
00042 #define PRESSURE_QUEUE_LENGHT               1
00043 #define HUMIDITY_QUEUE_LENGHT               1
00044 #define PROXIMITY_QUEUE_LENGHT              1
00045 #define GPS_QUEUE_LENGHT                    1
00046 #define FLOWMETER_QUEUE_LENGTH              1
00047 #define LORA_MEASUREMENT_QUEUE_LENGHT       1
00048 #define COMMAND_QUEUE_LENGHT                1
00049 
00050 /** @} */
00051 
00052 /**
00053  * @defgroup Task Delays
00054  * @{
00055  */
00056 
00057 #define LIGHT_TASK_DELAY_MS             15000
00058 #define TEMPERATURE_TASK_DELAY_MS       15000
00059 #define HUMIDITY_TASK_DELAY_MS          15000
00060 #define PRESSURE_TASK_DELAY_MS          15000
00061 #define ACCELERATION_TASK_DELAY_MS      15000
00062 #define GYROSCOPE_TASK_DELAY_MS         15000
00063 #define TESLA_TASK_DELAY_MS             15000
00064 #define PROXIMITY_TASK_DELAY_MS         15000
00065 #define GPS_TASK_DELAY_MS               15000
00066 #define FLOWMETER__TASK_DELAY_MS        15000
00067 #define LORA_MEASUREMENT_TASK_DELAY_MS  15000
00068 #define DATAHANLDER_TASK_DELAY_MS       15000
00069 #define COMMANDHANLDER_TASK_DELAY_MS    15000
00070 
00071 /** @} */
00072 
00073 /**
00074  * @defgroup LoRa Message IDs
00075  * @{
00076  */
00077 
00078 #define MAX44009_MESSAGE_ID                             "L"
00079 #define UBLOX_GPS_MESSAGE_ITOW_ID                       "G1"
00080 #define UBLOX_GPS_MESSAGE_LONGITUDE_ID                  "G2"
00081 #define UBLOX_GPS_MESSAGE_LATITUDE_ID                   "G3"
00082 #define UBLOX_GPS_MESSAGE_HEIGHT_ID                     "G4"
00083 #define UBLOX_GPS_MESSAGE_HMSL_ID                       "G5"
00084 #define UBLOX_GPS_MESSAGE_HACC_ID                       "G6"
00085 #define UBLOX_GPS_MESSAGE_VACC_ID                       "G7"
00086 #define BME280_TEMPERATURE_MESSAGE_ID                   "B1"
00087 #define BME280_PRESSURE_MESSAGE_ID                      "B2"
00088 #define BME280_HUMIDITY_MESSAGE_ID                      "B3"
00089 #define MPU9250_X_ACCELERATION_MESSAGE_ID               "M1"
00090 #define MPU9250_Y_ACCELERATION_MESSAGE_ID               "M2"
00091 #define MPU9250_Z_ACCELERATION_MESSAGE_ID               "M3"
00092 #define MPU9250_X_GYROSCOPE_MESSAGE_ID                  "M4"
00093 #define MPU9250_Y_GYROSCOPE_MESSAGE_ID                  "M5"
00094 #define MPU9250_Z_GYROSCOPE_MESSAGE_ID                  "M6"
00095 #define MPU9250_X_TESLA_MESSAGE_ID                      "M7"
00096 #define MPU9250_Y_TESLA_MESSAGE_ID                      "M8"
00097 #define MPU9250_Z_TESLA_MESSAGE_ID                      "M9"
00098 #define FLOWMETER_CURRENT_FLOW_MESSAGE_ID               "F1"
00099 #define FLOWMETER_CURRENT_VOLUME_MESSAGE_ID             "F2"
00100 #define FLOWMETER_TOTAL_FLOW_MESSAGE_ID                 "F3"
00101 #define FLOWMETER_TOTAL_VOLUME_MESSAGE_ID               "F4"
00102 #define SI1143_PROXIMITY_MESSAGE_ID                     "P1"
00103 
00104 #define LORA_MEASURMENT_RSSI_MESSAGE_ID                 "Z1"
00105 #define LORA_MEASURMENT_SNR_MESSAGE_ID                  "Z2"
00106 #define LORA_MEASURMENT_SPREADING_FACTOR_MESSAGE_ID     "Z3"
00107 #define LORA_MEASURMENT_TX_POWER_MESSAGE_ID             "Z4"
00108 
00109 /** @} */
00110 
00111 
00112 
00113 #define LORA_COMMAND_APPLICATION_MODE_1     "AM1"
00114 #define LORA_COMMAND_APPLICATION_MODE_2     "AM2"
00115 #define LORA_COMMAND_APPLICATION_MODE_3     "AM3"
00116 #define LORA_COMMAND_APPLICATION_MODE_4     "AM4"
00117 
00118 /**
00119  * @brief Special Bundle that can hold references to all queues. Used especially by the TaskDatahandler
00120  */
00121 typedef struct QueueBundle{
00122     Queue<MAX44009Message,LIGHT_QUEUE_LENGHT>* queueLight;
00123     Queue<BME280TemperatureMessage,TEMPERATURE_QUEUE_LENGHT>* queueTemperature;
00124     Queue<BME280PressureMessage,PRESSURE_QUEUE_LENGHT>* queuePressure;
00125     Queue<BME280HumidityMessage,HUMIDITY_QUEUE_LENGHT>* queueHumidity;
00126     Queue<MPU9250AccelerationMessage,ACCELERATION_QUEUE_LENGHT>* queueAcceleration;
00127     Queue<MPU9250GyroscopeMessage,GYROSCOPE_QUEUE_LENGHT>* queueGyro;
00128     Queue<MPU9250TeslaMessage,TESLA_QUEUE_LENGHT>* queueTesla;
00129     Queue<SI1143ProximityMessage,PROXIMITY_QUEUE_LENGHT>* queueProximity;
00130     Queue<UBloxGPSMessage,GPS_QUEUE_LENGHT>* queueGps;
00131     Queue<FlowMeterMessage,FLOWMETER_QUEUE_LENGTH>* queueFlowMeter;
00132     Queue<LoRaMeasurementMessage,LORA_MEASUREMENT_QUEUE_LENGHT>* queueLoRaMeasurments;
00133     Queue<CommandMessage,COMMAND_QUEUE_LENGHT>* queueCommands;
00134 };
00135 
00136 /**
00137  * Task States. Define different States in which a task can be on the ApplicationConfig Level
00138  * Each task is either RUNNING or SLEEPING
00139  */
00140 enum TASK_STATE {
00141     RUNNING = 1,//!< RUNNING
00142     SLEEPING = 0//!< SLEEPING
00143 };
00144 
00145 /**
00146  * LoRa States. Define different States in wich the LoRa Modul can be on the ApplicationConfig Level
00147  * It's either ON or OFF
00148  */
00149 enum LORA_STATE {
00150     ON = 1,//!< ON
00151     OFF = 0//!< OFF
00152 };
00153 
00154 
00155 #endif /* MAIN_H_ */