[ev3dev × Python] Contrôle SSH (opération à distance avec clavier)

Cet article s'adresse à tous ceux qui souhaitent travailler avec ev3 en Python. Cette fois, j'aimerais utiliser le clavier pour la télécommande. Plus précisément, c'est comme appuyer sur la touche w pour avancer.

table des matières

  1. Quoi préparer 1 . SSH Control
  2. Glossaire

0. Quoi préparer

◯ ev3 (réservoir) + moteur M ◯ PC (code VS) ◯ bluetooth ◯ microSD ◯ Material (Il est recommandé de continuer en regardant ceci.) ◯ Site de référence: SSH Control

1.SSH Control

sshcontrol.py


#!/usr/bin/env python3

#Importez uniquement ce dont vous avez besoin
import termios, tty, sys
from ev3dev2.motor import OUTPUT_A,OUTPUT_B,OUTPUT_C,MoveTank,MediumMotor

#Génération d'instance
tank_drive = MoveTank(OUTPUT_A,OUTPUT_B)
m_c = MediumMotor(OUTPUT_C)

#Définir une fonction pour obtenir la touche enfoncée
def getch():
    #Obtenir un descripteur de fichier d'entrée standard
    fd = sys.stdin.fileno()
    #Obtenir les attributs de terminal du descripteur de fichier
    old_settings = termios.tcgetattr(fd)
    #Évitez d'appuyer sur la touche Entrée
    tty.setcbreak(fd)
    #Recevoir les caractères tapés sur le clavier
    ch = sys.stdin.read(1)
    #Restaurer les attributs de terminal du descripteur de fichier
    termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
    #ch(character =Dans ce cas, la touche enfoncée)rends le
    return ch

#==============================================
#Définir la fonction qui entraîne le moteur M
def fire():
   m_c.on(80)
#==============================================
#Définir une fonction pour que le réservoir avance
def forward():
   tank_drive.on(80,80)
#==============================================
#Définir une fonction pour que le réservoir recule
def back():
   tank_drive.on(-80,-80)
#==============================================
#Définir une fonction pour que le réservoir tourne à gauche
def left():
   tank_drive.on(80,50)
#==============================================
#Définir une fonction pour que le réservoir tourne à droite
def right():
   tank_drive.on(50,80)
#==============================================
#Définir une fonction qui arrête tous les moteurs
def stop():
   tank_drive.stop()
   m_c.stop()
#==============================================

#boucle infinie
while True:
   #getch()Remplacez la valeur renvoyée par
   k = getch()
   #k(Touche enfoncée)Afficher
   print(k)
   
   #Déterminer le mouvement correspondant à la touche enfoncée
   if k == 'w':
      forward()
   if k == 's':
      back()
   if k == 'd':
      right()
   if k == 'a':
      left()
   if k == 'f':
      fire()
   #Si la touche enfoncée est la touche d'espace
   if k == ' ':
      stop()
   if k == 'q':
      exit()

** Point **: Un programme qui acquiert la touche enfoncée et la commande à distance avec SSH

** Point **: exécution du programme

  1. Cliquez avec le bouton droit sur ev3dev avec le voyant vert allumé et appuyez sur Ouvrir le terminal SSH.

  2. Entrez ssh robot @ ev3dev.local.

  3. Un mot de passe vous sera demandé, alors entrez maker.

  4. Tapez pwd pour voir le répertoire courant. (Localisation actuelle)

  5. Utilisez cd directory pour vous déplacer vers le répertoire où votre programme existe! (Le répertoire est un dossier)

  6. Une fois déplacé, tapez nom du programme python3.py et appuyez sur Entrée.

  7. L'écran du bloc intelligent ne change pas, mais il peut être exécuté.

1. Glossaire

Je pense qu'il y avait beaucoup de mots que je n'ai pas compris cette fois, alors je vais les expliquer brièvement.

SSH : Un mécanisme pour se connecter à d'autres ordinateurs (principalement des serveurs) via un réseau et les faire fonctionner à distance. Lors de la communication, les informations traitées sont cryptées.

◯ ** module termios **: Interface de contrôle de terminal de bas niveau.

· ** Terminal **: La partie qui gère l'entrée et la sortie des informations. Un périphérique qui effectue une entrée / sortie et une communication avec l'ordinateur principal.

·interface Une partie commune qui relie différents types de choses.

◯ ** module tty **: Un ensemble de fonctions pratiques pour les opérations générales de contrôle du terminal.

・ ** tty **: Abréviation qui signifie n'importe quel terminal texte. Fait référence à ** émulateur de terminal ** etc. via un pseudo dispositif de terminal dans un système de fenêtre.

・ ** Terminal texte **: Dispositif d'entrée / sortie pour la saisie et l'affichage de texte (chaîne de caractères)

・ ** Émulateur de terminal **: Logiciel qui fonctionne comme un terminal.

· ** Les fonctions **: Une collection de fonctions

◯ ** Descripteur de fichier **: Descripteur de fichier, fd. Une marque attribuée au fichier (chemin d'accès) pour identifier le fichier

·Fichier : Que peut lire et écrire des données sous forme de chaîne d'octets

・ ** Chaîne d'octets **: Une chaîne d'octets est un ensemble de données dans lequel des données à 1 octet constituées d'un motif de bits arbitraire sont organisées sans format ni signification spécifiques tels que des caractères ou des nombres.

・ ** Motif de bits **: Une combinaison de bits «0» et «1», qui est la plus petite unité qu'un ordinateur peut gérer.

·Travail à temps partiel : Il est abrégé en «B», qui est une unité qui exprime la quantité d'informations sur un ordinateur. Un octet est composé de huit unités appelées bits qui représentent 0 ou 1. Il est utilisé pour la mémoire et la capacité du disque, le code d'instruction minimum pour les programmes, etc.

◯ ** module sys **: Module de gestion des informations sur les interpréteurs Python et l'environnement d'exécution

· ** module **: (Python) Un fichier qui résume le code.

・ ** Bibliothèque standard Python **: Une collection de modules. Officiel Tutoriel de la bibliothèque standard

・ ** Interprète **: Logiciel qui fonctionne en lisant le code source ligne par ligne et en le convertissant en instructions pouvant être exécutées par un ordinateur. La vitesse de traitement n'est pas rapide car le programme est traité ligne par ligne.

stdin : Entrée standard depuis le clavier. entrée standard. Vous pouvez recevoir des caractères saisis au clavier. fd = 0

fileno : = file-number = file.No 0,1,2.. Fonction pour obtenir le descripteur de fichier (fd) d'un objet fichier Renvoie un descripteur de fichier entier Cette fois, Objet fichier = caractères tapés sur le clavier

tcgetattr(fd) : Renvoie une liste contenant les attributs de terminal du descripteur de fichier fd.

・ Tc = ordinateur terminal = ordinateur terminal ・ Obtenir = obtenir ・ Attr = attribut = attribut

setbreak() : Vous permet de saisir des caractères sans appuyer sur la touche Entrée. Au contraire, sans cela, il n'est pas possible de saisir avec un seul caractère.

read() : Lire le fichier

termios.tcsetattr(fd, when, attributes) : Extrayez les attributs de terminal du descripteur de fichier fd des attributs et définissez-les. attributes (= attributes) est une liste renvoyée par tcgetattr (). L'argument quand détermine quand un attribut change: -TCSANOW effectue des changements immédiats. -TCSADRAIN effectue des modifications après avoir transféré toute la sortie actuellement en file d'attente. · TCSAFLUSH transfère toutes les sorties actuellement en file d'attente, ignore toutes les entrées en file d'attente, puis effectue des modifications.

Article de référence: Détecter les frappes en Python (sans Entrée) Qu'est-ce qu'une entrée standard / une sortie standard? Liste des commandes du terminal Mac (basique) TERMIOS

finalement

Merci pour la lecture! !!

Je veux faire un meilleur article ◯ C'est plus facile à comprendre ◯ C'est difficile à comprendre ◯ C'est faux ◯ Je veux que vous expliquiez plus ici Nous apprécions vos opinions et suggestions.

Recommended Posts

[ev3dev × Python] Contrôle SSH (opération à distance avec clavier)
[Ev3dev] Faisons un programme de contrôle à distance par Python avec le protocole RPyC
[ev3dev × Python] Commande de moteur unique
Obtenir un événement de clavier avec python
écran et écran partagé avec connexion python et ssh au serveur distant
[ev3dev × Python] Contrôle de plusieurs moteurs
[ev3dev × Python] Affichage, voix, contrôle LED
Essayez la simulation de contrôle de fréquence avec Python
Contrôle exclusif avec fichier de verrouillage en Python
Enregistrement SSH manuel pour coreserver avec python
[Automation] Manipulez la souris et le clavier avec Python
FizzBuzz en Python3
Connectez-vous à un serveur distant avec SSH
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Interpréteur à distance PyCharm par SSH (WSL2, venv, pyenv)
Intégrer avec Python
Jouez avec 2016-Python
Précautions lors du traitement des structures de contrôle dans Python 2.6
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Contrôlons les moteurs et capteurs EV3 avec Python
Installer le contrôle Python
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Construction de l'environnement de contrôle à distance Pepper-kun avec Docker + IPython Notebook
Ssh dans un environnement virtuel avec vscode Remote Development
Gestion des versions de Node, Ruby et Python avec anyenv
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Exécutez Python avec VBA
[ev3dev × Python] Capteur à ultrasons
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1
Apprenez Python avec ChemTHEATER
Exécutez prepDE.py avec python3
1.1 Premiers pas avec Python
Collecter des tweets avec Python
Binarisation avec OpenCV / Python
3. 3. Programmation IA avec Python