You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.0 KiB
Arduino
150 lines
4.0 KiB
Arduino
7 years ago
|
#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 = "";
|
||
|
|
||
|
}
|
||
|
|