Go Down

Topic: Demande d'aide python et ethernet - arduino (Read 1 time) previous topic - next topic

Fabinou30

Aug 12, 2012, 07:45 pm Last Edit: Aug 13, 2012, 12:00 pm by Fabinou30 Reason: 1
Salut à tous,
Voilà ayant suivis un tuto de skywodd sur son blog j'ai pus découvrir qu'on pouvait allumer ou éteindre des LEDs grâce à un script python.
Je me suis donc lancé et en ayant légèrement modifié le programme, j'ai pus afficher du texte à distance grâce à mon afficheur nokia 5110 et la librairie PCD8544.
Content certe de ce petit pas en avant, je souhaite désormais pouvoir recevoir les données d'un capteur (potentio,luminosité, n'importe en faite) branché sur l'arduino (broche A0) avec un script python.
C'est LA que j'ai besoins de vous car même en cherchant sur google, je ne trouve aucune aide à pars le fait d'avoir trouvé l'instruction socket recv et encore, je sais même pas si c'est celle qu'il faut. :smiley-sad-blue:
Si quelqu'un pouvais m'aider en python et arduino car c'est bien les deux codes qu'il me faut alors j'en serai reconnaissant. XD
Rien que de confirmer qu'il est possible de faire ce que je souhaite me rassurerais.
Merci beaucoup à vous.

Super_Cinci

Salut,

Je ne pourrai pas t'aider, à part te proposer de changer le titre de ton premier message en précisant le domaine dans lequel tu es (genre "[aide] python - arduino" ou pas loin). Le titre d'un topic est important dans ces cas-là... Il y a pas mal de sujets à lire, je pense qu'un titre aussi vague n'oriente pas les gens dans ton topic.

Cest tout ce que je peux faire pour toi... je n'utilise arduino qu'en électronique bassement matérielle et n'y connais rien en python...

Fabinou30


skywodd

Salut,

Bon déja vu comment tu expose la chose il faut que tu mettes en place un protocole de communication entre ton arduino et le script python.
(Tu as un tuto trés détaillé à ce sujet dans la partie tutoriel du forum)

Tu peut faire un truc simple, exemple :
Code: [Select]
$chaine_1;chaine_2;.....\n
($ -> début, \n -> fin, ; -> délimiteur)


Et des chaines du type :
Code: [Select]
clef=valeur

Exemple : Imaginons que tu as une température de 20.5°C, un potentiomètre à 512 et un capteur de luminosité à 100lux :
Code: [Select]
$temp=20.5;potar=512;lumiere=100

Côté arduino ça donnerai :
Code: [Select]
// déclaration des variables et obtention des valeurs
client.print("$temp=");
client.print(temperature);
client.print(";potar=");
client.print(potentiometre);
client.print(";lumiere=");
client.println(lumiere);


Côté python :
Code: [Select]
import socket

def socket_readline(s): # Fonction qui retourne une ligne complète
    ret = ''
    c = ''

    while c != '$': c = s.recv(1) # Attend le $ de début de ligne
       
    c = s.recv(1)
    while c != '\n' or c != '': # Lit jusqu'à la fin de ligne
        ret += c
        c = s.recv(1)

    return ret # Retourne la ligne

print "~ Client WebSensor ~"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.1.177", 1337))

while s: # Tant que le socket est ouvert
    ligne = socket_readline(s) # Lecture d'une ligne

    raw_data = ligne.split(';') # Découpage de la ligne en tableau avec ; comme séparateur
    couples = {} # tableau associatif final (vide)
    for couple in raw_data: # pour chaque cellules du tableau
        tmp = couple.split('=') # Découpage de la cellule avec = comme séparateur
        if len(tmp) != 2: continue # Si la taille du tableau != 2 (pas une cellule clef=valeur correcte) -> continue
        couples[tmp[0].strip()] = tmp[1].strip() # Sinon insertion dans le tableau final du couple clef = valeur

    print couples # Exemple d'affichage : { 'temp':'20.5', 'potar':'512', 'lumiere':'100' }
    # Exemple d'utilisation : print couples['temp'] -> affichera '20.5'

except KeyboardInterrupt:
    s.close()
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Fabinou30

#4
Aug 13, 2012, 08:34 pm Last Edit: Aug 13, 2012, 08:42 pm by Fabinou30 Reason: 1
merci car je sais désormais que c 'est possible.
Me reste désormais que quelques questions XD :
Dans ce code :
Code: [Select]
$chaine_1;chaine_2;.....\n
($ -> début, \n -> fin, ; -> délimiteur)

Tu expliques (d'ailleurs bien) les délimiteur.OK.
mais ici :
Code: [Select]
// déclaration des variables et obtention des valeurs
client.print("$temp=");
client.print(temperature);
client.print(";potar=");
client.print(potentiometre);
client.print(";lumiere=");
client.println(lumiere);

y'a 2 trucs que je pige pas déjà pourquoi les ; avant les variables et aussi, est-ce une erreur de frappe ou dois-je réellement supprimer le \n avant la fin du code ??

Et pour le python, comment je fais pour afficher les valeurs dans l'IDLE ??

skywodd


mais ici :
Code: [Select]
// déclaration des variables et obtention des valeurs
client.print("$temp=");
client.print(temperature);
client.print(";potar=");
client.print(potentiometre);
client.print(";lumiere=");
client.println(lumiere);

y'a 2 trucs que je pige pas déjà pourquoi les ; avant les variables et aussi, est-ce une erreur de frappe ou dois-je réellement supprimer le \n avant la fin du code ??

Les .print() se suivent sans \n (retour de ligne) donc tout est sur la même ligne, c'est à la fin le .println() qui ajoute un \n aprés le texte.


Et pour le python, comment je fais pour afficher les valeurs dans l'IDLE ??

Utilise la commande print, je t'ai fourni un exemple ;)

Tu devrais faire un tour sur les tuto de python avant de te lancer :
http://www.siteduzero.com/tutoriel-3-223267-apprenez-a-programmer-en-python.html
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Fabinou30

Merci skywodd je vais allez faire un tour sur le site du zéro.
@+

Go Up