Pro Yearly is on sale from $80 to $50! »

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)

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 ^_^)