You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.0 KiB

  1. # Control de LED de usuario por medio de script en Python
  2. El objetivo de este script en Python es controlar uno de los LED's de usuario
  3. integrados en la BeagleBone Black por medio de los registros del sistema.
  4. ![BeagleBone Black y sus LED's de usuario](bbled.png)
  5. ## Header
  6. En la primera línea de nuestro script se añade una línea con la dirección de los binarios
  7. de Python, al momento en que se lea esta línea, sabrá como debe ejecutar el script
  8. sin que lo indiquemos en la terminal, junto con la librería para reconocer los
  9. argumentos de entrada en al terminal. De igual forma, se define la dirección del LED 3
  10. dónde se encuentran los registros a modificar.
  11. ```python
  12. #!/usr/bin/python
  13. import sys #reconocer lo que hay en la terminal
  14. LED_PATH = "/sys/class/leds/beaglebone:green:usr3"
  15. ```
  16. ## Funciones
  17. Se tienen dos funciones: *writeLED* y *removeTrigger*. writeLED utiliza la función *open*
  18. para abrir el archivo en el directorio definido anteriormente, como Python es un
  19. lenguaje interpretado no es necesario definir el puntero como en C o C++. Los métodos
  20. *.write()* y *.close()* escriben el valor que indiquemos y cierran los archivos de los registros.
  21. La función removeTrigger utiliza a la función writeLED para desactivar el trigger.
  22. ```python
  23. def writeLED(fileName, value, path=LED_PATH):
  24. """
  25. Ayuda de la rutina
  26. writeLED(fileName, value, path=LED_PATH)
  27. """
  28. fo = open(path + fileName, "w")
  29. fo.write(value)
  30. fo.close()
  31. return
  32. def removeTrigger():
  33. writeLED("/trigger","none")
  34. return
  35. ```
  36. ## Main
  37. Para tener accesso a los argumentos de la terminal usamos *sys*, junto con *argv* para obtener la cantidad y el valor de los mismos.
  38. Al obtener la longitud de argv, sabemos si el usuario ingresó el número correcto de argumentos
  39. el cuál es 1.
  40. ```python
  41. print("Starting App")
  42. if len(sys.argv)!=2:
  43. print("Incorrect number of arguments")
  44. sys.exit(2)
  45. ```
  46. Se utiliza un ciclo if para seleccionar la acción del LED, comparando el valor
  47. de argumento en la terminal con unos comandos definidos: ***on***, ***off*** y ***blink***
  48. Para prender o apagar el LED, se deshabilita el trigger y se modifica el registro de *brightness*.
  49. En el caso del parpadeo del LED, el trigger se modifica para activar el timer
  50. y se utilizan los registro de *delay_on* y *delay_off* para establecer
  51. el tiempo de encendido y apagado.
  52. ```python
  53. if sys.argv[1] == "on":
  54. print("LED on \n")
  55. removeTrigger()
  56. writeLED("/brightness", "1")
  57. print("LED3 on \n")
  58. elif sys.argv[1] == "off":
  59. print("LED off \n")
  60. removeTrigger()
  61. writeLED("/brightness", "0")
  62. print("LED3 off \n")
  63. elif sys.argv[1] == "blink":
  64. print("LED blinking \n")
  65. writeLED("/trigger", "timer")
  66. writeLED("/delay_on", "500")
  67. writeLED("/delay_off", "500")
  68. else:
  69. print("Wrong command!!!")
  70. print("Script done")
  71. ```
  72. ## Ejecución
  73. Se cambian los permisos de nuestro script.
  74. ```bash
  75. sudo chmod u+x led.py
  76. ```
  77. Y se ejecuta con cualquiera de los arguemntos mencionados anteriormente.
  78. ```bash
  79. sudo ./led.py blink
  80. ```