Une interface Raspberry Pi / bus CAN sur Github

Bonjour à tous,

Sur une Raspberry Pi on peut disposer d'une interface CAN Bus avec les cartes de la famille PiCan2 de SKPang. Malheureusement la communication avec le bus CAN se fait par un socket connecté à une interface réseau émulée qui figure le contrôleur CAN. Ajouté à ça que de nombreux paramètres du contrôleur de bus CAN (chip MCP2515) ne sont pas pris en compte et que les exemples donnés sont en Python (trop lent) et vous avez un système que je n'ai pas réussi à exploiter à bord ... Donc je me suis pris par la main, j'ai développé un code en C et j'ai déposé ça :

github.com[...]CAN2msg

Pour moi ça a l'air de marcher mais rien ne vaut l'expérience des autres ! Alors si vous voulez bien tester et me dire ce que vous avez trouvé qui coince ...

Bien sûr tout le code est libre d'autant que je n'ai pas tout trouvé tout seul :-).

Normalement, d'ici fin janvier, je devrais publier une interface NMEA 2000 et une version client serveur. Cette dernière est déjà pas mal avancée puisque des cartes clientes type Raspberry Zero W communiquent avec un bus CAN via un serveur Raspberry Pi 3. Mais c'est plus compliqué que je l'imaginais ...

A vos Raspberry et merci d'avance de vos retours.

Bernard.

L'équipage
02 déc. 2018
02 déc. 2018

Bravo !

02 déc. 2018

Intéressant, je vais suivre ça de près.

Tu as eu accès aux specs NMEA 2000 ? (qui sont payante et assez cher)
Si je ne me trompe pas, c'est le principal frein au développements par de petites structures et/ou des particuliers et donc à l'open source.

Je vais regarder ton code et si je peux participer, ça sera avec plaisir mais pas sans arrières pensées car j'ai des projets qui serait très bien avec une interface NMEA 2000 ...

03 déc. 2018

Sur le site du projet canboat tu as pas mal d'infos sur la spec N2K :

github.com[...]canboat

03 déc. 2018

Je n'ai pas d'infos sur la norme NMEA 2000, je ne l'ai pas achetée et si ça avait été le cas je crois qu'il faut signer une clause de confidentialité. La seule chose dont on dispose officiellement c'est la liste des PGN et la composition du message envoyé. Quelques trucs ont fuité sur le net en provenance directe de la NMEA et un site russe a déjà fait pas mal de boulot de documentation mais ça ne bouge plus trop !
Toutefois, et l'exemple de paramètres moteur que je donne dans le programme de simulation en est la preuve, on peut assez facilement retrouver ces informations. Sur mon bateau j'ai sondé un peu tout avec une Actisense et pour l'essentiel j'ai tout retrouvé : sondeur, anémo, GPS, AIS, etc ... La seule chose que je n'arrive pas à trouver c'est comment envoyer les coordonnées d'un point de destination au PA et le passer en mode track. Il faudra que je puisse embarquer sur un bateau où il y a à la fois un multifonction et un PA les deux en NMEA 2000.
Ce qui est coûteux dans cette norme c'est la validation pour avoir le petit autocollant ...
Actuellement je bosse sur une librairie dédiée NMEA 2000 qui puisse négocier l'adresse source et répondre aux requêtes type "product info". Une fois que ces fonctionnalités seront terminées (fin janvier) le soft sera opérationnel au même niveau que les softs commerciaux. Ensuite je passerai à une bibliothèque dédiée aux capteurs, ça va être plus facile d'autant que je ferai ça à bord ...

03 déc. 2018

Beau travail !

03 déc. 2018

Hello Tux,

Tu évoques la lenteur du Pi programmé en Python.
Aurais tu une idée quant à l'écart de vitesse qu'il pourrait y avoir par rapport à un Arduino programmé avec son C++ maison ?
Je pose la question car en ce moment j'utilise déjà des Arduino+CanBus connectés au NMEA2000 du bord et parfois la vitesse de traitement à 16Mhz (Arduino Mega) est un peu limite et je me demandais si je n'allais pas passer sur du Teensy ou du Ardunion Due à 84 Mhz ou teensy 3.5 à 120Mhz.

Amicalement.
FX

12 déc. 2018

Salut FXVT,
En Python on n'arrive pas à recevoir les messages multi trame genre "product info" (PGN 126996) qui est constitué de 20 trames.
Si on doit envoyer des messages type "rapid update" un peu longs au rythme de 0.1 s, là aussi ça part en vrille ...
Concernant le quartz à 16 MHz de la carte CAN, ce n'est pas lui qui est en cause, il sert à régler l'échantillonnage sur le bus CAN. Ce qui est limitatif c'est la vitesse du bus SPI. Le contrôleur CAN support 10 MHz mais la Raspberry Pi décroche si on force son bus SPI à plus de 4 MHz. Cette RPi n'est pas réputée pour la qualité de son bus SPI ... Sur l'Arduino je ne sais pas ? Je vais passer un coup d'analyseur logique.
Concernant le Teensy j'ai lu pas mal de bons trucs sur elle : plus rapide, plus de mémoire. Concernant la Due il y a un problème de 3.3v vs 5v des interfaces CAN.
En conclusion je pense qu'il vaut mieux faire un contrôleur CAN avec une Teensy, une Galileo, etc plutôt qu'une Raspberry à moins que l'on veuille faire des communications réseau genre client/serveur, serveur http, etc ... Avec une Raspberry ça reste quand même plus facile à développer car il y a tout un environnement de debuggage qu'on a pas sur les cartes sans OS.
Bon bricolage.

03 déc. 2018

Salut, pour le pilote, j'avais trouvé une page qui décrivait les sentences, c'est dans mes bookmarks sur le pc je la mettrai ici quand j'y aurais accès. Pour le nmea2000, une lib existe sur github t'y as jeté un œil ?

12 déc. 2018

Salut Khetzal,
J'ai pas mal fouillé le web en général et Github en particulier. Ils en sont au même point que mois vu qu'il faut avoir accès à un bus bien fourni pour pomper les messages et les analyser. J'ai déjà tout ce qui nous serait utile vu que mon bateau est full NMEA 2000 mais il va me manquer des messages genre consommation électrique, jauges d'eau, de GO, etc ...
Ce qui est sûr c'est que les étapes administratives genre négociation d’adresses au démarrage n'est pas abordé dans les softs disponibles sur le web. Il n'y a pas non plus de fonctions de scan du réseau pour connaitre l'ensemble des équipements présents, ça fait partie de la norme ... Certains constructeurs comme Simrad refusent d'afficher un message s'il n'est pas "administrativement" correct ... J'y travaille !
Bernard.

03 déc. 2018

:pouce:

12 déc. 2018

Bonjour à tous,
Quelques corrections : il y avait un problème de réception des messages lorsque le bus CAN est trop chargé.
- Modification de la gestion des interruptions en réception ; maintenant on peut recevoir des messages espacés de 10µs. C'est le cas notamment quand un équipement émet un message "Product Info" composé de 134 octets !
- Un exemple de lecture des messages où l'ID est décodée façon NMEA 2000
- Corrections de quelques maladresses ...
Bon bricolage à tous

12 déc. 2018

Bravo pour le boulot ! Est-ce qu'il y aurait moyen d'intégrer ça à OpenPlotter ?

06 jan. 2019

Bonjour à tous,
Je reviens un peu tard répondre à vos questions.
- Concernant le développement pour une carte Teensy, cela semble intéressant car la carte est vraiment très puissante, elle reprend l'environnement Arduino et a son propre contrôleur CAN. Mais il va falloir patienter un peu car elle a un défaut de sa qualité à savoir que la programmation de son contrôleur CAN est très mal documentée et en plus il faut rajouter un transceiver CAN donc réaliser un PCB avec l'alimentation 12v qui va fournir le 5v et le 3.3v et le transceiver. Pour ceux qui voudrait voir à quoi ressemble la librairie CAN pour la Teensy il faut rechercher "flexcan" sur github. Son usage ne me semble pas trivial et je crois aussi qu'il manquerait une fonction genre "bitModify" ?
- Quant à intégrer ça à Open Plotter je ne sais pas le faire. Toutefois si OP a une interface NMEA 2000 (genre support d'une sonde Actisense NGT) ça s’intégrera sans problème.
Bon bricolage à tous.
Bernard.

28 mars 2019

Salut,

En cherchant des infos sur du can bus (pas pour le bateau, pour une application industrielle), et vu que je suis habitué à l'esp32, je suis tombé là dessus:

www.oddwires.com[...]an-bus/
et là www.tindie.com[...]bus-v2/

Et en plus diy hackaday.io[...]-shield

Ca permettrait je pense de pas mal faire sauter les limitations du rpi pour pas trop cher, mais j'ai pas eu le temps de plus m'y pencher pour l'instant (je n'y connais pas encore grand chose en canbus, l'idée serait de scanner le bus en temps réel sur une machine industrielle, aussi applicable du coup au nmea2000 pour faire un module nmea2000 wifi pour 40$ avec le premier module listé facilement et sans bidouillage, qui peut prendre directement le 12v du bord).

11 nov. 2019

Bonjour,
est-ce que ça a un lien avec votre projet ?
www.hisse-et-oh.com[...]spberry

Phare de Pulau Langkuas, Au nord ouest de l'île de Belitung en Indonésie

Phare du monde

  • 4.5 (15)

Phare de Pulau Langkuas, Au nord ouest de l'île de Belitung en Indonésie

2022