Electronique DIY GPS NME2000 et passerelle Wifi
Salut à tous,
On a refait l'installation électronique complète de notre A31 par du B&G en NMEA2000 du pilote à la tête de mat (a suivre sur notre blog ).
Le budget n'étant pas extensible pour le GPS N2K (+/- 350€) et la passerelles Wifi (+/- 250€), je me suis lancé dans la conception d'un dispositif à base de puce ESP32.
D'après la doc du pilote, il semblerait que le GNSS (GPS) à 10Hz (contrairement aux GPS plus standards à 1hz) soit utilisé dans l'algorithme pour améliorer les performances.
J'ai donc choisi une puce GNSS capable de fournir la position à 25Hz (la Ublox M9N) histoire de prendre un peu d'avance technologique
Le code gère aujourd'hui :
- Le GNSS (GPS) M9N en 25Hz, mais ca devrait aussi fonctionner avec des puces GNSS moins chères telles que la M8N;
- L'injection des données GPS sur le réseau NMEA2000
- La réception des trames NMEA2000, y compris celles de l'AIS et leur routage vers : Le Wifi (UDP et TCP) ou 3 UART (ports série).
Il reste encore un peu de boulot, principalement sur la carte électronique et le boitier, mais c'est fonctionnel.
Pour le moment, il n'y a pas de routage NMEA0183 > N2K, mais ca ne devrait pas être trop compliqué à coder.
J'ai décidé de partager ce projet en Open source, donc si vous voulez donner un coup de main pour la finalisation et/ou les tests...
L'objectif final serait d'avoir un produit fini assez facile à répliquer pour tout le monde et pour un cout global en DIY de moins de 100€.
Bonjour Aurélien,
Chouette projet! Je trouve l'ESP32 très adapté à ce genre de projet comparativement au RPi.
Je suis occupé sur un projet comparable pour envoyé en Wi-FI les infos AIS et GPS d'une VHF vers Navionics.
Si tu mets les schémas en .pdf cela sera plus facile de les commenter.
bàt,
Olivier
Bonsoir Aurélien,
Le NMEA4WIFI est très bien dans le cas d'Olivier pour relier l'AIS et le GPS aux tablettes.
Dans ton cas, je comprends que tu aies besoin du NMEA2000
Je n'ai pas de NMEA2000 sur mon bateau mais j'avais repéré les liens suivants sur d'autres projets NMEA2000 sur ESP32:
open-boat-projects.org[...]-esp32/
github.com[...]CAN-BUS
Bonjour,
Je cherche a effectuer une antenne GPS NMEA 2000 depuis un ESP32.
je n'arrive pas a compiler ton code.
aurais tu un pas à pas ?
Des messages ?
Plus d'info sur les librairies ?Quelle config d ESP ? Quel transceiver ? Quel éditeur ?
Amicalement. FX·le 23 nov. 16:49
hello,
pour la config j'ai :
- un esp32 WROOM 32 dev kit v2
- un module gps GY-GPS6MV2 ( module gps neo 6 )
- un conecteur can bus isolé
- un abaiseur de tensoin 12v -> 3.3 V
j'ai donc un signal NMEA 0183 sortie de module gps TX
Le bateau fonctionne avec le systeme NMEA 2000.
Je voudrais donc traduir le signal nmea 0183 en NMEA 2000 pour remplacé l'antenne d'origine que j'ai cassé :(
j'ai essayé de compiler.
des librairies à inclure ne sont pas mentionnées dans GpsN2KWifiGateaway.ino
il faut ajouter les librairies
github.com[...]/Shifty
github.com[...]Control
github.com[...]en/Time
EDIT : ****corrigé******
plus gênant, des fonctions (au moins une) n'existent plus ou ont été renommées dans le framework de gestion des ESP32
"espunderscoreefuseunderscoremacunderscoregetunderscoredefault" est introuvable, par exemple.
cette erreur a été trouvée, il faut rajouter #include "esp_mac.h" en ligne 21 de BoardSerialNumber.h des fautes dans les modules copiés du github, comme tn2kAISTranseiverInfo au lieu de tn2kAISTransceiverInformation
on se demande si ça a été compilé un jour :-)des appels de fonction qui ont moins d'arguments que la fonction ...j'arrête là.·le 24 nov. 15:46
Salut,
En effet, ca fait un moment que j'ai fait ce code... les librairies ont pu évoluer depuis.
Le tout fonctionnait assez bien (avec une puce GNSS M9N).
Par contre il y avait un petit bug lorsqu'il y avait trop d'émetteur AIS autours.
j'ai une M8N, et pour moi, elle travaille sur 4 constellations, mais seulement 3 à la fois.
quel intérêt de travailler à 10 ou 25Hz, au lieu du 1Hz par défaut ? les bateaux ne vont pas si vite...·le 25 nov. 12:06
je ne vois pas l'intérêt de travailler en 10Hz pour un pilote, puisque le bateau ne réagira pas 10 fois par seconde :-)·le 25 nov. 12:52
Hello Oscarski,
Pour mieux cerner ce qui bug dans le sketch tu peux commencer par l'alléger.
Si tu as juste besoin d'une antenne GPS à brancher sur le réseau NMEA2000, tu peux retirer beaucoup de lignes du sketch d'Aurélien.
Ce sera plus simple à étudier. Par exemple en retirant le lignes liées au Wifi et au serveur Web.
J'avais fabriqué un tel montage mais avec un Arduino Méga, un shield CAN Elecrow et une antenne U-blox NEO M8, en fait le code était beaucoup plus léger.
le GNSS envoyait des données numériques classiques, pas au format NMEA0183 donc sans nécessité de conversion, je les ai juste mises dans les bons champs des différentes PGN NMEA2000 et envoi sur le réseau. La libray de faisait le reste.
Par ailleurs Aurélien a raison, quand les libraries sont mises à jour il peut arriver que les compilations provoquent alors de nouvelles erreurs là où avec une ancienne library ça passait.
Ca m'est arrivé, comme des erreurs de conversion de format.
Autre point tu peux aussi soumettre les messages d'erreur à ChatGPT pour t'aider à les comprendre, interpréter et lui demander une solution.
Amicalement.
FX
je suis modérateur sur un groupe FB Arduino, et les appels au secours après utilisation de ChatGPT sont nombreux.·le 25 nov. 12:08
Je serais plutôt parti des sketch wind ou température monitor plutôt que message sender dont la structure est beauciup plus complexe. En revanche en partant de wind ou température monitor il faut absolument modifier des paramètres fondamentaux comme le numéro des pgn ou du constructeur et pour cela bien comprendre chaque instruction de la library. Autres conseils mettre des traces partout et scinder les 2 partis principales acquisition et envoi des données gps. Ou simuler l'acquisition en mettant ds valeurs fixes plus faciles à maitriser·le 13 jan. 17:22
Hello à tous, tout dabord merci à vous pour votre aide précieuse. pour etre transparent avec vous il y a beaucoup de mise a jours et beacoup de chose à comprendre à propose de la bibliothèque NMEA2000.
mon objectif c'est affiné /
mon antenne GPS doit transmettre les PGN :
PGN 129026
Name: COG & SOG, Rapid Update
SRC: 28
DST: 255
Time: 13:17:58.420
Interval: 0.50
Data: 3D FC 00 00 04 00 FF FF
PGN 129025
Name: Position, Rapid Update
SRC: 28
DST: 255
Time: 13:17:58.421
Interval: 0.50
Data: 02 54 3F 1C 8C 42 86 00
PGN 129539
Name: GNSS DOPs
SRC: 28
DST: 255
Time: 13:17:58.426
Interval: 0.50
Data: 3D 02 64 00 9D 00 64 00
PGN 126992
Name: System Time
SRC: 28
DST: 255
Time: 13:17:58.434
Interval: 0.50
Name: CUSTOM PGN
SRC: 28
DST: 255
Time: 13:17:58.435
Interval: 0.50
Name: GNSS Sats in View
SRC: 28
DST: 255
Time: 13:17:58.451
Interval: 0.50
Name: ISO Address Claim
SRC: 28
DST: 255
Time: 13:15:13.411
Interval: 236.41
Data: C8 C3 44 0E 00 00 00 42
Le montage comprend toujours un esp 32 / un can tranciver / un altimètre GY-68 ( pour custom PNG ) une antenne M10-25Q / une boussol QMC 5883L /
pour l'instant j'ai réalisé un ACTISENSE READER qui m'a permi d'identifier les pgn grace à un ami qui m'a prèter son antenne original.
pour l'instant j'ai réussit à envoyer le PGN 60028 ( ISO ADRESS CLAIM )
X2 celui initial du board esp 32 puis celui que j'inject.
Pouvez vous me donner un coup de main ? le code c'est vraiment vieux pour moi ...
un baromètre donne une pression.
le GY-68 / BME180 est un capteur de pression !
autant utiliser les bons termes. je me demande à quoi sert cette instruction dans mon code ?
fCourse = GPS.course.deg(); // affiche, par exemple 180°
sCap = GPS.cardinal(fCourse); // affiche, dans ce cas, "S" est-ce un cap ? est-ce une péninsule ? ·le 24 déc. 09:38
tu envoie la valeur en degrés, et ça te renvoie le cap sur 1 à 3 lettres. const char TinyGPSPlus::cardinal(double course)
{
static const char directions[] = {"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"};
int direction = (int)((course + 11.25f) / 22.5f);
return directions[direction % 16];
}·le 24 déc. 17:59
Hello,
Le code qu'on trouve sur le githib github.com[...]ee/main est-il le dernier à jour ?
Amicalement.
FX
dans ce fichier, il faut corriger une fonction, dont il manque un code de retour, valeur indifférente car non traitée.
en 265, il faut
int printLogs(const char *fmt, va_list args){
Serial.print(fmt);
return 0;
} et là, ça compile.·le 25 déc. 10:35
quel qu'un aurait un code simple afin d'envoyer un message pgn sur le can bus depuis ESP32 ?
je ne suis pas sur de on testeur et je n'arrive plus a lire les message et biensur j'ai perdu le code qui fonctionnait.