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.
LoRaGateway_BTS2A/2k17/Arduino_DUE_LoRa/Arduino_DUE_LoRa.ino

157 lines
4.3 KiB
Arduino

7 years ago
#include <SPI.h>
#include <LoRa.h>
#include <String.h>
7 years ago
#include "Ethernet.h"
7 years ago
//correspond au modele de la trame
//la station est définie sur 1 octet (poid faible)
#define MAX_STATION 0x03
7 years ago
#define Serial SerialUSB
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // set the mac address
7 years ago
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);
7 years ago
Ethernet.begin(mac);
7 years ago
Serial.println("Passerelle LoRa :");
7 years ago
Serial.print("server is at "); // display on serial the IP you can find the webpage
Serial.println(Ethernet.localIP());
7 years ago
//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 :");
Serial.println(en_tete);
//en_tete.toCharArray(afficher_en_tete,200);
//Serial.write(afficher_en_tete, 200);
Serial.println(" ");
en_tete = "";
}