Blame view

emetteur/emetteur.cpp 6.74 KB
a12ed64b   rcavalie   recepteur ok
1
  ////////////////////////////////////////////////////////////////////////////////

8c2393cd   rcavalie   travail reception...
2
3
4
5
6
  /*EMETTEUR LoRa

  par : Robin Cavalieri

        IMA5SC

  PFE 2018 */

  ////////////////////////////////////////////////////////////////////////////////

a12ed64b   rcavalie   recepteur ok
7
8
  //Headers

  #include "mbed.h"

7e1ad503   rcavalie   fichiers départ +...
9
10
11
  #include "main.h"

  #include "sx1276-hal.h"

  #include "debug.h"

a12ed64b   rcavalie   recepteur ok
12
  ////////////////////////////////////////////////////////////////////////////////

f766505c   rcavalie   création d'une tr...
13
  #define DEBUG_MESSAGE   0

a12ed64b   rcavalie   recepteur ok
14
15
  ////////////////////////////////////////////////////////////////////////////////

  //Modulation LoRa active

7e1ad503   rcavalie   fichiers départ +...
16
17
  #define USE_MODEM_LORA  1

  #define USE_MODEM_FSK   !USE_MODEM_LORA

a12ed64b   rcavalie   recepteur ok
18
19
20
21
22
23
24
25
26
  //Paramètres

  #define RF_FREQUENCY 868000000 //Hz : Fréquence de travail pour UE

  #define TX_OUTPUT_POWER 14     //dBm : puissance de sortie du signal

  #define LORA_BANDWIDTH 1         // 0:125 kHz de BP

  #define LORA_SPREADING_FACTOR 10 // [SF7..SF12] Portée du débit. grande portée inutile

  #define LORA_CODINGRATE 1

  #define LORA_PREAMBLE_LENGTH 8   // Same for Tx and Rx

  #define LORA_SYMBOL_TIMEOUT 5    // Symbols

  #define LORA_FIX_LENGTH_PAYLOAD_ON false

78cb1342   rcavalie   transmission rece...
27
  #define LORA_FHSS_ENABLED false //true initial

a12ed64b   rcavalie   recepteur ok
28
29
30
31
32
  #define LORA_NB_SYMB_HOP 4

  #define LORA_IQ_INVERSION_ON false

  #define LORA_CRC_ENABLED true

  #define RX_TIMEOUT_VALUE 3500      // in ms

  #define BUFFER_SIZE 32        // Define the payload size here

0ae07db2   rcavalie   emetteur ok
33
  #define TRAME_SIZE 13

a12ed64b   rcavalie   recepteur ok
34
35
36
37
  ////////////////////////////////////////////////////////////////////////////////

  

  ////////////////////////////////////////////////////////////////////////////////

  //Variables globales

7e1ad503   rcavalie   fichiers départ +...
38
39
40
41
  typedef enum

  {

      LOWPOWER = 0,

      IDLE,

7e1ad503   rcavalie   fichiers départ +...
42
43
      TX,

      TX_TIMEOUT,

7e1ad503   rcavalie   fichiers départ +...
44
45
46
47
48
      CAD,

      CAD_DONE

  }AppStates_t;

  

  volatile AppStates_t State = LOWPOWER;

7e1ad503   rcavalie   fichiers départ +...
49
  static RadioEvents_t RadioEvents;

7e1ad503   rcavalie   fichiers départ +...
50
  SX1276MB1xAS Radio( NULL );

7e1ad503   rcavalie   fichiers départ +...
51
52
  uint16_t BufferSize = BUFFER_SIZE;

  uint8_t Buffer[BUFFER_SIZE];

7e1ad503   rcavalie   fichiers départ +...
53
54
  int16_t RssiValue = 0.0;

  int8_t SnrValue = 0.0;

0ae07db2   rcavalie   emetteur ok
55
  uint8_t testMsg[TRAME_SIZE];

f766505c   rcavalie   création d'une tr...
56
57
58
  ////////////////////////////////////////////////////////////////////////////////

  

  ////////////////////////////////////////////////////////////////////////////////

b0846b68   rcavalie   communication en ...
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
  //Fonctions utiles

  

  //Debug pour savoir si le message a été transmis

  void OnTxDone( void )

  {

      Radio.SetChannel( HoppingFrequencies[0] );

      Radio.Sleep( );

      State = TX;

      debug_if( DEBUG_MESSAGE, "\nEnvoye \n\r" );

  }

  

  //Time out de transmission. Échec de l'envoi

  void OnTxTimeout( void )

  {

      Radio.SetChannel(HoppingFrequencies[0]);

      Radio.Sleep( );

      State = TX_TIMEOUT;

      debug_if( DEBUG_MESSAGE, "Echec de l'envoi \n\r");

  }

  

  //Modification du canal d'emission

  void OnFhssChangeChannel( uint8_t channelIndex )

  {

      Radio.SetChannel(HoppingFrequencies[channelIndex]);

      debug_if(DEBUG_MESSAGE, "F%d-", channelIndex);

  }

  

  //fonction permettant de convertir int en uint8_t (ASCII)

  uint8_t RandAscii(int nb)

  {

    int return_var;

  

    if (nb == 0) {

      return_var = 0x30;

    }

    else if (nb == 1) {

      return_var = 0x31;

    }

    else if (nb == 2) {

      return_var = 0x32;

    }

    else if (nb == 3) {

      return_var = 0x33;

    }

    else if (nb == 4) {

      return_var = 0x34;

    }

    else if (nb == 5) {

      return_var = 0x35;

    }

    else if (nb == 6) {

      return_var = 0x36;

    }

    else if (nb == 7) {

      return_var = 0x37;

    }

    else if (nb == 8) {

      return_var = 0x38;

    }

    else if (nb == 9) {

      return_var = 0x39;

    }

    return return_var;

  }

  ////////////////////////////////////////////////////////////////////////////////

  

  ////////////////////////////////////////////////////////////////////////////////

0ae07db2   rcavalie   emetteur ok
126
127
128
129
  void TrameCreation()

  {

      //Création d'une trame

      /*

b0846b68   rcavalie   communication en ...
130
131
132
      [1...6] : ID de l'emetteur

      [7...11] : ID du recepteur cible

      [12...13] : Température communiquée ici 20 pour l'exemple

0ae07db2   rcavalie   emetteur ok
133
      */

b0846b68   rcavalie   communication en ...
134
135
136
137
138
139
      //Génération aléatoire des températures

      int dizaines_i = rand()%10;

      int unites_i = rand()%10;

      uint8_t dizaines_c = RandAscii(dizaines_i);

      uint8_t unites_c = RandAscii(unites_i);

  

0ae07db2   rcavalie   emetteur ok
140
141
142
143
144
145
146
147
148
149
150
151
152
153
      //Converti en ASCII

      testMsg[0] =  0x46; //emetteur F

      testMsg[1] =  0x33; //emetteur 3

      testMsg[2] =  0x30; //emetteur 0

      testMsg[3] =  0x33; //emetteur 3

      testMsg[4] =  0x52; //emetteur R

      testMsg[5] =  0x45; //emetteur E

      //

      testMsg[6] =  0x46; //recepteur F

      testMsg[7] =  0x30; //recepteur 0

      testMsg[8] =  0x39; //recepteur 9

      testMsg[9] =  0x31; //recepteur 1

      testMsg[10] = 0x43; //recepteur C

      //

b0846b68   rcavalie   communication en ...
154
155
      testMsg[11] = dizaines_c; //temperature 2 dizaines

      testMsg[12] = unites_c; //temperature 0 unités

a12ed64b   rcavalie   recepteur ok
156
157
158
159
160
161
162
163
  }

  ////////////////////////////////////////////////////////////////////////////////

  

  ////////////////////////////////////////////////////////////////////////////////

  //Main emission

  int main( void )

  {

      uint8_t i;

f766505c   rcavalie   création d'une tr...
164
      debug("\nEmetteur SX1276 \n\n\r");

7e1ad503   rcavalie   fichiers départ +...
165
166
167
  

      // Initialize Radio driver

      RadioEvents.TxDone = OnTxDone;

7e1ad503   rcavalie   fichiers départ +...
168
      RadioEvents.TxTimeout = OnTxTimeout;

a12ed64b   rcavalie   recepteur ok
169
170
      RadioEvents.FhssChangeChannel = OnFhssChangeChannel;

      Radio.Init(&RadioEvents);

7e1ad503   rcavalie   fichiers départ +...
171
  

a12ed64b   rcavalie   recepteur ok
172
173
      //Véification de la connexion avec la carte

      while(Radio.Read(REG_VERSION) == 0x00)

7e1ad503   rcavalie   fichiers départ +...
174
      {

a12ed64b   rcavalie   recepteur ok
175
176
          debug("Aucune radio detectee\n\r", NULL);

          wait(1);

7e1ad503   rcavalie   fichiers départ +...
177
178
      }

  

a12ed64b   rcavalie   recepteur ok
179
      //Checking du matériel connecté

f766505c   rcavalie   création d'une tr...
180
181
      debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1LAS ) ), "\n\r Materiel detecte : SX1276MB1LAS \n\r" );

      debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1MAS ) ), "\n\r Materiel detecte : SX1276MB1MAS \n\r" );

7e1ad503   rcavalie   fichiers départ +...
182
  

a12ed64b   rcavalie   recepteur ok
183
184
      //Paramétrage du canal

      Radio.SetChannel( HoppingFrequencies[0] );

7e1ad503   rcavalie   fichiers départ +...
185
  

a12ed64b   rcavalie   recepteur ok
186
      #if USE_MODEM_LORA == 1

7e1ad503   rcavalie   fichiers départ +...
187
  

f766505c   rcavalie   création d'une tr...
188
189
          debug_if( LORA_FHSS_ENABLED, "\n\n\r LORA FHSS Mode \n\n\r" );

          debug_if( !LORA_FHSS_ENABLED, "\n\n\r LORA Mode \n\n\r" );

7e1ad503   rcavalie   fichiers départ +...
190
  

a12ed64b   rcavalie   recepteur ok
191
192
193
194
195
196
197
198
199
          //Configuration du modem transmission

          Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,

                               LORA_SPREADING_FACTOR, LORA_CODINGRATE,

                               LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,

                               LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,

                               LORA_IQ_INVERSION_ON, 4000 );

      #else

          #error "Aucun modem defini"

      #endif

7e1ad503   rcavalie   fichiers départ +...
200
  

a12ed64b   rcavalie   recepteur ok
201
      debug_if( DEBUG_MESSAGE, "Procedure d'emission lancee\r\n" );

a12ed64b   rcavalie   recepteur ok
202
203
      //Boucle dmission infinie

      while(1)

7e1ad503   rcavalie   fichiers départ +...
204
      {

0ae07db2   rcavalie   emetteur ok
205
206
207
208
209
         //On génère la trame

         TrameCreation();

         debug("\nTentative d'envoi... \r\n");

         strcpy((char*)Buffer, (char*)testMsg);

         for(i=TRAME_SIZE; i<BufferSize; i++)

a12ed64b   rcavalie   recepteur ok
210
         {

0ae07db2   rcavalie   emetteur ok
211
              Buffer[i] = i - TRAME_SIZE;

a12ed64b   rcavalie   recepteur ok
212
         }

0ae07db2   rcavalie   emetteur ok
213
         debug("Trame : %s\r\n",(char*)Buffer);

a12ed64b   rcavalie   recepteur ok
214
         Radio.Send(Buffer, BufferSize);

0ae07db2   rcavalie   emetteur ok
215
         debug("Message envoye \r\n");

4d6b688b   rcavalie   Réseau de neurone...
216
217
218
219
         //Attaque de ping

         wait_ms(50);

         //Trafic normal

         //wait(1000);

7e1ad503   rcavalie   fichiers départ +...
220
221
      }

  }

f766505c   rcavalie   création d'une tr...
222
  ////////////////////////////////////////////////////////////////////////////////