Raspberry Pi et programmation
#1
Posté 20 août 2013 - 08:50
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
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
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
Posté 21 août 2013 - 03:42
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
Posté 21 août 2013 - 09:04
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
Posté 21 août 2013 - 11:45
http://www.doctormonk.com/2012/04/raspberry-pi-and-arduino.html
Mais je vais passer à l'I2C pour mon prochain projet.
#7
Posté 21 août 2013 - 11:55
Je fais le test ce weekend
Cordialement,
bypbop
#8
Posté 22 août 2013 - 09:42
@ 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
Posté 22 août 2013 - 10:43
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
Posté 22 août 2013 - 11:04
J'essaye de faire un :
printf "A" > /dev/ttyAMA0et 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
Posté 22 août 2013 - 11:53
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) ?J'essaye de faire un :
printf "A" > /dev/ttyAMA0et je ne vois pas le tx et le rx de mon arduino clignoté ?
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.
#12
Posté 23 août 2013 - 12:01
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
Posté 23 août 2013 - 12:06
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
Posté 23 août 2013 - 08:09
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
Posté 23 août 2013 - 08:30
J'essaye de faire un :
printf "A" > /dev/ttyAMA0et 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
Posté 23 août 2013 - 10:00
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
Posté 24 août 2013 - 02:28
@ 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
Posté 24 août 2013 - 02:36
Par contre contre comment couper proprement l'execution du script ?
Encore merci
Cordialement,
bypbop
#19
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
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".
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users