Blame view

emetteur/emetteur.cpp 7.28 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
  ////////////////////////////////////////////////////////////////////////////////

1eb4c27f   rcavalie   deuxieme version ...
13
  #define DEBUG_MESSAGE   1

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
  //Paramètres

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

1eb4c27f   rcavalie   deuxieme version ...
20
  #define TX_OUTPUT_POWER 20     //dBm : puissance de sortie du signal

a12ed64b   rcavalie   recepteur ok
21
22
23
24
25
26
  #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

16ccbfc6   rcavalie   modification des ...
33
  #define TRAME_SIZE 18

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;

e898e9ad   rcavalie   envoi nouvelle tr...
55
  uint8_t cpt_trames = 0;

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

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

  

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

b0846b68   rcavalie   communication en ...
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
126
  //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
127
128
129
130
  void TrameCreation()

  {

      //Création d'une trame

      /*

b0846b68   rcavalie   communication en ...
131
132
133
      [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
134
      */

b0846b68   rcavalie   communication en ...
135
136
137
138
139
140
      //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);

  

e898e9ad   rcavalie   envoi nouvelle tr...
141
      if(cpt_trames == 101)

16ccbfc6   rcavalie   modification des ...
142
      {

e898e9ad   rcavalie   envoi nouvelle tr...
143
        cpt_trames = 0;

16ccbfc6   rcavalie   modification des ...
144
145
      }

  

e898e9ad   rcavalie   envoi nouvelle tr...
146
147
148
      cpt_trames = cpt_trames + 1;

  

      debug("compteur trames : %d\n", cpt_trames);

16ccbfc6   rcavalie   modification des ...
149
  

e898e9ad   rcavalie   envoi nouvelle tr...
150
151
152
      uint8_t centaines_cpt = RandAscii((cpt_trames/100) % 10);

      uint8_t dizaines_cpt = RandAscii((cpt_trames/10)  % 10);

      uint8_t unites_cpt = RandAscii(cpt_trames % 10);

16ccbfc6   rcavalie   modification des ...
153
  

0ae07db2   rcavalie   emetteur ok
154
      //Converti en ASCII

16ccbfc6   rcavalie   modification des ...
155
156
157
158
159
160
161
      testMsg[0] =  0x7C; //emetteur |

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

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

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

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

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

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

0ae07db2   rcavalie   emetteur ok
162
      //

16ccbfc6   rcavalie   modification des ...
163
164
165
166
167
      testMsg[7] =  0x46; //recepteur F

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

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

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

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

0ae07db2   rcavalie   emetteur ok
168
      //

16ccbfc6   rcavalie   modification des ...
169
170
171
      testMsg[12] = dizaines_c; //temperature 2 dizaines

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

      testMsg[14] = 0x7C; //emetteur |

e898e9ad   rcavalie   envoi nouvelle tr...
172
173
174
      //

      testMsg[15] = centaines_cpt;

      testMsg[16] = dizaines_cpt;

1eb4c27f   rcavalie   deuxieme version ...
175
      testMsg[17] = unites_cpt;

a12ed64b   rcavalie   recepteur ok
176
177
178
179
180
181
182
183
  }

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

  

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

  //Main emission

  int main( void )

  {

      uint8_t i;

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

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

      // Initialize Radio driver

      RadioEvents.TxDone = OnTxDone;

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

a12ed64b   rcavalie   recepteur ok
189
190
      RadioEvents.FhssChangeChannel = OnFhssChangeChannel;

      Radio.Init(&RadioEvents);

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

a12ed64b   rcavalie   recepteur ok
192
193
      //Véification de la connexion avec la carte

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

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

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

          wait(1);

7e1ad503   rcavalie   fichiers départ +...
197
198
      }

  

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

f766505c   rcavalie   création d'une tr...
200
201
      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 +...
202
  

a12ed64b   rcavalie   recepteur ok
203
204
      //Paramétrage du canal

      Radio.SetChannel( HoppingFrequencies[0] );

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

a12ed64b   rcavalie   recepteur ok
206
      #if USE_MODEM_LORA == 1

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

f766505c   rcavalie   création d'une tr...
208
209
          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 +...
210
  

a12ed64b   rcavalie   recepteur ok
211
212
213
214
215
216
217
218
219
          //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 +...
220
  

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

a12ed64b   rcavalie   recepteur ok
222
223
      //Boucle dmission infinie

      while(1)

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

0ae07db2   rcavalie   emetteur ok
225
226
227
228
229
         //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
230
         {

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

a12ed64b   rcavalie   recepteur ok
232
         }

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

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

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

4d6b688b   rcavalie   Réseau de neurone...
236
         //Trafic normal

1eb4c27f   rcavalie   deuxieme version ...
237
         //wait_ms(5000);

16ccbfc6   rcavalie   modification des ...
238
         //Attaque de ping

1eb4c27f   rcavalie   deuxieme version ...
239
         wait_ms(1000);

7e1ad503   rcavalie   fichiers départ +...
240
241
      }

  }

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