| @ -0,0 +1,104 @@ | |||||
| # Control de LED de usuario por medio de script en Python | |||||
| El objetivo de este script en Python es controlar uno de los LED's de usuario | |||||
| integrados en la BeagleBone Black por medio de los registros del sistema. | |||||
|  | |||||
| ## Header | |||||
| En la primera línea de nuestro script se añade una línea con la dirección de los binarios | |||||
| de Python, al momento en que se lea esta línea, sabrá como debe ejecutar el script | |||||
| sin que lo indiquemos en la terminal, junto con la librería para reconocer los | |||||
| argumentos de entrada en al terminal. De igual forma, se define la dirección del LED 3 | |||||
| dónde se encuentran los registros a modificar. | |||||
| ```python | |||||
| #!/usr/bin/python | |||||
| import sys #reconocer lo que hay en la terminal | |||||
| LED_PATH = "/sys/class/leds/beaglebone:green:usr3" | |||||
| ``` | |||||
| ## Funciones | |||||
| Se tienen dos funciones: *writeLED* y *removeTrigger*. writeLED utiliza la función *open* | |||||
| para abrir el archivo en el directorio definido anteriormente, como Python es un | |||||
| lenguaje interpretado no es necesario definir el puntero como en C o C++. Los métodos | |||||
| *.write()* y *.close()* escriben el valor que indiquemos y cierran los archivos de los registros. | |||||
| La función removeTrigger utiliza a la función writeLED para desactivar el trigger. | |||||
| ```python | |||||
| def writeLED(fileName, value, path=LED_PATH): | |||||
| """ | |||||
| Ayuda de la rutina | |||||
| writeLED(fileName, value, path=LED_PATH) | |||||
| """ | |||||
| fo = open(path + fileName, "w") | |||||
| fo.write(value) | |||||
| fo.close() | |||||
| return | |||||
| def removeTrigger(): | |||||
| writeLED("/trigger","none") | |||||
| return | |||||
| ``` | |||||
| ## Main | |||||
| Para tener accesso a los argumentos de la terminal usamos *sys*, junto con *argv* para obtener la cantidad y el valor de los mismos. | |||||
| Al obtener la longitud de argv, sabemos si el usuario ingresó el número correcto de argumentos | |||||
| el cuál es 1. | |||||
| ```python | |||||
| print("Starting App") | |||||
| if len(sys.argv)!=2: | |||||
| print("Incorrect number of arguments") | |||||
| sys.exit(2) | |||||
| ``` | |||||
| Se utiliza un ciclo if para seleccionar la acción del LED, comparando el valor | |||||
| de argumento en la terminal con unos comandos definidos: ***on***, ***off*** y ***blink*** | |||||
| Para prender o apagar el LED, se deshabilita el trigger y se modifica el registro de *brightness*. | |||||
| En el caso del parpadeo del LED, el trigger se modifica para activar el timer | |||||
| y se utilizan los registro de *delay_on* y *delay_off* para establecer | |||||
| el tiempo de encendido y apagado. | |||||
| ```python | |||||
| if sys.argv[1] == "on": | |||||
| print("LED on \n") | |||||
| removeTrigger() | |||||
| writeLED("/brightness", "1") | |||||
| print("LED3 on \n") | |||||
| elif sys.argv[1] == "off": | |||||
| print("LED off \n") | |||||
| removeTrigger() | |||||
| writeLED("/brightness", "0") | |||||
| print("LED3 off \n") | |||||
| elif sys.argv[1] == "blink": | |||||
| print("LED blinking \n") | |||||
| writeLED("/trigger", "timer") | |||||
| writeLED("/delay_on", "500") | |||||
| writeLED("/delay_off", "500") | |||||
| else: | |||||
| print("Wrong command!!!") | |||||
| print("Script done") | |||||
| ``` | |||||
| ## Ejecución | |||||
| Se cambian los permisos de nuestro script. | |||||
| ```bash | |||||
| sudo chmod u+x led.py | |||||
| ``` | |||||
| Y se ejecuta con cualquiera de los arguemntos mencionados anteriormente. | |||||
| ```bash | |||||
| sudo ./led.py blink | |||||
| ``` | |||||