[Ev3dev] Faisons un programme de contrôle à distance par Python avec le protocole RPyC

introduction

Cet article suppose que ev3dev est installé sur votre EV3 et que vous disposez d'une connexion SSH. Si vous n'avez pas créé l'environnement, reportez-vous à cet article.

mindstorm - contrôlons EV3 avec Linux! Installez le système d'exploitation ev3dev et la connexion SSH

Aperçu

RPyC (Remote Python Call) est un protocole pour appeler Python à distance. Avec RPyC, vous pouvez facilement appeler et utiliser Python installé sur EV3 à partir d'un programme Python sur votre PC de bureau (côté client). Jusqu'à présent, il était nécessaire de se connecter à SSH et d'éditer et d'exécuter des programmes Python à distance, mais avec RPyC, vous pouvez librement développer sur le client simplement en configurant un serveur RPyC sur EV3. Il est.

Environnement

Installez RPyC

Tout d'abord, installez la bibliothèque RPyC de Python du côté distant (EV3) et du côté client (PC de bureau, etc.).

robot@ev3dev:~$ sudo easy_install rpyc
Searching for rpyc
Reading https://pypi.python.org/simple/rpyc/
Best match: rpyc 3.3.0
Downloading https://pypi.python.org/packages/c5/b0/5425118bf8f209ebc863425acb37f49f71c7577dffbfaeaf0d80722e57c5/rpyc-3.3.0.zip#md5=f60bb91b46851be45363cd72e078e6ba
Processing rpyc-3.3.0.zip
Writing /tmp/easy_install-MDBKzw/rpyc-3.3.0/setup.cfg
Running rpyc-3.3.0/setup.py -q bdist_egg --dist-dir /tmp/easy_install-MDBKzw/rpyc-3.3.0/egg-dist-tmp-_uJbLx
Adding rpyc 3.3.0 to easy-install.pth file
Installing rpyc_registry.py script to /usr/local/bin
Installing rpyc_classic.py script to /usr/local/bin

Installed /usr/local/lib/python2.7/dist-packages/rpyc-3.3.0-py2.7.egg
Processing dependencies for rpyc
Searching for plumbum
Reading https://pypi.python.org/simple/plumbum/
Best match: plumbum 1.6.3
Downloading https://pypi.python.org/packages/50/15/f26f60e1bb82aabed7ff86f3fd2976784047f9a291c63ac9019086a69559/plumbum-1.6.3.tar.gz#md5=e0c588ba9271711fae3beb8c0511e8a9
Processing plumbum-1.6.3.tar.gz
Writing /tmp/easy_install-hcpumS/plumbum-1.6.3/setup.cfg
Running plumbum-1.6.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-hcpumS/plumbum-1.6.3/egg-dist-tmp-GirT6d
zip_safe flag not set; analyzing archive contents...
plumbum.__init__: module references __file__
plumbum.__init__: module references __path__
Adding plumbum 1.6.3 to easy-install.pth file

Installed /usr/local/lib/python2.7/dist-packages/plumbum-1.6.3-py2.7.egg
Finished processing dependencies for rpyc

Démarrez le serveur RPyC sur EV3

Tout d'abord, créez le fichier de script shell ci-dessous

rpyc_server.sh


#!/bin/bash
python `which rpyc_classic.py`

Donner l'autorisation d'exécution

robot@ev3dev:~$ chmod +x rpyc_server.sh

Démarrage du serveur

robot@ev3dev:~$ ./rpyc_server.sh
INFO:SLAVE/18812:server started on [0.0.0.0]:18812

Le reste peut être librement développé côté client.

Développement sur le client

À titre d'exemple, créons un programme dans lequel le moteur tourne tout en appuyant sur le capteur tactile. Connectez le moteur au port A et le capteur tactile au port 1. 1.jpg

Créez le programme suivant côté client.

rpyc_client.py


import rpyc
conn = rpyc.classic.connect('ev3dev') #Spécifiez le nom d'hôte ou l'adresse IP EV3
ev3 = conn.modules['ev3dev.ev3'] #Télécommande ev3dev.Importer ev3
m = ev3.LargeMotor('outA')
ts = ev3.TouchSensor('in1')

m.run_forever(speed_sp=300)

#Faites tourner le moteur pendant que le capteur tactile est enfoncé
while True:
  if ts.value() == 0:
    m.stop(stop_action="hold")
  else:
    m.run_forever(speed_sp=300)

En utilisant la bibliothèque rpyc de cette manière, il est possible de faire fonctionner le module du côté distant du côté client.

Lançons-le.

client@user:~$ python rpyc_client.py

Un tel journal est affiché du côté distant.

robot@ev3dev:~$ ./rpyc_server.sh
INFO:SLAVE/18812:server started on [0.0.0.0]:18812
INFO:SLAVE/18812:accepted 192.168.2.209:56985
INFO:SLAVE/18812:welcome [192.168.2.209]:56985

192.168.2.209 est l'adresse IP côté client. Vous pouvez voir que la connexion est correcte.

Lorsque j'ai appuyé sur le capteur tactile, le moteur a également tourné.

Résumé

J'ai eu l'impression que le protocole RPyC est assez léger et a peu de retard de communication. Il est assez facile de développer un programme localement.

référence

Document officiel python-ev3dev

Recommended Posts

[Ev3dev] Faisons un programme de contrôle à distance par Python avec le protocole RPyC
Faisons une interface graphique avec python.
Faisons un graphe avec python! !!
Faisons un jeu de shiritori avec Python
Faisons la voix lentement avec Python
Créez un framework Web avec Python! (1)
[ev3dev × Python] Contrôle SSH (opération à distance avec clavier)
Faisons un bot Twitter avec Python!
Créez un framework Web avec Python! (2)
Remplaçons UWSC par Python (5) Faisons un robot
[Jouons avec Python] Créer un livre de comptes de ménage
Essayez de créer un jeu simple avec Python 3 et iPhone
[Super facile] Faisons un LINE BOT avec Python.
Faites une loterie avec Python
Créons un client de socket Web avec Python. (Authentification par jeton d'accès)
Faisons une rumba distante [Matériel]
Faisons une rumba distante [Logiciel]
Faisons une rupture de bloc avec wxPython
Créer un système de recommandation avec python
Faisons un spacon avec xCAT
Faisons une discussion WEB en utilisant WebSocket avec AWS sans serveur (Python)!
[Python] Un programme qui crée des escaliers avec #
Faisons un langage simple avec PLY 1
[Python] Rendons matplotlib compatible avec le japonais
Faisons une IA à trois yeux avec Pylearn 2
Faisons un calcul de combinaison avec Python
Créez une application de bureau avec Python avec Electron
2.Faites un arbre de décision à partir de 0 avec Python et comprenez-le (2. Bases du programme Python)
J'ai essayé de communiquer avec un serveur distant par communication Socket avec Python.
[Python] Essayez de créer vous-même un programme de tri. (Tri sélectif, tri par insertion, tri par bulle)
Créer un bot Twitter Trend avec heroku + Python
Je veux faire un jeu avec Python
Essayez de créer un code de "décryptage" en Python
Contrôlons les moteurs et capteurs EV3 avec Python
Écrivons un programme Python et exécutons-le
Essayez de créer un groupe de dièdre avec Python
Faisons un module pour Python en utilisant SWIG
Lire ligne par ligne à partir d'un fichier avec Python
Si vous voulez créer un bot discord avec python, utilisons un framework
Faisons un saut dans l'industrie manufacturière en utilisant le Web en plus de Python
Combinez des chaînes répétitives en une seule avec des expressions régulières Python.
Faisons un outil de veille de commande avec python
[Pratique] Créez une application Watson avec Python! # 2 [Fonction de traduction]
[Pratique] Créez une application Watson avec Python! # 1 [Discrimination linguistique]
Créez un Slackbot simple avec un bouton interactif en python
Essayez d'incorporer Python dans un programme C ++ avec pybind11
Faire un point d'arrêt sur la couche c avec python
De l'achat d'un ordinateur à l'exécution d'un programme sur python
Facilitons un peu la gestion des dépendances avec pip
[Pour jouer] Essayez de faire de Yuma un robot LINE (Python)
Créer un système de recommandation avec python
Créer un outil de formatage CSV avec Python Pandas Py Installer
Créons une application Mac avec Tkinter et py2app
Essayez de créer une grille sphérique avec Rhinoceros / Grasshopper / GHPython
[Python] Supprimer en spécifiant une balise avec Beautiful Soup
[Python] Créez un fichier de distribution pour le programme Tkinter avec cx_Freeze
Qu'est-ce que Dieu? Créez un chatbot simple avec python
[Piyopiyokai # 1] Jouons avec Lambda: création d'un script Python
Utilisez des programmes Python avec le plugin de sortie exec_filter de fluentd