Send DHT11 & SHT10 sensors data through LoRa SX1272 board.

Dependencies:   DHT11 SHTx SX1272Lib mbed

Fork of SX1272-Transmitter by Antoine Boisadam

Committer:
Antoine38
Date:
Tue Mar 28 14:04:29 2017 +0000
Revision:
20:c4f5299fa99d
Parent:
19:e50e4a513de1
Child:
21:3ea7ab726dd4
TX TIMEOUT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GregCr 0:1ed39951ab7b 1 #include "mbed.h"
GregCr 4:5ece30264cd9 2 #include "main.h"
Antoine38 18:1ee53f77b90d 3 // SX1272 Lib
GregCr 13:edb9b443c1dd 4 #include "sx1272-hal.h"
GregCr 8:f956dee63a56 5 #include "debug.h"
Antoine38 18:1ee53f77b90d 6 // DHT11 Lib (air temperature and humidity)
Antoine38 18:1ee53f77b90d 7 #include "DHT11.h"
Antoine38 19:e50e4a513de1 8 // SHT10 (soil temperature and humidity)
Antoine38 19:e50e4a513de1 9 #include "SHTx/sht15.hpp"
GregCr 0:1ed39951ab7b 10
GregCr 0:1ed39951ab7b 11 /* Set this flag to '1' to display debug messages on the console */
GregCr 13:edb9b443c1dd 12 #define DEBUG_MESSAGE 1
GregCr 0:1ed39951ab7b 13
Antoine38 19:e50e4a513de1 14 /* DELAY between two transmission (in seconds) */
Antoine38 19:e50e4a513de1 15 #define DELAY 1800
GregCr 0:1ed39951ab7b 16
Antoine38 14:62c3fd006150 17 #define RF_FREQUENCY 868000000 // Hz
Antoine38 14:62c3fd006150 18 #define TX_OUTPUT_POWER 14 // 14 dBm
Antoine38 20:c4f5299fa99d 19 #define TX_TIMEOUT 5000000 // in us
GregCr 0:1ed39951ab7b 20
Antoine38 14:62c3fd006150 21 #define LORA_BANDWIDTH 2 // [0: 125 kHz,
Antoine38 15:24dc42e5d7bf 22 // 1: 250 kHz,
Antoine38 15:24dc42e5d7bf 23 // 2: 500 kHz,
Antoine38 15:24dc42e5d7bf 24 // 3: Reserved]
Antoine38 15:24dc42e5d7bf 25
Antoine38 14:62c3fd006150 26 #define LORA_SPREADING_FACTOR 7 // [SF7..SF12]
Antoine38 14:62c3fd006150 27 #define LORA_CODINGRATE 1 // [1: 4/5,
Antoine38 15:24dc42e5d7bf 28 // 2: 4/6,
Antoine38 15:24dc42e5d7bf 29 // 3: 4/7,
Antoine38 15:24dc42e5d7bf 30 // 4: 4/8]
Antoine38 15:24dc42e5d7bf 31
Antoine38 14:62c3fd006150 32 #define LORA_PREAMBLE_LENGTH 8
Antoine38 14:62c3fd006150 33 #define LORA_SYMBOL_TIMEOUT 5 // Symbols
Antoine38 14:62c3fd006150 34 #define LORA_FIX_LENGTH_PAYLOAD_ON false
Antoine38 14:62c3fd006150 35 #define LORA_FHSS_ENABLED false
Antoine38 14:62c3fd006150 36 #define LORA_NB_SYMB_HOP 4
Antoine38 14:62c3fd006150 37 #define LORA_IQ_INVERSION_ON false
Antoine38 14:62c3fd006150 38 #define LORA_CRC_ENABLED true
GregCr 0:1ed39951ab7b 39
Antoine38 17:cd37e3e63cec 40 #define BUFFER_SIZE 1024 // Define the payload size here
GregCr 0:1ed39951ab7b 41
GregCr 3:8b9e2a4df4b5 42 DigitalOut led(LED1);
GregCr 3:8b9e2a4df4b5 43
mluis 10:7af820d1e1df 44 /*!
mluis 10:7af820d1e1df 45 * Radio events function pointer
mluis 10:7af820d1e1df 46 */
mluis 10:7af820d1e1df 47 static RadioEvents_t RadioEvents;
mluis 10:7af820d1e1df 48
mluis 10:7af820d1e1df 49 /*
mluis 10:7af820d1e1df 50 * Global variables declarations
mluis 10:7af820d1e1df 51 */
GregCr 13:edb9b443c1dd 52 SX1272MB2xAS Radio( NULL );
GregCr 0:1ed39951ab7b 53
Antoine38 18:1ee53f77b90d 54 uint8_t msg[BUFFER_SIZE];
GregCr 0:1ed39951ab7b 55
GregCr 0:1ed39951ab7b 56 uint16_t BufferSize = BUFFER_SIZE;
GregCr 0:1ed39951ab7b 57 uint8_t Buffer[BUFFER_SIZE];
GregCr 0:1ed39951ab7b 58
GregCr 5:f2431c4fe3bb 59 int16_t RssiValue = 0.0;
GregCr 5:f2431c4fe3bb 60 int8_t SnrValue = 0.0;
GregCr 0:1ed39951ab7b 61
Antoine38 17:cd37e3e63cec 62 int msglen = 0;
Antoine38 17:cd37e3e63cec 63
Antoine38 18:1ee53f77b90d 64 // Air temperature and humidity sensor
Antoine38 19:e50e4a513de1 65 DHT11 airSensor(D6);
Antoine38 18:1ee53f77b90d 66 int DHT11_state;
Antoine38 18:1ee53f77b90d 67
Antoine38 19:e50e4a513de1 68 // Soil temperature and humidity sensor
Antoine38 19:e50e4a513de1 69 SHTx::SHT15 soilSensor(D9, D8);
Antoine38 19:e50e4a513de1 70
Antoine38 14:62c3fd006150 71 int main()
GregCr 0:1ed39951ab7b 72 {
GregCr 0:1ed39951ab7b 73 uint8_t i;
Antoine38 14:62c3fd006150 74
Antoine38 14:62c3fd006150 75 debug( "\n\n\r iGreenhouse Application - Transmitter \n\n\r" );
mluis 10:7af820d1e1df 76
mluis 10:7af820d1e1df 77 // Initialize Radio driver
mluis 10:7af820d1e1df 78 RadioEvents.TxDone = OnTxDone;
mluis 10:7af820d1e1df 79 RadioEvents.TxTimeout = OnTxTimeout;
mluis 10:7af820d1e1df 80 Radio.Init( &RadioEvents );
Antoine38 14:62c3fd006150 81
GregCr 7:c1bbd6c56979 82 // verify the connection with the board
Antoine38 14:62c3fd006150 83 while( Radio.Read( REG_VERSION ) == 0x00 ) {
GregCr 7:c1bbd6c56979 84 debug( "Radio could not be detected!\n\r", NULL );
GregCr 7:c1bbd6c56979 85 wait( 1 );
GregCr 2:59e108728d71 86 }
Antoine38 14:62c3fd006150 87
GregCr 13:edb9b443c1dd 88 debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1272MB2XAS ) ) , "\n\r > Board Type: SX1272MB2xAS < \n\r" );
GregCr 0:1ed39951ab7b 89
Antoine38 14:62c3fd006150 90 Radio.SetChannel( RF_FREQUENCY );
Antoine38 14:62c3fd006150 91
Antoine38 14:62c3fd006150 92
GregCr 7:c1bbd6c56979 93 debug_if( LORA_FHSS_ENABLED, "\n\n\r > LORA FHSS Mode < \n\n\r");
GregCr 7:c1bbd6c56979 94 debug_if( !LORA_FHSS_ENABLED, "\n\n\r > LORA Mode < \n\n\r");
GregCr 7:c1bbd6c56979 95
GregCr 0:1ed39951ab7b 96 Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
Antoine38 14:62c3fd006150 97 LORA_SPREADING_FACTOR, LORA_CODINGRATE,
Antoine38 14:62c3fd006150 98 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
Antoine38 14:62c3fd006150 99 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
Antoine38 20:c4f5299fa99d 100 LORA_IQ_INVERSION_ON, TX_TIMEOUT );
Antoine38 19:e50e4a513de1 101
Antoine38 19:e50e4a513de1 102 // Soil sensor configuration
Antoine38 19:e50e4a513de1 103 soilSensor.setOTPReload(false);
Antoine38 19:e50e4a513de1 104 soilSensor.setResolution(true);
Antoine38 19:e50e4a513de1 105 soilSensor.setScale(false);
GregCr 0:1ed39951ab7b 106
Antoine38 14:62c3fd006150 107 debug_if( DEBUG_MESSAGE, "Starting sending loop\r\n" );
GregCr 0:1ed39951ab7b 108
GregCr 3:8b9e2a4df4b5 109 led = 0;
Antoine38 14:62c3fd006150 110
Antoine38 18:1ee53f77b90d 111 while(1) {
Antoine38 18:1ee53f77b90d 112 // Retrieving sensors data
Antoine38 19:e50e4a513de1 113 DHT11_state = airSensor.readData();
Antoine38 18:1ee53f77b90d 114 if (DHT11_state == DHT11::OK) {
Antoine38 19:e50e4a513de1 115 sprintf((char*) msg, "TempA=%d \r\nHumiA=%d \r\nTempS=%3.2f \r\nHumiS=%3.2f \r\n", airSensor.readTemperature(), airSensor.readHumidity(), soilSensor.getTemperature(), soilSensor.getHumidity());
Antoine38 19:e50e4a513de1 116 } else {
Antoine38 19:e50e4a513de1 117 sprintf((char*) msg, "TempS=%3.2f \r\nHumiS=%3.2f \r\n", soilSensor.getTemperature(), soilSensor.getHumidity());
Antoine38 18:1ee53f77b90d 118 }
Antoine38 18:1ee53f77b90d 119
Antoine38 18:1ee53f77b90d 120 // Sending a new packet
Antoine38 14:62c3fd006150 121 debug("\r\n========\r\nSending a new Packet\r\n========\r\n");
Antoine38 17:cd37e3e63cec 122 strcpy( ( char* )Buffer, ( char* ) msg );
Antoine38 14:62c3fd006150 123 // We fill the buffer with numbers for the payload
Antoine38 17:cd37e3e63cec 124 msglen = strlen((char *) msg);
Antoine38 17:cd37e3e63cec 125 for( i = msglen; i < BufferSize; i++ ) {
Antoine38 17:cd37e3e63cec 126 Buffer[i] = i - msglen;
Antoine38 14:62c3fd006150 127 }
Antoine38 18:1ee53f77b90d 128 wait_ms(10);
Antoine38 18:1ee53f77b90d 129 Radio.Send(Buffer, BufferSize);
Antoine38 18:1ee53f77b90d 130
Antoine38 18:1ee53f77b90d 131 // Reversing the led state
Antoine38 16:80f027a8b2bc 132 led = 1-led;
Antoine38 18:1ee53f77b90d 133
Antoine38 19:e50e4a513de1 134 // wait DELAY seconds before resend data
Antoine38 19:e50e4a513de1 135 wait(DELAY);
GregCr 0:1ed39951ab7b 136 }
GregCr 0:1ed39951ab7b 137 }
GregCr 0:1ed39951ab7b 138
GregCr 0:1ed39951ab7b 139 void OnTxDone( void )
GregCr 0:1ed39951ab7b 140 {
GregCr 5:f2431c4fe3bb 141 Radio.Sleep( );
GregCr 7:c1bbd6c56979 142 debug_if( DEBUG_MESSAGE, "> OnTxDone\n\r" );
GregCr 0:1ed39951ab7b 143 }
GregCr 0:1ed39951ab7b 144
GregCr 0:1ed39951ab7b 145 void OnTxTimeout( void )
GregCr 0:1ed39951ab7b 146 {
GregCr 0:1ed39951ab7b 147 Radio.Sleep( );
GregCr 7:c1bbd6c56979 148 debug_if( DEBUG_MESSAGE, "> OnTxTimeout\n\r" );
GregCr 0:1ed39951ab7b 149 }
GregCr 0:1ed39951ab7b 150