Upgrade to Pro — share decks privately, control downloads, hide ads and more …

All your pins are belong to us - Python meets Arduino

All your pins are belong to us - Python meets Arduino

Introducción a las posibilidades de control de Arduino desde Python - Lightning Talk presentada en el grupo de usuarios de Python Madrid (Abr '14)

More Decks by Alejandro Guirao Rodríguez

Other Decks in Programming

Transcript

  1. All your pins are belong to
    us
    Python meets Arduino
    Alejandro Guirao
    https://github.com/lekum

    View Slide

  2. ¿Qué es Arduino?
    ● Plataforma open-source hardware para
    prototipar
    ● El modelo más común es Arduino UNO
    ● Está basado en un microcontrolador AVR
    Atmel de 8 bits
    ● Maneja pines de I/O digitales y analógicos
    (PWM)
    ● Alimentación por jack o USB
    ● Se programa mediante USB
    ● Se puede comunicar con sistemas externos
    mediante protocolo UART TTL a través de
    USB

    View Slide

  3. ¿Cómo se programa Arduino?
    ● Tiene un IDE “oficial” que incluye todo el proceso de compilación y carga
    ○ Alternativa -> pip install ino
    ● Se programa en lenguaje C / C++
    ● “Batteries included”
    ○ Funciones de gestión de los pines, trigonométricas y matemáticas,
    de temporización e interrupciones y de comunicación
    ○ Muchas librerías para manejar HW (LCDs, servos, GSM, WIFI..)

    View Slide

  4. “Hola Mundo” - LED que parpadea

    View Slide

  5. ¿Python?
    NO podemos ejecutar código Python en Arduino

    View Slide

  6. ¡Pero podemos controlarlo!
    Basándonos en la comunicación serie USB,
    podemos implementar un protocolo de
    comunicación y control

    View Slide

  7. Protocolo “ad hoc”
    Implementar un sencillo protocolo “ad hoc” de
    comunicación entre los dos sistemas
    ● Desde el sketch
    ○ Se envían datos al sistema externo
    ○ Se leen las respuestas en una región del bucle principal
    ● Desde el sistema externo
    ○ Comunicación en Python (pySerial)
    Primera aproximación

    View Slide

  8. Ejemplo: LED que parpadea

    View Slide

  9. Protocolo “ad hoc”
    Es el tipo de integración es especialmente adecuada
    cuando hay ciertos elementos en el flujo del sketch
    ● Librerías de Arduino
    ● Uso del HW del microprocesador (registros, timers,
    interrupciones)
    ● Partes del código que requieren de una temporización muy
    exigente

    View Slide

  10. Protocolo “ad hoc”
    Cuando la complejidad del protocolo empieza a crecer de
    manera preocupante….
    … es señal de que debemos adoptar otra estrategia
    void loop() {
    // Check if characters available in the buffer
    if (Serial.available() > 0) {
    operation = Serial.read();
    delay(wait_for_transmission); // If not delayed, second character is not correctly read
    mode = Serial.read();
    pin_number = Serial.parseInt(); // Waits for an int to be transmitted
    if (Serial.read()==':'){
    value_to_write = Serial.parseInt(); // Collects the value to be written
    }
    switch (operation){
    case 'R': // Read operation, e.g. RD12, RA4
    if (mode == 'D'){ // Digital read
    digital_read(pin_number);
    } else if (mode == 'A'){ // Analog read
    analog_read(pin_number);
    } else {
    break; // Unexpected mode

    View Slide

  11. Control del flujo desde Python
    ● Programar el flujo en un sistema externo
    ○ Llamadas a funciones para gestión de los recursos
    de Arduino
    ■ I/O en pines
    ● El sketch es un bucle de lectura / escritura por el
    puerto serie
    ○ Protocolo bidireccional de comunicación

    View Slide

  12. Soluciones existentes
    ● pyFirmata
    ○ Sketch muy complejo
    ○ Potente y completa
    ○ ¡No funciona en Python3 !

    View Slide

  13. LED que parpadea con pyFirmata

    View Slide

  14. Soluciones existentes
    ● Python Arduino Command API
    ○ ¡No funciona en Python3 !

    View Slide

  15. Pero es que me gusta Python3...
    Solución: desarrollar una librería compatible
    con Python3 muy sencilla para control de I/O
    de pines
    https://github.com/lekum/pyduino

    View Slide

  16. Demo: temperature_sensor.py

    View Slide

  17. For great justice! (Gracias ^_^)

    View Slide