Bonjour
(A la suite des travaux de Pulsar, sur le post http://arduino.cc/forum/index.php/topic,51062.0.html)
Je souhaite enregistrer les données apparaissant dans le "serial monitor" dans un fichier "Temperatures.txt" directement sur mon ordinateur (mac)
Est ce possible ?
(pour le moment, je laisserai ma carte "Uno" connectée en USB)
Bon, he bien pour probleme n'interesse que moi on dirait. :~
N'y a t'il pas de solution !!
je cherche dans le forum sur le web, que neni, j'en arrive a me demander si c'est possible sans passer par le web ou le wifi.
Effectivement, ton problème n'est pas vraiment un problème d'arduino. Il te faut un petit programme qui tourne sur ton Mac et qui écoute le port série sur lequel l'arduino envoie des trames contenant les valeurs de température.
Peut-être trouveras-tu plus facilement une aide sur un forum spécialisé en programme informatique sur Mac ?
Comme le dis zozoastre, un script python, un code C... doit pouvoir faire l'affaire. Il doit y avoir des exemples sur le playground.
Il faudra sans doute que tu te définisses un petit protocole maison pour que ton programme filtre les trames pour ne tenir compte que des trames intéressantes (genre arduino envoie #temp=valeur_temp*, et si Mac recoit une trame qui commence par # et finis par *, alors traiter la trame)
Merci pour les pistes, je vais y travailler, en fait mon erreur était de chercher une instruction à placer directement dans le code.
Je craignais devoir effectivement passer par des langages que je ne maitrise pas comme le shell ou python, (je préfère le php que je maitrise un peu plus et que me propose "zoroastre")
et je vais relire le post de "chicotore" sur la domotique... mais il me semble qu'il fait un cheminement inverse au mien, il envoi un ordre depuis une interface web vers la carte...
cette piste m'intéresse puisqu'elle propose de lire le port USB avec du PHP sans carte shield ethernet (j'en ai pas pour le moment...)
mais je n'arrive pas à le faire fonctionner. Je me suis installer une serveur local avec MAMP pour être sûr d'être en direct avec le port USB/série, j'ai trouvé la bonne adresse du port visible dans arduino (menu tool) et confirmer dans le terminal (user$ ls / dev) -> pour moi : tty.usbmodem5d11 (je pense que cette adresse peut être différente d'une machine à l'autre
J'ai repris le code Arduino proposé sur la site
int analogValue = 0; // variable to hold the analog value
void setup() {
// open the serial port at 9600 bps:
Serial.begin(9600);
}
void loop() {
// read the analog input on pin 0:
analogValue = analogRead(0);
// print it out in 1 format:
Serial.println(analogValue); // print as an ASCII-encoded decimal
// delay 1000 milliseconds before the next reading:
delay(1000);
}
Une série de chiffres
340
342
340...
Apparaisse, qui confirme que la carte renvoi des infos en continu
Comme tu travailles sur Mac, tu devrais plutôt regarder le 3eme lien.
A savoir aussi, que certains langages, dont le php, ont besoins de bibliothèques, classes supplémentaires pour pouvoir communiquer avec des péripheriques séries. Pour php : PHP Serial class.
Comme tu travailles sur Mac, tu devrais plutôt regarder le 3eme lien.
A savoir aussi, que certains langages, dont le php, ont besoins de bibliothèques, classes supplémentaires pour pouvoir communiquer avec des péripheriques séries. Pour php : PHP Serial class.
@+
Zoroastre.
J'arrive pas non plus à voir le flux de données qui passe par le port USB/serie
J'ai trouvé une bibliothèque "PHP serial class" pour mac osx (http://andrewhutchings.com/php-serial-class-for-os-x)
mais sur le serveur en interne il tourne en rond et n'affiche rien.
:~
Je galère avec mes sondes depuis 6 mois, je découvre Arduino, le pied, mes sondes affichent enfin des T°; les renvoies sur ma machine, les présente dans le serial monitor, et je peux rien en faire
je le crois pas !!!
Newbie sur Arduino, vous l'avez compris Cette plateforme semble être davantage faite pour fonctionner en autonome.
si je résonne de cette manière, arrêter moi si je dis un bêtise
1- on envoi notre sketch dans la carte
2- la carte travaille en boucle de façon autonome (débranchée de l'ordinateur et alimentée en direct)
3- pour récupérer les données, comment procède t'on généralement avec Arduino ? Wifi, shield ethernet, bluetooh ? Dois je passer par un achat complémentaire ?
Je ne suis pas arrivé non plus à faire fonctionner PHP serial class sous MAC OSX en lecture... !?
Pourquoi n'utilise-tu pas Processing ? Tu peux communiquer avec Arduino dans les 2 sens, enregistrer sur ton disque, et même communiquer avec internet.
PHP n'est pas vraiment fait pour de la liaison série, ni même de l'UDP. Par contre, si tu as un shield Ethernet, tu attaques directement une base de données avec PHP, c'est facile à mettre en oeuvre.
Je ne suis pas arrivé non plus à faire fonctionner PHP serial class sous MAC OSX en lecture... !?
Pourquoi n'utilise-tu pas Processing ? Tu peux communiquer avec Arduino dans les 2 sens, enregistrer sur ton disque, et même communiquer avec internet.
Chez moi ça marche impéccable avec le langage de programation Python, je peux enregistrer, lire, écrire des données provenant de l'Arduino. Et ensuite créer des graphs, les intégrer à mon site web, etc.
Il est vrai que le php semble poser des problèmes dans certaines situations. Mais d'autres y sont arrivés...
Pas besoin de matos supplémentaire, tu vois bien que la communication se fait bien entre le pc et l'arduino, il te manque juste l'interfaçe adequat.
En regardant en arrière, est tu sûr de "tty.usbmodem5d11" ???
Chez moi ça marche impéccable avec le langage de programation Python, je peux enregistrer, lire, écrire des données provenant de l'Arduino. Et ensuite créer des graphs, les intégrer à mon site web, etc.
C'est précisément ce que souhaite faire, tu peux me décrire en quelques mots ta démarche (Au fait Mac ou PC ?).
[...]
Pas besoin de matos supplémentaire, tu vois bien que la communication se fait bien entre le pc et l'arduino, il te manque juste l'interfaçe adequat.[/quote]
Interface ?
En regardant en arrière, est tu sûr de "tty.usbmodem5d11" ???
@+
Zoroastre.
tty.usbmodem5d11 il s'agit du nom de l'interface visible dans le menu "TOOLS" d'Arduino pour choisir le port usb/serie. Ce nom appairerait automatiquement sur le mac lorsque l'on procède à l'installation du driver et quant on branche la carte. Comme les données transites correctement sur ce port, j'ai repris ce nom. (d'autant que celui indiqué dans le code php de base ne marche pas)
Merci pour ton aide aussi, vos messages m'encourage à poursuivre ...
mcAllan:
Pourquoi n'utilise-tu pas Processing ? Tu peux communiquer avec Arduino dans les 2 sens, enregistrer sur ton disque, et même communiquer avec internet.
Alain.
mcAllan:
Oui, cela fonctionne parfaitement.
A+
Tu peux m'indiquer en quelques mots, la démarche à suivre, peut être les bouts de code que tu utilises
Python + Python-serial, le code extremement simplifié pour lire des lignes provenant de l'arduino :
import serial
ser = serial.Serial('/dev/ttyUSB0',9600)
while 1:
line = ser.readline()
print line
Pour génerer les graphs, j'utilise GnuPlot. Je t'ai retrouvé le code de base qui pourrait te servir de referentiel.
# Access Arduino data from SheevaPlug
# Graph data and serve as web pages
#
# Copyright 2009 Ken Shirriff
# http://arcfn.com
import os
import serial
import threading
import time
from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
GNUPLOT_CMD = """\
set xdata time
set format x "%m/%d"
set xtic 86400
set timefmt "%m/%d/%Y %H:%M"
set terminal png xeeeeee x000000 size 500, 500
set output 'graph.png'
set xlabel "Date"
set ylabel "Light"
set title "Illumination"
plot "/tmp/data" using 1:3 title "" with lines
"""
GRAPH_HTML = """<html>
<head>
<link rel="stylesheet" type="text/css" href="/plug.css">
<title>Graph of light in my room</title>
</head>
<body>
<h1>Graph of light in my room</h1>
The following data is obtained by a SheevaPlug accessing an Arduino.
<img src="/graph.png">
Note: the light is in arbitrary units 0-1023
<p>
For more details see <a href="http://arcfn.com">http://arcfn.com</a>.
</body>
</html>"""
# The web server. Supports /graph (page containing the graph)
# and static web pages
class MyHandler(SimpleHTTPRequestHandler):
def do_GET(self):
if self.path == '/graph':
return self.graph()
# Static file
return SimpleHTTPRequestHandler.do_GET(self)
# Generate and display the graph
def graph(self):
g = os.popen('gnuplot', 'w')
print >>g, GNUPLOT_CMD
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write(GRAPH_HTML)
# Read data from Arduino serial port a line at a time
# and dump to file with timestamps
class Arduino(threading.Thread):
def run(self):
f = open('/tmp/data', 'a')
# Port may vary from /dev/ttyUSB1
self.ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=10)
self.ser.flushInput()
old_timestamp = None
while 1:
data = self.ser.readline().strip()
if data:
timestamp = time.strftime("%m/%d/%Y %H:%M", time.localtime())
if timestamp != old_timestamp:
# Only log once per minute
print >>f, timestamp, data.strip()
old_timestamp = timestamp
f.flush()
def main():
ard = Arduino()
ard.start()
server = HTTPServer(('', 80), MyHandler)
print 'Starting server'
server.serve_forever()
if __name__ == '__main__':
main()
Python n'est pas un langage difficile à apprehender.
Il y a du nouveau, c'est pas encore çà, mais j'avance
apprendre Python çà prend du temps. Je décris ma démarche, çà peut servir à d'autre
j'ai installé Python (la version 2.7), la dernière version n'est semble t'il pas compatible avec le module pyserial-2.4 (apparemment l'équivalent de Python-serial, ce dernier ne marchant pas pour mac osx)
Donc dans la fenêtre shell, en tapant le code ligne par ligne, que tu m'as indiqué
import serial
ser = serial.Serial('/dev/tty.usbmodem5d11',9600)
while 1:
line = ser.readline()
print line
tty.usbmodem5d11 étant la bonne adresse; ttyUSB0 correspondant à linux
et en ayant fermé Arduino (sinon il y a interférence), j'obtiens mes T°.
...
Je poursuis demain, il est tard