PyConFR 2015

Marre de faire du C++ avec Arduino?

image

Marre de faire du C++ avec Arduino?

image

Faites du MicroPython sur une pyboard!

image

Qui suis-je ?

  • Arthur Lutz @arthurlutz
  • Logilab
  • Plutôt software que hardware
  • Apprenti en éléctronique

Qu'est-ce Micropython ?

  • Réécriture en C de python 3.4 pour microcontrôlleur (ou systèmes contraints)
  • sous-ensemble de la librairie standard (sys, time, struct)
  • le reste de la libraire standard est implémenté sous forme de modules indépendants (micropython-lib)

Qu'est-ce que la pyboard?

  • Carte de référence avec micropython qui tourne directement sur le microcontrôlleur
  • Open Hardware

image

Motivation

  • Language haut niveau avec accès materiel bas niveau
  • Basse consommation
  • Matériel entre l'arduino et la raspberry pi

Historique projet

  • novembre 2013 kickstarter par Damien George
  • Objectif : 15'000 £
  • Atteint : 100'000 £
  • Début 2014: production de 3'000 cartes
  • Fin 2014 : production d'une nouvelle serie de 3'000 cartes

Specs

  • STM32F405RG: 192k RAM, 1M ROM, 168MHz, Cortex M4F
  • USB micro connecteur
  • Lecteur Micro carte SD
  • Accéléromètre 3-axes (MMA7660)
  • Horloge temps réel, 4 LEDs, 2 interrupteurs
  • 30 GPIO
  • Filesystème interne ”/flash” et ”/sd”

Utilisation

  • shell python - REPL (screen /dev/ttyACM0)
  • système de fichier sur la flash (115k !!)
  • carte SD avec boot.py pour "distribuer" son programme
  • plusieurs modes possible (port serie + disque, port serie + souris)

Python ?

  • toute la syntaxe python 3.4 (y compris classes, exceptions, "with", "yield from", etc.)
  • optimisations inspirées de PyPy
  • module pyb pour acceder au matériel
  • inline assembler

Exemples de code

from pyb import LED
led = LED(1) # red led
led.toggle()
led.on()
led.off()

Démo

Tourne aussi sur ...

  • unix !
  • ESP8266
  • teensy 3.1
  • etc

ESP8266

image

Exemple de code

>> import esp
>> # Connect to a WiFi network.
>> esp.connect('YOUR WIFI SSID NAME', 'YOUR WIFI SSID PASSWORD')
>> # Define function to print data received from socket.
>> def socket_printer(socket, data):
..    print(data)
>> # Create a socket and setup the print function.
>> soc = esp.socket()
>> soc.onrecv(socket_printer)
>> soc.connect(('192.168.0.12', 80))
>> soc.send('GET /testwifi/index.html HTTP/1.0\r\n\r\n')
b'HTTP/1.1 200 OK\r\n...'

Monde réel

  • communauté bien plus petite que Arduino
  • "drivers" pour quelques periphériques
  • projets de robots
  • projets pédagogiques
  • voir aussi les projets de javascript sur microcontroller (espruino)

WiPy

micropython + wifi : wipy

image

Fin

  • Questions ?
  • Plus de démos ?
  • Plus de temps ?

    Contact : @arthurlutz