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
  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
  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..)
  4. “Hola Mundo” - LED que parpadea

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

  6. ¡Pero podemos controlarlo! Basándonos en la comunicación serie USB, podemos

    implementar un protocolo de comunicación y control
  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
  8. Ejemplo: LED que parpadea

  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
  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
  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
  12. Soluciones existentes • pyFirmata ◦ Sketch muy complejo ◦ Potente

    y completa ◦ ¡No funciona en Python3 !
  13. LED que parpadea con pyFirmata

  14. Soluciones existentes • Python Arduino Command API ◦ ¡No funciona

    en Python3 !
  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
  16. Demo: temperature_sensor.py

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