pigpiod en C++

Le langage C permet de créer des programmes rapides et proches de la machine

Modérateur : Francois

Répondre
Avatar du membre
Thierry
Messages : 21
Enregistré le : lun. 13 févr. 2017 08:52

pigpiod en C++

Message par Thierry » mer. 12 févr. 2020 10:51

Bonjour,
Voici ma problématique.
J'utilise la librairie pigpio pour gérer les entrées sorties de ma carte.
Tout va bien, sans aucun soucis.
Je lance le daemon "sudo pigpiod" à chaque démarrage de la carte via la console, puis lance mes différents nœud ROS. (ROS ou pas ma problématique reste existante)

J'aimerais que ce démon soit lancer automatiquement au démarrage. Donc, dans un premier temps je test s'il est déjà démarrer en faisant un "systemctl --status-all"
S'il ne figure pas, je fais un "sudo pigpiod".
Malheureusement, si je reteste la présence du daemon dans "systemctl" celui-ci n'apparait pas :!: :!: :!:
Avez vous une idée de la commande à lancer pour visualiser l'état de mon daemon :?:

cbalo
Raspinaute
Messages : 272
Enregistré le : sam. 24 août 2019 06:05

Re: pigpiod en C++

Message par cbalo » mer. 12 févr. 2020 18:20

Bonjour
Tu as 2 options :
- soit utiliser systemd avec les avantages que cela a (redémarrage, status, log, dépendances vis à vis d'autres services) et ses inconvénients (un petit peu complexe)
- soit à l'ancienne, à l’arrache avec ajoutant le lancement de ton programme dans /etc/rc.local, c'est tout simple mais ce n'est encore possible que pour des raisons de compatibilité et on ne sait pas combien de temps cela sera encore possible (quoi que avec Debian, les évolutions n'arrivent pas tout de suite)

Un exemple mais c'est vraiment très simple) pour /etc/rc.local
ajout (avant le exit !!) dans /etc/rc.local de la ligne qui lance ton programme (mets le chemin complet, c'est plus sûr) et sans oublir un & final (caractère sous le 1 de ton clavier)
Un exemple ici dans lequel, l'utilisateur lance automatiquement python3 avec pour argument son script python à exécuter
https://www.raspberrypi.org/documentati ... c-local.md

Si tu préfères systemd, je t'expliquerai si c'est ton vœux (inutile de surcharger ce post si ce n'est pas nécessaire)

flotte
Messages : 28
Enregistré le : lun. 8 janv. 2018 00:38

Re: pigpiod en C++

Message par flotte » dim. 23 mai 2021 00:34

Bonsoir

Je suis intéressé pour systemd ?

Envoyé de mon SM-A520F en utilisant Tapatalk


smog
Messages : 35
Enregistré le : mar. 24 nov. 2020 08:03

Re: pigpiod en C++

Message par smog » mar. 22 juin 2021 07:47

Je suis intéressé aussi pour découvrir !
Merci !

Bud Spencer
Raspinaute
Messages : 1024
Enregistré le : lun. 15 août 2016 21:38

Re: pigpiod en C++

Message par Bud Spencer » mar. 22 juin 2021 16:54

smog a écrit :
mar. 22 juin 2021 07:47
Je suis intéressé aussi pour découvrir !
Merci !
C'est quoi au juste la question, démarrer un service avec systemd ?
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

piper
Raspinaute
Messages : 136
Enregistré le : sam. 5 juin 2021 18:57

Re: pigpiod en C++

Message par piper » dim. 27 juin 2021 19:29

Oui, c'est dans le 1er message.
systemd est à la fois complexe (parce qu'il sait tout faire... sauf le café) et simple
Dans votre cas (lancement d'un programme simple sous la forme d'un service), c'est assez simple :
Il faut un fichier dans /lib/systemd/system/ qui décrit toutes les informations nécessaires.
En général, on le nomme monprogramme.service (ex : gps.service) ou je ne sais quoi, ce que vous voulez.
Une fois que ce fichier y est, il faut activer le service par systemctl enable monprogramme.service et le démarrer une 1ère fois par systemctl start monprogramme.service pour vérifier que ça démarreg bien.

Voici un exemple tout bête dont vous pouvez vous inspirer, il devrai suffit dans votre cas :

Code : Tout sélectionner

[Unit]
Description=monservice
After=rc-local.service
[Service]
Type=simple
User=root
ExecStart=/usr/bin/python3 /home/pi/monservice.py 
ExecStop=/bin/bash /home/pi/horam/stopmonservice.sh
PIDFile=/home/pi/monservice.pid

[Install]
WantedBy=multi-user.target
Description : le nom de votre service (texte simple)
After : votre service peut démarrer après que ...... tel autre service soit démarré (ici rc-local.service correspondrait à l'ajout d'une ligne de lancement à la fin de /etc/rc.local)
Type= il existe différent types de services (simple, fork, etc..), on ne va pas faire un cours magistrale, donc type=simple c'est parfait pour vous
User=root : quel utilisateur lance le programme ? (ce peut-être pi ou root ou un user système selon votre cas de figure). Le user en question doit avoir les droits nécessaires pour faire ce que le programme a à faire.
ExecStart= le script ou programme à lancer (dans mon cas : un script python)
ExecStop= pas obligatoire, mais dans certains cas, vous pourriez vouloir qu'un autre programme fasse quelques tâches à l'arrêt de votre service
PIDFile= : le nom du fichier qui contiendra le PID (process identifier) de votre service (numéro identifiant le processus)
WantedBy=pour equivalence au Run Level et multi-user.target veut dire quand le système est près à recevoir une demande de logging peu importe que l'interface graphique soit déjà disponible ou pas, sinon, c'est graphical-target

Donc un fichier comme ça, puis systemctl enable monservice.service et au prochain reboot, ça démarre tout seul !
C'est pas dur

Après il y a des dizaines d'options possibles :
- des dépendances (dans les 2 sens)
- lancement avant/après tel ou tel service
- ce qui se passe en cas de plantage du service (redémarrage automatique ? attention, danger ! au bout de combien de temps ? combien d'essais ?)

smog
Messages : 35
Enregistré le : mar. 24 nov. 2020 08:03

Re: pigpiod en C++

Message par smog » ven. 9 juil. 2021 17:15

Merci piper, je n'ai pas encore testé/travaillé dessus mais je note tout ça !

Répondre

Retourner vers « C / C++ »