Aller au contenu


Photo
- - - - -

Raspberry Pi et programmation


  • Veuillez vous connecter pour répondre
18 réponses à ce sujet

#1 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 20 août 2013 - 08:50

Bonjour à tous cela fait quelques jours que je découvre la raspberry Pi. Je me familiarise tt doucement avec un environement sous linux car pas encore à l'aise mais ca vient ;-)

Voila je vais l'installer sur mon robot et la faire communiquer avec mon arduino pour l'instant via un convertisseur 3.3V > 5V

Je vais coder un petit serveur TCP pour recevoir du texte envoyer depuis mon Pc.

- Je voulais savoir quel langage utilisé. J'ai que l'on pouvez utiliser le Python ..

Que me conseillez vous sachant que je suis débutant sous l'environnement Linux ?

- Ensuite je me demande si je peux coder le serveur sur mon Pc windows et transferer directement sur la raspberry ?

Cordialement,
bypbop

#2 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 20 août 2013 - 10:06

Je vais coder un petit serveur TCP pour recevoir du texte envoyer depuis mon Pc.

- Je voulais savoir quel langage utilisé. J'ai que l'on pouvez utiliser le Python ..

Que me conseillez vous sachant que je suis débutant sous l'environnement Linux ?

- Ensuite je me demande si je peux coder le serveur sur mon Pc windows et transferer directement sur la raspberry ?


C'est pas parce que tu es débutant en linux que tu dois prendre des pincettes pour coder. Il suffit de choisir le langage dans lequel tu es le plus à l'aise (de vérifier que c'est compatible linux) et c'est parti !
Le C++ est un très bon choix. Si tu connais javascript, un serveur node.js te permettra de mettre en place un serveur TCP, websocket ou http en 2 coup de cuillères à pots. Quant à python, je n'ai jamais essayé donc je ne peux pas te dire.
Evite juste java au possible : la jvm bouffe énormément de ressources sous RPi. J'ai déjà essayé, ça marche, mais c'est pas le mieux.

Pour coder sous windows, pourquoi pas. Mais tu devras compiler sous la Rpi pour que ça fonctionne dessus !
Fais juste attention en codant sous windows de ne pas utiliser des fonctions non portables !
Le plus sur serait d'installer une machine virtuelle linux sur ton PC et de coder sous linux (je te conseil linux mint pour débuter. C'est basé sur ubuntu (la distrib la plus répandue) et c'est une réactif au niveau du serveur graphique)

Mon site internet : http://ferdinandpiette.com/


#3 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 20 août 2013 - 10:58

C'est pas parce que tu es débutant en linux que tu dois prendre des pincettes pour coder. Il suffit de choisir le langage dans lequel tu es le plus à l'aise (de vérifier que c'est compatible linux) et c'est parti !
Le C++ est un très bon choix. Si tu connais javascript, un serveur node.js te permettra de mettre en place un serveur TCP, websocket ou http en 2 coup de cuillères à pots. Quant à python, je n'ai jamais essayé donc je ne peux pas te dire.
Evite juste java au possible : la jvm bouffe énormément de ressources sous RPi. J'ai déjà essayé, ça marche, mais c'est pas le mieux.

Pour coder sous windows, pourquoi pas. Mais tu devras compiler sous la Rpi pour que ça fonctionne dessus !
Fais juste attention en codant sous windows de ne pas utiliser des fonctions non portables !
Le plus sur serait d'installer une machine virtuelle linux sur ton PC et de coder sous linux (je te conseil linux mint pour débuter. C'est basé sur ubuntu (la distrib la plus répandue) et c'est une réactif au niveau du serveur graphique)



Merci bcp j'avance bien je reste sur le Python ca ressemble au php en fait (interpreter ligne par ligne). Dès que le script serveur fonctionne bien je te tiens au jus pour le transfert sur la raspberry.

Encore merci pour ton aide.
Cordialement,
Bypbop

#4 Gyro49

Gyro49

    Habitué

  • Membres
  • PipPip
  • 246 messages
  • Gender:Male
  • Location:Angers, France

Posté 21 août 2013 - 03:42

Bonjour,

Je suis sur le même principe sauf la communication entre la RPi et l'arduino (câble usb).

En ce qui concerne ma programmation, je suis sous Python.

Fonctionnement
Création d'un répertoire partagé sous samba sur la RPi
Rédaction du programme sur le PC avec Notepad++ via le lecteur réseau si dessus.

Je lance le programme sous SSH avec connexion wifi

La RPi est alimenté par USB ou pile 9 v si le robot se déplace.

A+

#5 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 21 août 2013 - 09:04

Merci pour ces infos. Je suppose que tu passes par un adaptateur USB TTL ?
Comme je n'ai pas reçu encore mon convertisseur logique je ferais ptete un test ce weekend avec le mien.

Bonne idée le partage : je n'y pas pensé du tt ;-)

Cordialement,
bypbop

#6 Gyro49

Gyro49

    Habitué

  • Membres
  • PipPip
  • 246 messages
  • Gender:Male
  • Location:Angers, France

Posté 21 août 2013 - 11:45

Je n'utilise pas d'adaptateur que du directe avec une UNO et ou une NANO

http://www.doctormonk.com/2012/04/raspberry-pi-and-arduino.html

Mais je vais passer à l'I2C pour mon prochain projet.

#7 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 21 août 2013 - 11:55

Ahh ok super la raspberry c'est clair et encore plus simple ...
Je fais le test ce weekend

Cordialement,
bypbop

#8 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 22 août 2013 - 09:42

Bonjour à tous,

@ Gyro49 : Qu'as tu utilisé en Python comme méthode pour envoyer de ton serveur à l'arduino ?
si tu as un exemple de code sur le port com il est le bien venu. Pour l'instant j'ai fait mon client et serveur tcp.

Cordialement,
bypbop

#9 Gyro49

Gyro49

    Habitué

  • Membres
  • PipPip
  • 246 messages
  • Gender:Male
  • Location:Angers, France

Posté 22 août 2013 - 10:43

J'ai vraiment suivi le doigt sur la couture du pantalon le tutoriel du lien ci dessus avec un mixage d'un autre tuto

Donc l'arduino crache ses infos dans un :
Serial.print(valeur);

Et la Raspberry lit
pour la UNO
ser = serial.Serial('/dev/ttyACM0', 9600)

pour la NANO
ser = serial.Serial('/dev/ttyUSB0', 9600)

Pour connaître la valeur de son ciode il faute faire en ssh
ls /dev/tty*

A bientôt

#10 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 22 août 2013 - 11:04

Merci pour tte ces infos

J'essaye de faire un :
printf "A" > /dev/ttyAMA0
et je ne vois pas le tx et le rx de mon arduino clignoté ?

ps : elle est branché sur ma raspberry directement avec le cable usb comme toi ... et je suis en SSH dessus.


Mon lien 1

Mon lien 2

C'est une arduino mega 1280 : comment je peux etre sur sur quoi je tape ? (cf lien)
Cordialement,
bypbop

#11 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 22 août 2013 - 11:53

J'essaye de faire un :

printf "A" > /dev/ttyAMA0
et je ne vois pas le tx et le rx de mon arduino clignoté ?

C'est du code python ? Selon la manière dont tu utilises la liaison série, il y a des histoires de "\n" (caractère de fin de ligne) à rajouter à ton message pour que le client sache jusqu'où lire. Je ne suis pas au point sur la question, mais as-tu essayé d'envoyer autre chose que ton "A" (des messages plus complexes) ?
Deuxième point trivial : que fait le programme sur ton Arduino ? Je pense que la visualisation des LEDs doit être lié aux instructions read/write appelées dans le programme.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#12 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 23 août 2013 - 12:01

Merci pour cette réponse : non pour l'instant je veux juste envoyer à mon arduino du texte connecté à ma raspberry en SSH.

J'ai fait un petit code sur mon arduino pour tester si la communication se fait bien entre Arduino et RasPi


int Ledpin = 13;
char incomingByte;

void setup() {
  Serial.begin(38400);
  pinMode(Ledpin, OUTPUT);
}

void loop() 
{

  while (Serial.available()>0)   
  {
  
    incomingByte = Serial.read();
    switch (incomingByte){
     case 'A':
     digitalWrite(Ledpin, HIGH);
     break;
     case 'B':
     digitalWrite(Ledpin, LOW);
     break;
     default:
     break;
    }
    
    
  }
  
}

Je le ferais ensuite en Phyton.

Cordialement,
bypbop

#13 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 23 août 2013 - 12:06

Mais je me demande quel port utilise sur ma raspberry.

Normalement je peux envoyer via ssh des données sur le port non ?

normalement je pense que le printf fait un retour chariot ...
Je le faisais comme ca sur ma foxboard en tt cas

Ps : J'ai evidemment testé le code sur l'arduino cela fonctionne bien
Cordialement,
bypbop

#14 Gyro49

Gyro49

    Habitué

  • Membres
  • PipPip
  • 246 messages
  • Gender:Male
  • Location:Angers, France

Posté 23 août 2013 - 08:09

Bonjour,

Avec le même code pour l'Arduino mais à 9600 pour le Serial, je ferais un code python :

#!/usr/bin/env python

import time
import serial


ser = serial.Serial('/dev/ttyAMA0', 9600)

while 1 :
[tab] ser.write("A")
[tab] time.sleep(3) #attends 3 seconde
[tab] ser.write("B")
[tab] time.sleep(3) #attends 3 seconde




Je suis au travail, je ne peux pas l'essayer mais il ressemble à celui que j'utilise.
Il faut vérifier les tabulations
Sinon un lien

ou un autre

Bonne chance

#15 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 23 août 2013 - 08:30

J'essaye de faire un :

printf "A" > /dev/ttyAMA0
et je ne vois pas le tx et le rx de mon arduino clignoté ?

C'est une arduino mega 1280 : comment je peux etre sur sur quoi je tape ? (cf lien)


Tu es sur qu'avec une arduino mega 1280 ton port série n'est pas /dev/ttyUSB0 ? Car j'en ai 3 et elles se mettent toutes en ttyUSBX.


Malédiction du Créatif :
Plus vous avez d’idées et moins vous arrivez à les structurer.


#16 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 23 août 2013 - 10:00

Oui c'est bien ca merci je me disais bien qu'on pouvez le faire.
La c'est /dev/ttyUSB0. Bizarre hier je n'avais pas de USB0 pourtant j'avais bien redemmarré ma raspberry. Enfin bref cela marche.


Cordialement,
bypbop

#17 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 24 août 2013 - 02:28

Bonjour @ tous,

@ Gyro49 : Voila j'avance bien en Python sur mon robot j'ai suivi tes consignes j'ai installer samba et creer un repertoire share. j'ai cree ce script que je mets ensuite sur ma raspberry

serverKBOT.py je l'ai rendu exécutable en faisant chmod +x serverKBOT.py

import serial
import time
ser=serial.Serial('/dev/ttyUSB0',38400)
while 1 :
    ser.write('A')
    time.sleep(3)
    ser.write('B')
    time.sleep(3)
ser.close()


qd je fais ./serverKBOT.py j'ai ceci :
root@raspberrypi:/media/share# ./serverKBOT.py
import.im6: unable to open X server `' @ error/import.c/ImportImageCommand/368.
import.im6: unable to open X server `' @ error/import.c/ImportImageCommand/368.
./serverKBOT.py: line 3: syntax error near unexpected token `('
'/serverKBOT.py: line 3: `ser=serial.Serial('/dev/ttyUSB0',38400)


Bizarrement : Quand je suis en shh je fais : python j'ai la console python >>> en shh
je tape ligne par ligne et cela marche.

As tu eu ce prb ?

ps : j'ai crée directement le script via le partage sous windows.

Cordialement,
bypbop

#18 bypbop

bypbop

    Habitué

  • Membres
  • PipPip
  • 273 messages
  • Gender:Male
  • Location:Lille

Posté 24 août 2013 - 02:36

J'ai trouvé il fallait faire : python serverKBOT.py

Par contre contre comment couper proprement l'execution du script ?

Encore merci

Cordialement,
bypbop

#19 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 24 août 2013 - 06:09

J'ai trouvé il fallait faire : python serverKBOT.py

Par contre contre comment couper proprement l'execution du script ?

Encore merci

Cordialement,
bypbop


Ne pas faire de boucle infinie :D

Il faut prévoir une condition d'arrêt dans ta boucle : au lieu de boucler à l'infini, tu vérifies que certains critères sont remplis pour continuer. Par exemple, ça pourrait être avec une lecture clavier, l'appui sur un bouton, un signal particulier de l'Arduino, etc ...
Du coup, en ayant le contrôle sur la sortie de ton programme, tu peux désallouer la mémoire, les ports utilisés, etc : c'est ce qu'on appelle "proprement".
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users