Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Problème lecture données port usb
#1
Bonsoir à tous,

J'arrive à lire les données de ma carte Arduino Uno reliée à mon PC par câble USB en utilisant la commande screen /dev/ttyACM0 9600 sur le terminal Ubuntu. Mais pour cela j'ai du installer screen.

J'ai essayé la commande tail -f /dev/ttyACM0 mais ça ne fonctionne pas.

J'ai vraiment besoin de la commande tail car j'aimerais l'utiliser dans une page php.

Je me suis aidé de ce tuto pour les commandes : http://arduino103.blogspot.fr/2011/05/ut...duino.html

Pourquoi ça ne fonctionne pas ? Pourriez-vous m'aider svp ? Big Grin
Répondre
#2
Il y a une note dans l'article indiquant que l'auteur n'arrive pas à faire fonctionner la méthode avec tail sous Ubuntu. Wink
Répondre
#3
Oui mais est-ce que vous avez une autre méthode svp ? Car sur ma page en php j'ai besoin d'utiliser une commande shell_exec afin de lire les mesures de l'arduino connecté en usb sur mon pc sur une page web.
Répondre
#4
Et tu ne peux pas utiliser shell_exec en combinaison avec screen ?
Répondre
#5
Non malheureusement ça ne fonctionne pas. C'est inscrit qu'il me manque un fichier pour exécuter la commande.
Répondre
#6
essaye une alternative:

less +F /dev/ttyACM0
Répondre
#7
J'ai tapé less +F /dev/ttyACM0 tel quel sur le terminal Ubuntu et ça m'inscrit :

/dev/ttyACM0 is not a regular file (use -f to see it)

Je ne comprends pas.
Répondre
#8
Prav26 a écrit :J'ai essayé la commande tail -f /dev/ttyACM0 mais ça ne fonctionne pas.

Peux tu être plus précis? (une erreur, rien, il attend, il se ferme, etc..)
Répondre
#9
Voila ce qui se passe quand je tape la commande tail -f /dev/ttyACM0. Il y a un curseur qui clignote et je peux écrire du texte.

[Image: 64u2.png]
Répondre
#10
Tail -f lis le fichier et t'affiche sur la sortie standard le contenu du fichier.

Donc normal que tu puisses y écrire des choses, ça ne sert cependant à rien, car ça n'envoie rien réellement.
Répondre
#11
Merci Jeoffrey. Mais alors comment puis-je faire pour lire les données de l'Arduino du port USB ?
Répondre
#12
Bonjour,

Pour lire des info de l'Arduino par interface série, j'utilise ce mini code en Python : https://bitbucket.org/Nekrofage/stationm...?at=master
Répondre
#13
Merci Nekrofage mais je ne sais pas comment exécuter un code en Python.

J'ai compilé mon programme .ino sur l'Arduino et ensuite j'ai enregistré ton script tel quel dans un fichier .py. Ai-je besoin de tout ton code pour lire les données du port usb ? A quoi sert la ligne filename = open("meteo.csv", 'w') ? Mais comment faire pour utiliser ton script Python sur une page web .php ? Smile

Excuse-moi pour toutes ces questions car je ne suis qu'un débutant Tongue
Répondre
#14
Je te lance idée de base, à toi de la modifié et donc l'adapté à tes besoins.

Prav26 a écrit :Ai-je besoin de tout ton code pour lire les données du port usb ?
Il y a sûrement des morceaux qui ne te seront pas utiles.

Prav26 a écrit :A quoi sert la ligne filename = open("meteo.csv", 'w') ?

C'est spécifique à mon appli. Cela écrit dans le fichier "meteo.csv" mais donné reçu par mes capteurs.

Prav26 a écrit :Mais comment faire pour utiliser ton script Python sur une page web .php ? Smile

Il y a des "posts" à ce sujet, fait une petite recherche sur le forum.
Répondre
#15
Merci infiniment Nekrofage ça fonctionne sur le terminal Ubuntu ! Smile

J'ai un peu modifié ton programme afin de ne lire que les mesures. Je n'arrivais pas à lire la 1ère unité de mes mesures. Par exemple 42,30% s'affichait 2,30%. Mais maintenant ça fonctionne Big Grin

Mais j'ai encore un soucis. J'ai crée un répertoire dans var/www en localhost pour tester le script python sur une interface web. J'ai mis à l'intérieur le script php + python. Je leur est donné les droit chmod 777 :

Script php :

Code :
[== PHP ==]
<html>
<body>

<?php
$output = shell_exec('python humidite.py');
echo "<pre>$output</pre>";
?>

</body>
</html>

Script python :

Code :
[== Indéfini ==]
#!/usr/bin/python

import serial
import time

locations=['/dev/ttyACM0']

for device in locations:
    try:
        ser = serial.Serial(device, baudrate=9600, timeout=1, writeTimeout=1)
        while True:
            ligne = ser.readline()
            print ligne

    except:
        print "Echec de connexion sur", device

Mais ça m'affiche sur ma page web : Echec de connexion sur /dev/ttyACM0

D'où vient le problème stp ? Wink
Répondre
#16
Prav26 a écrit :Par exemple 42,30% s'affichait 2,30%. Mais maintenant ça fonctionne Big Grin

Tu fais aussi un projet "météo" ?
C'était quoi l'erreur ?

Prav26 a écrit :J'ai mis à l'intérieur le script php + python. Je leur est donné les droit chmod 777 :

Je crois que c'est pas suffisant de mettre ces droit, il faut aussi changer le owner du fichier (cf. chown)

Prav26 a écrit :Mais ça m'affiche sur ma page web : Echec de connexion sur /dev/ttyACM0

D'où vient le problème stp ? Wink

C'est aussi un problème de permission sur le device /dev/ttyACM0

Je fais appel au membre du forum qui sont un peu plus calé que moi pour résoudre ce problème !! O_o
Répondre
#17
À mon avis, la solution est indiquée dans l'excellent article, déjà cité : http://playground.arduino.cc/Interfacing/LinuxTTY
En particulier, When all else fails, cf la fin de l'article.
Cool
Répondre
#18
C'est bon j'ai réussi à afficher les 15 premières mesures de mon capteurs d'humidité sur ma page web en PHP. J'ai résolu le problème de permission

Mais j'aimerais que ça m'affiche que sur une seule ligne les mesures et que ça défile continuellement. Par exemple je ferais un script PHP où il y aura écris Humidité=....... et sur ces pointillés les mesures changeront. J'espère que je me suis fait comprendre :p A votre avis c'est faisable en modifiant le script Python ou PHP ?

Voici mon nouveau script Python :

Code :
[== Indéfini ==]
#!/usr/bin/python

import serial
import time

locations=['/dev/ttyACM0']

for device in locations:
    try:
        ser = serial.Serial(device, baudrate=9600, timeout=1, writeTimeout=1)
        for _ in range(15):
            ligne = ser.readline()
            print ligne

    except Exception as why:
        print "Echec de connexion : %s" % why
Répondre
#19
Tu peux passer par le module curses disponible pour Python qui permet de gérer les positions d'affichage dans un écran de terminal.
Raspberry Pi Home Server : http://www.pihomeserver.fr
Hotspot Wifi avec portail captif pour Raspberry Pi: Kupiki Hotspot
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.