worklastyear
parent
13f86b8e20
commit
954047a958
@ -0,0 +1,149 @@
|
||||
#include <SPI.h>
|
||||
#include <LoRa.h>
|
||||
#include <String.h>
|
||||
|
||||
//correspond au modele de la trame
|
||||
//la station est définie sur 1 octet (poid faible)
|
||||
#define MAX_STATION 0x03
|
||||
uint16_t temp_IS=0;
|
||||
uint16_t temp_H=0;
|
||||
bool res;
|
||||
|
||||
//structure de la trame (établie en fonction de notre protocole)
|
||||
typedef struct
|
||||
{
|
||||
uint16_t IS;
|
||||
uint16_t TS;
|
||||
uint16_t TD;
|
||||
uint16_t D1;
|
||||
uint16_t D2;
|
||||
uint16_t D3;
|
||||
}trame;
|
||||
|
||||
trame tab_trames[MAX_STATION]; //tableau des trames par micro-statiton
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(9600);
|
||||
Serial1.begin(9600);
|
||||
Serial.println("Passerelle LoRa :");
|
||||
|
||||
//on démarre une instance de LoRa avec en parametre une fréquence et on bloque si on ne peux pas se connecter
|
||||
do
|
||||
{
|
||||
res = LoRa.begin(868E6);
|
||||
if(res == false)
|
||||
{
|
||||
Serial.println("Le LoRa ne peux pas établir de connexion!");
|
||||
}
|
||||
}
|
||||
while(res == false);
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
trame traitement_trame;
|
||||
int packetSize = LoRa.parsePacket(); //On range dans cette variable la taille du packet
|
||||
uint16_t trame_recu[6];
|
||||
int id;
|
||||
int i=0;
|
||||
if (packetSize > 0)
|
||||
{
|
||||
Serial.println("Réception des trames :");
|
||||
while (LoRa.available()) //on se met sur écoute et on lit le paquet qu'on cast en char
|
||||
{
|
||||
trame_recu[i]=LoRa.read() << 8;
|
||||
trame_recu[i] |= LoRa.read();
|
||||
Serial.print(trame_recu[i]);// read sert a lire les données du registre du LoRa
|
||||
Serial.print(".");
|
||||
i++;
|
||||
}
|
||||
|
||||
Serial.println(" ");
|
||||
|
||||
/*cas acceptés:
|
||||
* temp_IS != traitement_trame.IS && temp_H != traitement_trame.H
|
||||
* temp_IS != traitement_trame.IS && temp.H == traitement_trame.H
|
||||
* temp_IS == traitement_trame.IS && temp.h != traitement_trame.H
|
||||
* cas reffusé :
|
||||
* temp_IS == traitement_trame.IS && temp.h == traitement_trame.H
|
||||
*/
|
||||
if(tab_trames[trame_recu[0]-1].IS == trame_recu[0] && tab_trames[trame_recu[0]-1].TS == trame_recu[1])
|
||||
{
|
||||
Serial.println("trame déja recu");
|
||||
}
|
||||
else
|
||||
{
|
||||
//on stocke les valeurs reçue de la trame dans la structure
|
||||
traitement_trame.IS=trame_recu[0];
|
||||
traitement_trame.TS=trame_recu[1];
|
||||
traitement_trame.TD=trame_recu[2];
|
||||
traitement_trame.D1=trame_recu[3];
|
||||
traitement_trame.D2=trame_recu[4];
|
||||
traitement_trame.D3=trame_recu[5];
|
||||
|
||||
//On remplace les valeurs temp pour pouvoir les comparer avec les futures trames
|
||||
temp_H = traitement_trame.TS;
|
||||
temp_IS = traitement_trame.IS;
|
||||
tab_trames[temp_IS-1]=traitement_trame;
|
||||
|
||||
envoyer_trame(temp_IS-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* fonction envoyer par TX/RX les trames recues precedemment
|
||||
* On convertit en string le tableau de trame puis on le concatene
|
||||
* avec les en-tetes basique du protocole HTTP
|
||||
*
|
||||
* CODE :
|
||||
*
|
||||
* Variables :
|
||||
* création d'une en_tete String
|
||||
* incréments
|
||||
* tab_trames
|
||||
* tableau de caractères
|
||||
* IMPOSSIBILITE : print ou write peux afficher les strings,
|
||||
* cependant on utilisera un char pour la surdéfinition de print
|
||||
*
|
||||
* Instructions :
|
||||
* for(i=0;i<maxstation;i++) Parcourir les en_tete du tableau
|
||||
* {
|
||||
* pour chaque en_tete, concatener les uint en string
|
||||
* convertirle string final (1 micro-station) en char
|
||||
* afficher le char
|
||||
* reset du string pour pas concatener tout les caractères
|
||||
* }
|
||||
*/
|
||||
void envoyer_trame(uint8_t IS)
|
||||
{
|
||||
String en_tete;
|
||||
char afficher_en_tete[200];
|
||||
en_tete.concat("GET /formulaireCollecteLORA.php?ID=");
|
||||
en_tete.concat(tab_trames[IS].IS);
|
||||
en_tete.concat("&IDp=");
|
||||
en_tete.concat("1");
|
||||
en_tete.concat("&TS=");
|
||||
en_tete.concat(tab_trames[IS].TS);
|
||||
en_tete.concat("&DT=");
|
||||
en_tete.concat(tab_trames[IS].TD);
|
||||
en_tete.concat("&D1=");
|
||||
en_tete.concat(tab_trames[IS].D1);
|
||||
en_tete.concat("&D2=");
|
||||
en_tete.concat(tab_trames[IS].D2);
|
||||
en_tete.concat("&D3=");
|
||||
en_tete.concat(tab_trames[IS].D3);
|
||||
en_tete.concat(" HTTP/1.0\r\nHost: btslimayrac.ovh\r\nConnection: close\r\n\f");
|
||||
|
||||
Serial.println("On envoie une en-tete :");
|
||||
Serial1.println(en_tete);
|
||||
Serial.println(en_tete);
|
||||
//en_tete.toCharArray(afficher_en_tete,200);
|
||||
//Serial.write(afficher_en_tete, 200);
|
||||
Serial.println(" ");
|
||||
en_tete = "";
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue