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€.

L'équipage
07 mars 2021
07 mars 2021

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


J-Marc:Bonjour Olivier,J'ai bricolé pour le faire aussi et j'ai finalement découvert que Luis Veila l'avait déjà fait en open source (passerelle NMEA0183, SEATALK et WIFI) tout en en vendant des kits ou des multiplexeurs montés en boîtier pour 34 à 54€.Il y a une version dite NMEA2WIFI avec ESP8266 et une plus grosse dite NMEA4WIFI avec ESP32.Elle se configurent facilement avec un serveur WEB intégré auquel on se connecte par WIFI.www.vela-navega.com[...]-navega ·le 07 mars 2021 18:41
Aurélien TRICAULT (Okamaugo) :J'ai rajouté le schéma électronique en PDF : github.com[...]ema.pdf Je dois faire aussi un schéma global du projet, c'est dans la TODO list!Pour le Raspberry j'en utilise un aussi avec Open Plotter dessus, mais ca consomme bcp plus qu'un ESP32 car comme le projet gère le GPS, il faut qu'il soit allumé en permanence.·le 07 mars 2021 18:42
Aurélien TRICAULT (Okamaugo) :Bonsoir Jean-MarcJe n'avais pas vu ces projets.L'objectif premier du projet était d'avoir un GPS en 10Hz minimum, et 25Hz si possible.Ca implique d'utiliser le protocole Ublox sur le bus I2C entre le contrôleur et la puce GPS... Je ne crois pas que ces projets intègrent de GPS et ils ne mettent en place que des ports série.Après il y a des bonnes choses à prendre comme l'opto isolation des entrées, l'interface Web de configuration....·le 07 mars 2021 18:48
Spisea:Le projet de Luis Veila n'est pas open source à ma connaissance. Seul le schéma et le code compilé sont disponibles. Donc c'est reproductible mais pas modifiable. Olivier·le 07 mars 2021 20:26
Spisea:Je suppose que sur l'alimentation en pratique tu mets des condensateurs électrolytiques et pas des tanatles. Pas sûr de comment est branché ta résistance de terminaison sur le bus CAN. Elle est bien entre CANH et CANL ? Pour les UARTs il y en a deux de disponible en+ de celui de debug sinon il y a aussi des UARTS software (cela peut t'eviter les jumpers au besoin). Olivier·le 09 mars 2021 07:38
J-Marc:C'est pas opensource mais le firmware est mis à disposition et il fonctionne très bienLuis est sympa·le 09 mars 2021 07:46
Aurélien TRICAULT (Okamaugo) :Pour les condensateur, ca dépasse mes compétences. Peux tu développer les principaux avantages/inconvénients des 2 modèles?Pour la résistance de terminaison, elle arrive sur le connecteur externe en étant lié cote carte au CANL. Il faut relier cette broche du connecteur avec un fil a la broche CANH pour avoir la résistance de terminaison.L'utilisation des jumpers est liée à la carte de la puce M9N que j'utilise qui exploite les mêmes broches pour le port SPI et UART. Du coup je réplique cet usage au cas où, bien que au final j'utilise le port I2C de la puce GPS·le 09 mars 2021 20:00
Spisea:Aurélien, les condensateurs tantales sont assez cher et entrainent parfois des pannes spectaculaires. Ils sont à priviliégier pour miniaturiser un circuit. Les condensateurs électrolytiques veillissent plus progressivement sont moins couteux mais plus encombrants. Ils ont parfois mauvaise réputation surtout à causes des modèles bas de gamme monté dans les écrans près des dissipateurs. Avec des marques comme Panasonic ou Nichicon la durée de vie peut atteindre 5000h à 105°c, beaucoup plus à température ambiante donc. Les choisir avec une tension de service double de la tension d'utilisation. Olivier·le 12 mars 2021 08:34
07 mars 2021

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


Aurélien TRICAULT (Okamaugo) :J'avais trouvé aussi plusieurs projets, mais aucun n'intégrait le GPS et la possibilité de le connecter via un port I2C... Ou alors ils n'étaient pas entièrement packagés.Par ailleurs j'utilise les mêmes librairies logicielles.Là j'aimerais arrivé à un projet avec carte électronique et boitier, bref un truc assez intégrable·le 07 mars 2021 20:22
Spisea:Le projet open-boat est le plus complet que j'ai trouvé. Trop pour mon application, mais il peut servir de "référence".Olivier·le 07 mars 2021 20:27
Aurélien TRICAULT (Okamaugo) :Oui il y a pas mal de truc sur Open Boat project...·le 07 mars 2021 22:43
23 nov. 2024

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 ?


fxvt:Hello,
Des messages ?
Plus d'info sur les librairies ?Quelle config d ESP ? Quel transceiver ? Quel éditeur ?
Amicalement. FX·le 23 nov. 16:49
23 nov. 2024

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é :(


fxvt:Aurais tu les messages d'erreur de la compil ? Tu édites avec quoi ? Aurais tu le sketch ?·le 23 nov. 18:40
24 nov. 202424 nov. 2024

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.



fxvt:Quels sont les messages d'erreur à la compil ?et "espunderscoreefuseunderscoremacunderscoregetunderscoredefault" ne serait il pas "espefusemacgetdefault" ?·le 24 nov. 15:23
Lady_C:remplacer underscore par le caractère souligné bas, parce ce forum ne l'aime pas et le fait disparaître :-)
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
Aurélien TRICAULT (Okamaugo) :Je viens d'essayer de recompiler le code avec les dernières versions des librairies et ca bug, je vais voir si je peux corriger ca rapidement.J'ai utilisé Arduino IDE V 2.3.3 et les librairies fournies par l'IDE pour BlinkControl et Time (pas les versions GitHub) Par contre ·le 25 nov. 12:36
Aurélien TRICAULT (Okamaugo) :Je viens d'apporter les upgrade nécessaire pour que ca compile.A noter qu'il ne faut plus importer directement par l'IDE la libraire BlinkControl car elle n'est pas à jour.J'ai créé un fork qui corrige le problème : github.com[...]Control ·le 25 nov. 13:39
24 nov. 2024

note : je pense que si tu utilises la balise de mise en forme "code", ça ne supprime pas les undescores
je teste pour voir

sans balise
underscoreunderscoreunderscore_


avec balise
underscore_underscore_underscore_underscore_


Lady_C:j'y penserais, merci.
la balise n'est pas possible dans un commentaire.·le 25 nov. 12:03

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.


Lady_C:dans le github, tu dis que la M8N n'utilise qu'une constellation, mais est-ce dépendant de la fréquence ?
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
Aurélien TRICAULT (Okamaugo) :Ce sont des GPS (M8N ou M9N) qui sont en simple bande... Donc ca ne dépend pas de la fréquence.Le M8N est multi-constellation mais je crois qu'il y a une différence majeure sur ce point avec le M9N qui améliore grandement les choses (je n'arrive plus à retrouver)Pour la fréquence, ca aide les pilotes automatiques qui dispose de l'information plus souvent.B&G vend un GPS à 10Hz : www.bandg.com[...]f4589b/ ·le 25 nov. 12:30
Lady_C:le M9N est capable de travailler avec 4 constellations sur 4, le M8N en 3 sur 4. il y a probablement quelques autres différences.
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
Aurélien TRICAULT (Okamaugo) :Oui, mais de mémoire il y a aussi une question ed fréquence...Je crois que le M9N est capable de traiter les 4 constellation a 25Hz, alors que le M8N c'est 1 ou 5Hz.Mais bon, j'ai lu récemment que la précision sur le M9N au delà de 5Hz était largement réduite.Pour ce qui est de la fréquence, je pense que le pilote utilise des filtres Kalmann et que l'info lui est donc utile.Et, même si ca peut n'être qu'un argument marketing, l'adage qui peut le plus peut le moins est certainement très vrai dans ce cas aussi·le 25 nov. 13:37
25 nov. 2024

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


Lady_C:oui, enfin, ChatGPT pour des erreurs de code Arduino et assimilés, j'ai déjà vu ce que ça donnait chez d'autres :-)
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
fxvt:Je reconnais qu'il faut parfois prendre du recul sur certaines réponses ou codes. Mais ça permet parfois d'avoir une aide immédiate.·le 25 nov. 13:00

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 ...


Lady_C:pourquoi ajouter une boussole et un altimètre alors que ces données existent par le GPS ?·le 24 déc. 08:52
Aurélien TRICAULT (Okamaugo) :@OSCARSKIDe mon côté je vais manquer de temps pour t'aider plus que ca!@Lady_CL'altimètre est un baromètre : pression atmosphériqueLa boussole est un compas magnétique : cap compas.Aucune de ces 2 infos n'est fournie par le GPS·le 24 déc. 08:59
Lady_C:un altimètre donne une altitude, par l'intermédiaire de la pression.
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
OSCARSKI:hello, je ne sais pas comment utiliser les données par le gps / est il possible d'avoir un cap précis ? aucune idee pour le "S" . c'est référencé dans la bibliotèque NMEA2000.h donc je ne me suis pas vraiment posé la question. ·le 24 déc. 16:28
Lady_C:c'est dans la librairie que j'utilise.
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


Aurélien TRICAULT (Okamaugo) :Oui, j'ai mis à jour les librairies le mois dernier·le 24 déc. 08:55
OSCARSKI:pour moi ca bloque à la compilation ·le 24 déc. 19:00
fxvt:Des messages ?·le 24 déc. 19:50
Lady_C:il faut bien entendu installer toutes les librairies concernées, dont le nom est donné dans l'entête du fichier GpsN2KWifiGateaway.ino
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.


fxvt:Pourquoi ne pas utiliser les exemples du github de Timo Lappalainen. Car il n'y a pas de sketch vraiment tout fait. Tu auras au moins à adapter selon l'ESP32 que tu as les numéros des pin du transciever CAN. C'est bien noté dans les docs de Timo.github.com[...]0_esp32 . Ce sont mes deux lignes de code "define..."·le 24 déc. 19:06
LESBOS

Phare du monde

  • 4.5 (27)

LESBOS

2022