Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Dialoguer entre Arduino et Raspberry pi
#1
Bonjour,

Je suis sur un passionné de mer, du bateau et d'informatique. Vu la complexité de l'électronique d'un bateau et les faibles ressources énergétiques disponibles à bord, je me suis tout naturellement orienté vers un Raspberry Pi2 pour contrôler un maximum de paramètres, du contrôle du tableau électrique, jusqu'à la visualisation de plusieurs températures (eau, intérieur,moteur) et je cherche en ce moment le moyen de visualiser sur le raspberry les données issues d'un Arduino programmé pour en faire un pilote électrique.
L'arduino muni d'un capteur DOF10 me donnera essentiellement le cap magnétique corrigé en fonction des mouvements du bateau ainsi que la pression atmosphérique que je dirigerai vers une base MySql.(j'attends encore ce capteur pour finaliser le pilote.)
Je peux d'ores et déjà relier les 2 appareils (Arduino et Raspberry en série par le port UART et j'obtiens dans la console du raspi les informations issues de l'arduino.
Mon gros problème est de transférer ces données de mon script python (de lecture du port série) vers une page php qui serait rafraichie toutes les secondes.J'ai l'impression qu'il y a un problème de timing (vu que les variables changent très vite sur le flux série).
Pour les températures, le script python qui se charge de les recueillir va ouvrir un fichier, le lit et va l'imprimer .Je recueille facilement ces données dans ma page php avec la commande: $output = shell_exec('python /home/pi/tempera.py');
Ceci ne marche pas avec les valeurs issues du script série. en fait, ce script marche très bien en console mais n'envoie rien à ma page php.
Si quelqu'un a une suggestion ou voudrait plus de détails, je suis preneur avec toute ma reconnaissance.
Je suis débutant en programmation, mais passionné, curieux et têtu.


sohio
Répondre
#2
A vue de nez, je dirais que lorsque tu exécutes
Code :
$output = shell_exec('python /home/pi/tempera.py');
c'est avec l'utilisateur www-data (l'utilisateur du serveur web), qui ne doit pas avoir le droit de lire sur le port série, alors que lorsque tu exécutes en console, c'est avec un utilisateur qui y est autorisé (root ? pi ?).
Ca pourrait expliquer le dysfonctionnement, mais sans plus d'information, c'est un peu difficile à diagnostiquer.
Peut-être qu'on pourrait t'en dire plus avec le contenu du fichier /home/pi/tempera.py.
Répondre
#3
Et j'ajouterai qu'il vaut mieux mettre le chemin complet vers python
Répondre
#4
merci de ta réponse CrazyCat, mais je ne pense pas que le problème vienne de là, car la communication script vers php marche très bien lorsque mon script python donne une valeur fixe et s'arrête (tempera.py) mais ne marche plus dès lors que le script continue de tourner pour envoyer les valeurs du port série Confusederie.py.(les données qu'il envoie sont éphémères et remises à jour plusieurs fois par seconde) ce qui semble être la clef du problème. Je cherche toujours et peut être la lumière viendra!!!
Répondre
#5
Ok, je comprends mieux le souci. PHP ne voit pas de fin d'exécution et donc attends indéfiniment.
Le moyen le plus simple serait peut-être que tempera.py mette à jour un fichier (écrasement, pas append) chaque fois qu'il reçoit une nouvelle valeur et que le php lise ce fichier.

Maintenant, la question que je me pose, c'est l'utilité du PHP. On peut parfaitement attaquer MySQL en python et donc s'asbtraire d'une surcouche qui peut provoquer des désagréments comme celui que tu rencontres.
Répondre
#6
OK
D'abord un grand merci à chevelu qui a détecté un pb de droits de www-data sur le port série.j'ai corrigé cela par un 'sudo usermod -a -G dialout www-data' ce qui fait que je peux faire marcher mon script sous www-data. Le problème php reste toujours présent à ce stade, mais c'est un grand pas en avant!!

CrazyCat, je vois que tu as bien cerné le problème malgré mes explications un peu foireuses!!
J'essaye ce soir ton idée qui me parait bonne et je retournerai poster des nouvelles!!
Merci
Répondre
#7
Encore un petit détail, je tiens à me servir de php car j'aimerais pouvoir consulter les valeurs reçues sur un smartphone depuis le cockpit du bateau!!
Répondre
#8
Rien n'empêche de conserver le PHP pour la consultation:
- le python lit le port serie et alimente la base,
- le php affiche les dernières valeurs entrées.
Répondre
#9
Super CrazyCat, mon projet a bien avancé grâce à tes bons conseils;je n'ai pas pris l'option de Mysql (mais j'y reviendrai sans doutes plus tard pour garder un historique de la navigation!!), et j'ai créé un fichier txt qui se met à jour par mon script python en ne gardant que la dernière ligne envoyée par ce script. ce fichier est lu et traité par la page php rafraichie toutes les secondes et je peux suivre quasi en direct les variations de mes capteurs.merci à toi!!!Je posterai encore sous cette rubrique, quitte à en changer le titre(controle d'un bateau avec raspberry et arduino par exSmile....l'aventure est encore longue!!!!!!!!!!!!
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)

A propos de Communauté francophone RPi

Communauté francophone RPi est un forum d'aide et de partage autour du Raspberry Pi et des micro-ordinateurs.