Je travaille depuis quelques jours sur l’implémentation d’une i-Gate et un tracker APRS sur le protocole LoRa. (Merci à F4EED et F4ASS d’en avoir parlé ;), et merci à F4EWI pour la doc sur PlatformIO)
Le code de base utilisé est celui produit par Peter Buchegger (OE5BPA).
Le matériel utilisé pour ce projet est le suivant :
- Pour l’i-Gate :
- une carte Dollatek Wifi LoRa32 V2.1 433Mhz avec SMA et IP5306 (19,99€ chez Amazon) – Documentation technique
- une antenne Diamond X30n (5.5dBi de gain)
- Pour le tracker :
- une carte DollaTek T-Beam 433MHZ ESP32 WiFi Module Bluetooth sans Fil GPS NEO-6M SMA Lora 18650 Support de Batterie avec SoftRF (33,99€ chez Amazon) – Documentation technique
- une antenne Diamond SRH815 (~3dBi de gain)
NOTE 1 : attention de bien prendre la version 433Mhz! Il existe des versions en 868 Mhz et 915 Mhz
NOTE 2 : attention de bien respecter les règles et d’avoir une licence radio/autorisation d’émettre dans la bandes choisie !
Après avoir reçu le matériel, j’ai compilé le code et uploadé le tout en suivant la documentation de F4EWI à partir des repos ci-dessous :
- Pour l’i-Gate : https://github.com/lora-aprs/LoRa_APRS_iGate
- Pour le tracker : https://github.com/lora-aprs/LoRa_APRS_Tracker
Les premiers tests semblent concluants, cependant selon les endroits ou je me promène, je me retrouve à une couverture de 9Km vers le Nord, et 16,4Km vers l’Ouest.
J’ai donc entrepris de modifier le code de l’iGate pour stocker les messages APRS reçus, le RSSI, et le SNR.
Le but étant de faire une couverture et identifier ce que je pourrais améliorer dans l’installation pour avoir une couverture plus intéressante.
- Voici le repo de l’iGate contenant le code : https://github.com/jdenoy/LoRa_APRS_iGate/
- Le commit spécifique si vous souhaitez juste modifier votre code : https://github.com/jdenoy/LoRa_APRS_iGate/commit/1b04df15928a949daf0f71d49b80ac445143ab53
Il faudra modifier l’URL ou vous envoyez vos trames, car dans le code, ça arrive chez moi 😉
PS : si jamais vous n’avez pas de quoi stocker les données, poussez-moi un message. On verra ensemble pour que vous ayez accès à vos données.
Voici le script qui récupère les données :
<?php
//Si vous n'avez pas de serveur mysql, vous pouvez décommenter les lignes suivantes et commenter le reste. Cela va vous créer un fichier plat avec toutes les données brutes
//$handle = fopen("data.txt", "a+");
//fwrite($handle, gmdate("Ymd H:i:s"). '; ');
//fwrite($handle, rtrim($_POST['msg']).' ; ');
//fwrite($handle, $_POST['rssi'].' ; ');
//fwrite($handle, $_POST['snr'].PHP_EOL);
//fclose($handle);
// Si pas de serveur mysql/mariadb, commentez ou supprimez les lignes ci-dessous
$user = "user";
$pass = "pass";
$db = "database";
$link = new mysqli('localhost', $user, $pass, $db);
if ($link->connect_errno){
printf("Echec de la cnx : %s\n",$link->connect_error);
exit();
}
if (strpos($_POST['msg'],'/')) {
$ast=strpos($_POST['msg'],'/');
}else {
$ast=strpos($_POST['msg'],'\\');
}
$latitude = substr($_POST['msg'],strpos($_POST['msg'],'=')+1,8);
$lat_deg = substr($latitude,0,2);
$lat_min = substr($latitude,2,2);
$lat_dir = substr($latitude,7,1);
$latitude = intval($lat_deg)+(floatval($lat_min)/60);
if ($lat_dir=='S') {
$latitude = $latitude*-1;
}
$longitude = substr($_POST['msg'],$ast+1,9);
$lon_deg=substr($longitude,0,3);
$lon_min=substr($longitude,3,2);
$lon_dir=substr($longitude,8,1);
$longitude = intval($lon_deg)+(floatval($lon_min)/60);
if ($lon_dir=='W') {
$longitude = $longitude *-1;
}
$callsign = substr($_POST['msg'],7,strpos($_POST['msg'],',')-7);
$msg = $_POST['msg'];
$rssi = $_POST['rssi'];
$snr = $_POST['snr'];
$sql = "INSERT INTO `data` (`timestamp`, `callsign`, `msg`,`lat`,`lon`, `rssi`, `snr`) VALUES (current_timestamp(), \"".$callsign."\", \"".$msg."\",".$latitude.",".$longitude.", ".$rssi.", ".$snr."); ";
echo $sql;
if ($link->query($sql) === TRUE) {
echo "Record inserted";
}
// Fermeture de la connexion
mysqli_close($link);
?>
Ici la structure de la base mysql/mariadb :
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
--
-- Structure de la table `data`
--
CREATE TABLE `data` (
`timestamp` timestamp NOT NULL DEFAULT current_timestamp(),
`callsign` char(255) NOT NULL,
`msg` varchar(4096) NOT NULL,
`lat` float NOT NULL,
`lon` float NOT NULL,
`rssi` float NOT NULL,
`snr` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf32;
COMMIT;
Ça vous donnera quelque-chose comme suivant dans la base de donnée :
sorry j’ai oublié le call F4GBF…
Bonjour, merci pour la super doc et les lignes de codes.
L’I-Gate fonctionne en WiFI. Je souhaite ajouter un module de telle manière que l’I-Gate soit branché avec Internet via un câble Ethernet RJ45. Est-ce possible? seriez-vous disposé à m’aider. Je n’ai pas assez de connaissances technique et suis déjà bien avancé en âge…. Si cela fonctionne, je vais installer plusieurs I-Gate afin d’augmenter la couverture. 2 pour commencer. dans le JN37OP et JN16KO VY 73 de Benoît
Bonjour Johan,
J’essaie de maquetter une nouvelle version de notre digi/iGate (avec mon indicatif F4BVC-3 pour l’instant) avec ton code mais j’ai ce message lors de la compilation :
src/LoRa_APRS_iGate.cpp: In function ‘void loop()’:
src/LoRa_APRS_iGate.cpp:231:7: warning: unused variable ‘httpResponseCode’ [-Wunused-variable]
int httpResponseCode = http.POST(httpRequestData);
^
Cependant, tout semble fonctionner…sauf l’envoi vers chez toi.
J’aimerais beaucoup pousser les données sur ton site dans un premier temps. Est-ce toujours possible ?
Merci d’avance.
Amicalement, F4BVC
Bonjour Sébastien,
oui le message d’erreur est un warning, je n’ai pas pris le temps de nettoyer cela, mais aucun soucis sur la remontée d’infos.
Je vois ce qui est remonté et t’envois un mail séparé sur le sujet 🙂
73s
Hello Johan,
Grâce à Sébastien F4GPM, nous expérimentons actuellement au club F8KGK un digi+iGate LoRa en fixe : F8KGK-3.
A cette occasion, nous nous sommes demandés, dans le cas d’une utilisation mobile ou portable d’une plateforme T-beam Lilygo à des fins de Digi+iGate, s’il y aurait possibilité d’inclure dans le code la position live du Digi+iGate ?
En tout cas, merci pour tes essais et tes modifications.
Record d’aujourd’hui avec un T-beam en mobile : F4BVC-8 316 2022-10-02 12:32:05 2022-10-09 18:34:39 JN09HD > JN09NL 49.3 km 227° 2022-10-09 10:04:10
Amicalement, F4BVC