Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Raspberry Pi Discussion :

Besoin de conseils pour programmation embarquée


Sujet :

Raspberry Pi

  1. #1
    Membre régulier
    Besoin de conseils pour programmation embarquée
    Bonjour,
    Dans le cadre d'une POC pour un petit projet perso, j'aimerai programmer sur RPI en utilisant les IO dispo en langage C/C++.
    J'ai fait un peu de C il y a longtemps mais à un niveau très basique...

    Pour débuter j'aimerai gérer 2 input, 2 output et afficher quelques messages sur le consoles.

    Le programme devrais faire :
    Si Input 1 pendant X1 secondes, mettre Ouput à 1.
    Si /Input 1 pendant X2 secondes, afficher un premier message.
    Si /Input 1 pendant X3 secondes, afficher un second message.
    Si /Input 1 pendant X4 secondes, afficher un troisième message.
    Les timers devrait être synchronisé avec le t0 où on a /Input.
    Et bien évidement chaque timers doit être annulé (ou remis à zéro) suivant le changement d'état de l'Input.

    Idem avec Input 2 et Ouput 2, pour avoir un exemple de programmation avec un peu de "parallélisme".

    Enfin, j'aimerai que chaque tempo soit réglables depuis un web server (simple page web) et que les changement soit pris en compte en temps réel.

    Mes questions :
    - Quelle bibliothèque utiliser pour gérer le GPIO ? WiringPi (noté "deprecated" sur le dernier article du site), bcm2835, autre ?
    - Pour la gestion des timers / events : il me parait évident qu'un sleep ne fera pas l'affaire ... dois-je mettre mes timers dans des threads séparés du programme principale ou existe-t-il une autre technique ? Pour les annulé je tue les threads, puis j'en crée d'autre ?
    - Comment réaliser l’interaction programme <-> page web ?
    - Auriez vous des exemples de codes ?

    Une fois que je saurais faire ça, je pourrais étoffer ma POC et faire des "vrai" trucs avec le GPIO et le RPI

    J'ai commencé à faire quelques recherches, mais je ne trouve que des exemples simple et pas très concret

    Merci par avance pour votre aide.

  2. #2
    Rédacteur

    Bonjour,

    Je n'ai aucune idée du POC et juste regardé sur Internet!?! Cela semble assez la "classe".

    Si vous voulez vraiment "faire des "vrai" trucs avec le GPIO et le RPI" en programmation, il faudra le faire en Python.
    Si vous voulez vraiment passer pro, il faudrait créer des classes Python, etc.

    Moi-même je suis, disons, un amateur en Python, un pro en C++ et encore plus en Java.
    Donc, si je devais faire du solide, moi-même, je prendrais le Pi4J.

    Cordialement.

  3. #3
    Responsable 2D/3D/Jeux

    Bonjour,

    J'ose croire que l'on peut manipuler les IO du RPi en C/C++ avec wiringpi. Mais bon, le Python c'est bien aussi .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Rédacteur

    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    J'ose croire que l'on peut manipuler les IO du RPi en C/C++ avec wiringpi.
    Oui, mais ce n'est plus supporté. Et quand on débute ....
    Référence: http://wiringpi.com/wiringpi-deprecated/

    Citation Envoyé par dark_vidor Voir le message

    Enfin, j'aimerai que chaque tempo soit réglables depuis un web server (simple page web) et que les changement soit pris en compte en temps réel.

    Mes questions :
    - Quelle bibliothèque utiliser pour gérer le GPIO ?
    - Pour la gestion des timers / events : il me parait évident qu'un sleep ne fera pas l'affaire ... dois-je mettre mes timers dans des threads séparés du programme principale ou existe-t-il une autre technique ? Pour les annulé je tue les threads, puis j'en crée d'autre ?
    - Comment réaliser l’interaction programme <-> page web ?
    Cela dépend de ton niveau et de tes connaissances.
    Si tu es un crac en Java, tout cela c'est du gâteau.
    Sinon prendre Python, et Flask pour le Web.

    Cordialement

  5. #5
    Membre régulier
    Bonjour,
    Merci pour vos retours, je ne suis pas un crack en Java, ni en Python, mais je me débrouille
    J'aurais aimé quelques choses de plus "bas niveau" pour pouvoir réutiliser au maximum mon code en embarquée, d'où ma volonté de faire en C/C++

  6. #6
    Responsable Arduino et Systèmes Embarqués

    Salut,

    Citation Envoyé par boijea Voir le message
    Donc, si je devais faire du solide, moi-même, je prendrais le Pi4J.
    The Pi4J Project - Dependencies
    Pi4J implements a JNI wrapper of the WiringPi library developed by Gordon Henderson.
    Pi4J dynamically compiles against the WiringPi library so you must have Wiring Pi installed on your target system. WiringPi is included by default in the latest Raspbian builds.


    De quelle version du Pi on parle ? La 4 ?

  7. #7
    Rédacteur

    Citation Envoyé par f-leb Voir le message
    Salut,

    The Pi4J Project - Dependencies



    De quelle version du Pi on parle ? La 4 ?
    Cette info devrait suffire: https://forum.pi4j.com/topic/18/wiri...gpi-deprecated
    Ils semblent avoir un peu de retard avec le nouveau Pi4J prévue originalement mi-Septembre.

    Pour un débutant sur le Raspberry Pi, je ne prendrais pas le Pi 4, mais un Pi 3B+ meilleur marché avec le dernier Raspbian, et je commencerais en Python.

    Citation Envoyé par dark_vidor Voir le message

    Mes questions :
    - Quelle bibliothèque utiliser pour gérer le GPIO ? WiringPi (noté "deprecated" sur le dernier article du site), bcm2835, autre ?
    - Pour la gestion des timers / events : il me parait évident qu'un sleep ne fera pas l'affaire ... dois-je mettre mes timers dans des threads séparés du programme principale ou existe-t-il une autre technique ? Pour les annulé je tue les threads, puis j'en crée d'autre ?
    - Comment réaliser l’interaction programme <-> page web ?
    C'est du lourd, mais facile en Java, pour un crac, où le serveur Web serait un thread démarré depuis l'application, etc. etc!
    Essaies un peu en Python et ensuite, passe en Java .... et en librairie, pour consulter mon bouquin (tout est dedans).

    Je suis de retour de 2 périodes de vacances et je vais reprendre mon Python Web Flask – Raspberry Pi 3/4 à terminer et qui deviendra un article (si accepté) sur developpez.net.
    C'est une alternative et la partie Web est trop cool.

    Cordialement

  8. #8
    Membre régulier
    Bonjour,
    Merci pour ces précieuses informations... mais ça ne réponds pas à ma question initiale qui était comment faire ça en C/C++
    J'ai des PI3 B/B+ qui sont effectivement largement suffisant pour commencer.

  9. #9
    Rédacteur

    Citation Envoyé par dark_vidor Voir le message
    ... mais ça ne réponds pas à ma question initiale qui était comment faire ça en C/C++
    J'ai des PI3 B/B+ qui sont effectivement largement suffisant pour commencer.
    Perso ... je ne m'y lancerais pas.
    J'ai commencé le C++ en 1990 et le C bien avant.
    J'ai passé en Java en 1998 et quitté définitivement le C++ en 2008.
    C'est mon travail et les plateformes utilisées qui m'ont conduit dans cette direction (mais je continuais de donner des conseils en C++).
    Java est beaucoup plus facile (1 année d'expérience correspond facilement à 4 en C++).
    La productivité en Java est incroyable!

    Il faudra donc un peu chercher, par exemple un c++ raspberry pi tutorial dans Google Search.

    J'ai aussi bien aimé écrire Programmez en Java sans le Pi4J.

    Bon, si disons, on m'attachait et me forcerait de ne travailler qu'avec le C++ sur le Pi, je commencerais par un eclipse C++ raspberry pi dans Google Search (Eclipse est mon outil de travail).
    Et je me retrouverais sans doute à reprendre https://github.com/WiringPi/WiringPi ... il faut parfois rêver!

    Bonne recherche

  10. #10
    Membre régulier
    @boijea, merci beaucoup pour ces conseils francs.
    Je vais regardé votre livre, j'y ai accès via la Bibliothèque du CNAM étant en période de reconversion pro et suivant des cours.

###raw>template_hook.ano_emploi###