Aller au contenu


Photo
- - - - -

Gestion des touches SSH Raspberry Pi / Arduino


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

#1 bypbop

bypbop

    Habitué

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

Posté 25 décembre 2019 - 03:30

Bonjour à tous,

Je déterre un projet robotique que j'avais laissé de coté depuis un bout de temps ...

 

Voilà je me connecte à mon robot en SSH sur la RPi et j'envoie les informations à une Arduino 1280 en UART pour la gestion des moteurs ...

J'aimerais coder un petit exécutable que je lance en ssh pour avoir accès au flèche de mon clavier et envoyer la trame via UART.

 

Quelle langage utiliser pour faire simple ?

 

Bien à vous,

Bypbop



#2 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 25 décembre 2019 - 04:01

Salut. Pour faire ça, je fais une petite interface web hébergée sur le pi directement. Tu peux le faire en PHP. Perso, je préfère nodeJS.



#3 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 969 messages
  • Gender:Male
  • Location:Anglet

Posté 25 décembre 2019 - 04:02

Pas exactement ce que tu demandes mais si tu ne veux pas tout refaire toi même et que ça te convient tu peux utiliser vigibot pour envoyer des trame en Uart... Simple Rapide et Gratuit. 
 

https://www.robot-ma...ot-sur-vigibot/

 

https://www.robot-ma...cation-example/


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#4 bypbop

bypbop

    Habitué

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

Posté 25 décembre 2019 - 04:03

Merci Path mais je prefere le faire pour l'instant sans interface Graphique



#5 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 25 décembre 2019 - 04:05

J'ai peut-être pas compris ce tu veux faire exactement :)



#6 bypbop

bypbop

    Habitué

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

Posté 25 décembre 2019 - 04:07

Me connecter en SSH à ma RPI et en console utiliser les touches pour dirriger mon robot ...

Pour cela j'ai besoin de gerer les touches et envoyer un trame uart à mon arduino qui est connectée à ma RPI via UART



#7 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 25 décembre 2019 - 04:47

donc ce qu'il te faut c'est un petit programme qui se lance en ligne de commande, qui lit stdin (le clavier) et qui écrit des trucs sur un port série.

: ) Tu peux même écrire des messages sur l'écran. C'est le début d'une interface en mode texte.

Et bien tu peux faire ça dans n'importe quel langage.

 

Je me souviens aussi avoir vu passer cette idée. Mais je trouve pas ça très beau. C'est de faire 4 petits programmes qui s'appellent z, q, s et d. Et, pour utiliser le z, il faut taper z + entrée. Bof.



#8 bypbop

bypbop

    Habitué

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

Posté 25 décembre 2019 - 08:03

je regarde pour faire ça en C du coup ...

j'ai trouvé ceci qui à l'air interessant : http://pficheux.free.fr/articles/lmf/serial/



#9 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 26 décembre 2019 - 12:27

C'est compliqué. À mon avis.

Pour faire parler un raspberry et un arduino via USB, en python, c'est qq lignes.

https://www.robot-ma...no-uno-via-usb/



#10 bypbop

bypbop

    Habitué

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

Posté 26 décembre 2019 - 01:23

Voilà je fais ça sous codeblocks sous windows :

 

Je vous préviens c'est la première fois que je transfère un exe vers une RPI donc soyez indulgent !  :Gigakach_01:

 

alors pour l'instant j'ai juste codé la gestion des touches il faudra surement adapter à Linux ...

#include<stdio.h>
#include <stdlib.h>
int caractere;
int continuer = 1;
int main (void)
{
printf("Appuyer sur Q pour Quitter le programme\n");
printf("Appuyer sur les flèches de navigation pour dirriger KBOT.\n");
  while(continuer==1)
  {
  caractere = getch ();

      if(caractere==0 || caractere==224) {
      caractere = getch() ; // 2nd code récupéré
                switch (caractere) {
                case 72:
                printf ("Touche UP\n");
                break;

                case 80:
                printf ("Touche DOWN\n");
                break;

                case 75:
                printf ("Touche LEFT\n");
                break;

                case 77:
                printf ("Touche RIGHT\n");
                break;

                }

    }
    else {
    continuer = 0;
    }

}
return 0;
}

qd je compile sous windows je recupère mon .exe et si je fais un test en le copiant sur mon Rpi dans un repertoire partagé ...

je fais un chmod u+x TestClavier.exe

ensuite je fais ./TestClavier.exe et là j'ai ; ./TestClavier.exe: cannot execute binary file
 
Pourquoi cela ?
 
Bien à vous,
Bypbop


#11 bypbop

bypbop

    Habitué

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

Posté 26 décembre 2019 - 01:25

J'aurais pu faire le test avec un simple hello word ... :thank_you:



#12 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 26 décembre 2019 - 01:30

: )

 

Je crois qu'il faut le compiler sur le pi. Linux ne sais pas exécuter des programmes fait pour windows.

 

Si je peux me permettre ce conseil : ne prend pas un langage compilé.



#13 bypbop

bypbop

    Habitué

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

Posté 26 décembre 2019 - 01:40

ahh merci je pensais que comme c'etait en C cela ne posait pas de problème ...

 

 

 

Si je peux me permettre ce conseil : ne prend pas un langage compilé.

 

Pourquoi ?



#14 bypbop

bypbop

    Habitué

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

Posté 26 décembre 2019 - 01:47

Pour répondre à ton message précédent :

 

J'ai fait mes test en Python et cela marche bien je l'ai fait via usb0 et AMA0 en baissant les niveaux logiques ...

Mais j'aimerais maintenant piloter mon robot via ssh et avec la gestion des touches clavier avec un exe pour envoyer les commande via un premier terminal et un deuxième pour afficher les valeurs des capteurs ... dans un second temps

#!/usr/bin/env python

import time
import serial



#ser = serial.Serial('/dev/ttyUSB0', 9600)
ser = serial.Serial('/dev/ttyAMA0', 9600)
while 1 :
    print("Moteur Avant 10 sec")
    ser.write("A")
    time.sleep(10)
    print("Moteur Pause 3s")
    ser.write("B")
    time.sleep(3)
    print("Moteur Arriere 10 sec")
    ser.write("C")
    time.sleep(10)
    print("Moteur Pause 3s")
    ser.write("B")
    time.sleep(3)
ser.close()


#15 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 26 décembre 2019 - 02:13

En python, tu peux tenter des choses comme ça pour lire le clavier.

import sys

(pour python 3)
data = sys.stdin.buffer.read(1)

(pour python 2)
data = sys.stdin.read(1)

C'est de mémoire. Faut vérifier.



#16 bypbop

bypbop

    Habitué

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

Posté 26 décembre 2019 - 02:19

Ok merci Path je tente cela demain ... J'avais cherché un peu en python et de mémoire, il fallait utiliser les librairies graphiques 



#17 R1D1

R1D1

    Modérateur et Membre passionné

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

Posté 26 décembre 2019 - 11:36

Par contre, selon ce que tu veux afficher, passer en ssh n'est pas la meilleure solution: si tu dois ouvrir une connexion ssh en mode graphique pour afficher des plots de python, ça va ramer et potentiellement interférer avec les commandes que tu envoies (lag).
Avec javascript tu peux créer une petite page web et la rafraîchir quand tu as des nouvelles données, ça devrait être plus léger.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#18 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 262 messages
  • Gender:Male

Posté 26 décembre 2019 - 01:23

Le code que tu as écrit en C me semble aussi valable sous linux (raspberry pi ou autre).

En revanche, si tu veux utiliser le code sous linux, il vas falloir le compiler pour linux. Pour ça, le plus simple est de copier le code sur le raspberry pi et l'y compiler. (Une autre solution est ce qu'on appelle la cross-compilation, ie compiler sur un matériel du code destiné à un autre matériel, mais c'est plus compliqué à mettre en place).

Une dernière solution, c'est d'utiliser le programme "wine" sur le raspberry pi, qui permet d'exécuter un .exe de windows sous linux (mais ça ne marche pas pour tous les programmes et c'est moins efficace, du coup je te déconseille vivement cette solution si c'est toi qui doit écrire le programme).

 

 

Pour la question compilée ou pas, je ne serais pas aussi tranché que Path, les deux ont leus avantages et inconvénients :

Compilé (type C):

+détection d'un nombre important d'erreurs lors de la compilation (dans un code interprété comme le python, tu peux par exemple avoir une erreur de type (par exemple essayer de soustraire un entier à une chaine de caractères) et ne pas t'en rendre compte avant que le programme n'exécute ce bout de code, ce qui peut arriver au bout de centaines d'heures d'utilisation si ce code n'est exécuté que dans un cas très rare)

+ en général le code est plus rapide lors de l'éxécution

+ souvent gestion plus facile et optimisé de tâches bas niveau (registres, ...)

+/- code souvent plus long à écrire, car il faut donner toutes les informations à l’écriture du code (types, ...) : ça prend du temps, mais ça peut aussi t'en faire gagner en t'évitant des erreurs et en améliorant la clarté du code

- il faut re-compiler le code à chaque modification (si c'est un gros programme, ça peut prendre longtemps, surtout s'il n'est pas bien découpé en fichiers indépendants)

- il faut compiler le code séparément pour chaque type de plateforme sur laquelle on veut l'utiliser

 

Interprété (type Python):

+ le même "exécutable" peut être utilisé sur les différents systèmes sans modification (un simple copier-coller suffit)

+ le programme peut être modifié très rapidement, vu qu'il n'est pas nécessaire de recompiler

+ souvent le code est un peu plus simple et rapide à écrire

- un programme "interpréteur" (python par exemple) doit être installé pour pouvoir exécuter le programme

- souvent moins optimisé en terme de RAM utilisée et de vitesse d’exécution

 

 

En pratique, pour choisir, ça dépend de plusieurs éléments :

- le langage avec lequel tu es le plus à l'aise

- dans quel(s) langage(s) tu trouve les librairies qu'il te faut pour ton projet, et si tu les connais déjà

- le type de plateforme (sur micro-controleur type Arduino, les langages compilés sont souvent la meilleur voir la seule option, dès que tu as un système d'exploitation "normal", tu as libre choix)

- de la nécessité de faire tourner le code sur un grand nombre de plateformes différentes (si c'est le cas, alors un programme interprété facilite la diffusion)

- du type de code : si c'est du bas niveau (ie proche du matériel et/ou beaucoup d'opérations au niveau de la mémoire), alors un langage compilé type C est souvent plus efficace. Si en revanche ton code est de haut niveau (ie gestion d'objets "complexes"), alors un langage type python sera souvent plus concis

- de ce que tu veux optimiser : si tu veux optimiser le temps d'exécution ou la RAM utilisée, alors un langage compilé sera souvent mieux. Si tu veux plutôt optimiser le temps passer à écrire le programme, alors le Python sera je pense mieux (à maîtrise égale du langage)


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#19 bypbop

bypbop

    Habitué

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

Posté 26 décembre 2019 - 03:06

Merci pour ces réponses très précises !!!

De toute façon je vais essayer les deux :  interprété et compilé ...

 

Pour le compilateur sur la Pi : est ce que je peux installer le compilateur sur une machine debian en virtualbox que j'ai sur mon pc et copié ensuite l'executable sur la Pi par la suite via mon repertoire partagé ?

 

Bien à vous,

bypbop



#20 Path

Path

    Made By Humans

  • Modérateur
  • PipPipPipPipPip
  • 2 504 messages
  • Gender:Male
  • Location:Paris

Posté 26 décembre 2019 - 03:12

Regarde si tu as gcc installé sur ta pi.

Tu peux compiler directement sur la pi. Pas besoin d'une machine virtuelle.

Pour compiler : gcc TestClavier.c -o TestClavier

 

PS. Tu noteras qu'il n'y a plus l'extension .exe






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

0 members, 0 guests, 0 anonymous users