Enregistrer sur mon disque les T° de 5 sondes DS18B20

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)

Merci pour vos futurs lumières,

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.

=(

Yep!

Je te confirme que cela est tout à fait possible. Soit tu passes par le shell, soit par l'intermédiaire d'un script en python, php, etc...

Si personne ne daigne te répondre, c'est que les réponses existent déjà au fil du forum...FAUT CHERCHER UN PEU MAN !!!

Par exemple, ce topic situé à deux rue du tiens... http://arduino.cc/forum/index.php/topic,55784.0.html
évoque la communication entre un pc et une Arduino.

Du côté de l'arduino, il s'agit des comandes Serial. Le port USB en est un.

@+

Zoroastre.

Salut,

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)

Gromain

Merci pour les pistes, je vais y travailler, en fait mon erreur était de chercher une instruction à placer directement dans le code. :expressionless:
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... :roll_eyes: mais il me semble qu'il fait un cheminement inverse au mien, il envoi un ordre depuis une interface web vers la carte...

Yep!

Super! Effectivement, Chicore travaille en sens inverse du tien...

En cherchant vite fait, j'ai trouvé deux trois liens qui pouront te servir de base.

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1263875972
http://www.jfkreuter.com/?p=9
http://www.mydarkmaterials.co.uk/2008/11/30/interfacing-php-with-the-arduino/

@+

Zoroastre.

Pour le moment après examen des trois liens que tu m'as communiqué, j'ai particulièrement cherché sur la piste du 1er lien "Arduino, PHP, and Apache"

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1263875972

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

Puis le code php

<?php
	$fp = fopen("/dev/tty.usbmodem5d11", "r");
	sleep(1);
	$data = fgets($fp);
	print $data;
	fclose($fp);
?>

Le code est simple à l'air simple, ouverture pour lecture; afficher; fermer
mais dans mon cas rien ne s'affiche :frowning:

Bon je continu de chercher ...

Yep!

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.

Ne faudrait-il pas que ton script php tourne en boucle par hasard ?

Gromain59:
Ne faudrait-il pas que ton script php tourne en boucle par hasard ?

Probablement, mais à la limite je peux faire un script qui le lance toutes les 30 mn, le temps de relevé un cycle de température, puis le fermer

zoroastre:
Yep!

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 :wink: 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 ? :frowning:

Bonjour,

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.

A+

Alain.

http://xmarc.free.fr/berlioux/electronique/boomerang/boomerang-fr.html

+1

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.

Gromain

mcAllan:
Bonjour,

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.

A+

Alain.

tu as réussi sur cette voie ?

macbidule:
tu as réussi sur cette voie ?

Oui, cela fonctionne parfaitement.
A+

Yep!

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" ???

@+

Zoroastre.

Yep! aussi !! et merci pour ton aide

zoroastre:
Yep!

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)

@+ macbidule

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 :smiley:

@+ macbidule

Yep!

Pour ma part, je travaille sous linux Debian :wink:

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.

@+

Zoroastre.

:smiley:
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

macbidule

T.jpg