|
@ -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. |
|
|
|
|
|
|
|
|
|
|
|
![BeagleBone Black y sus LED's de usuario](bbled.png) |
|
|
|
|
|
|
|
|
|
|
|
## 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 |
|
|
|
|
|
``` |