¿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
¿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..)
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
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
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
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
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