Outils pour utilisateurs

Outils du site


marmakoide:arduino_physical_pixel_linux_python

Commander une Arduino depuis un PC via le port USB, Linux & Python

Dans ce tutorial, on va decouvrir

  • Comment envoyer des messages a une carte Arduino, depuis un PC, via le port USB
  • Comment recevoir ces messages sur l'Arduino
  • Comment faire ca sous Linux, en Python, avec un exemple aussi simple & minimal que possible

Concretement, un script en Python va envoyer le caractere H pour allumer la LED presente sur l'Arduino, et le caractere L pour l'eteindre. Utiliser Python plutot que C, C++ ou Java permet de s'epargner les problemes de compilation et d'avoir un code simple et compact.

Ce tutorial a de bonnes chances de marcher sous OSX avec tres peu de differences.

Necessaire

Vous avez besoin de

  • Une carte Arduino
  • Un cable USB pour brancher l'Arduino au PC
  • L'environnement de developement standard pour Arduino avec l'exemple PhysicalPixel (fournit avec l'environment de developement)
  • Python 2.7.x ou Python 3.x
  • Le module pyserial pour Python
  • Linux

Normalement, le module pyserial est dans les paquetages standards pour votre distribution : bien que pyserial ne soit pas un module de la librarie standard, c'est un module tres couramment utilise.

Voici le nom du paquetage pour pyserial pour les distributions Linux les plus courantes

  • Ubuntu ⇒ python-pyserial
  • Archlinux ⇒ python-pyserial (Python 3.x) ou python-serial (Python 2.7.x)
  • Debian ⇒ python-serial (Python 2.7.x) ou python3-serial (Python 3.x)

Le script Python

Voici le script Python que nous allons utiliser.

  • Copiez le script ci-dessous dans un fichier nomme serial-switch
  • Donnez le droit d'execution a ce fichier (chmod 744 serial-switch)
#!/usr/bin/env python
 
import os
import sys
import serial
import argparse
 
port_name = '/dev/ttyUSB0'
 
def get_port():
  port = serial.Serial()
  port.port = port_name
  port.baud_rate = 19200
  return port
 
def switch_on():
  port = get_port()
  port.open()
  port.write('H')	
 
def switch_off():
  port = get_port()
  port.open()
  port.write('L')	
 
def main():
  parser = argparse.ArgumentParser(description = 'Switch on/off the LED of an Arduino board with the PhysicalPixel sketch loaded')
 
  subparsers = parser.add_subparsers(title = 'subcommands',
                                     description = 'valid subcommands',
                                     help = 'additional help')
 
  cmd_parser = subparsers.add_parser('on', description = 'Switch the LED on')
  cmd_parser.set_defaults(func = switch_on)
 
  cmd_parser = subparsers.add_parser('off', description = 'Switch the LED off')
  cmd_parser.set_defaults(func = switch_off)
 
  args = parser.parse_args()
  args.func()
 
if __name__ == '__main__':
  main()

Etapes a suivre

  1. Branchez l'Arduino au PC avec le cable USB
  2. Demarrez l'environnement de developement standard Arduino
  3. Chargez l'exemple PhysicalPixel sur la carte Arduino
  4. Dans un terminal, dans le repertoire ou vous avez le script serial-switch
    1. Lancez la commande serial-switch on ⇒ la LED sur l'Arduino est allumee
    2. Lancez la commande serial-switch off ⇒ la LED sur l'Arduino est eteinte

Comment ca marche

  • Le programme pour Arduino PhysicalPixel ecoute le port USB
    1. Si le caractere L est recu, la LED sur le port 9 est eteinte
    2. Si le caractere H est recu, la LED sur le port 9 est allumee
  • Le script Python va
    1. Ouvrir le port USB /dev/ttyUSB0
    2. Configure le port pour communiquer a 19200 Bauds
    3. Envoyer le caractere L ou le caractere H

Le script est une ligne de commande, pour garder ce tutorial aussi minimal et court que possible. Dans le meme esprit, on utilise ici un exemple existant, PhysicalPixel.

Normalement, si vous avez une seule Arduino branchee sur votre PC, et rien d'autre qui ce comporte comme un port serie, elle devrait etre sous /dev/ttyUSB0. Sinon, essayez /dev/ttyUSB1, /dev/ttyUSB2, etc.

Pour aller plus loin

Pour etre sur de bien comprendre comment tout ca marche, rien de tel que des exercices:

  • Modifiez le script Python et le programme PhysicalPixel pour faire clignoter la LED, en plus de pouvoir l'allumer et l'eteindre
  • Branchez des LEDs, des moteurs sur l'Arduino et commandez les depuis votre PC
marmakoide/arduino_physical_pixel_linux_python.txt · Dernière modification: 2015/06/17 20:55 par marmakoide