¿Nos ayudas a pagar el Hosting?

Compartir en facebook Compartir en google+ Compartir en twitter Compartir en pinterest Compartir en linkedin

Crear programas de escritorio para usar el GPIO

Publicado en Abril de 2018

Nube personal con NextcloudLos programas de escritorio son aplicaciones que se lanzan desde un entorno de ventanas donde disponemos de teclado y ratón. Podremos interactuar con dichos programas proporcionando entrada de datos a través de dichos periféricos, pero si además podemos alterar el estado de los pines del GPIO de nuestra Orange Pi, ampliaremos las posibilidades hasta... ¿infinito?. Veamos una manera bastante sencilla de hacerlo a través de un interfaz estándar de Python, que, a pesar de no formar parte de dicha herramienta, es de muy fácil implementación.

Que necesitas:

Para esta prueba crearemos una aplicación que se podrá ejecutar en entornos de escritorio (Desktop) y a través de la que podremos cambiar el estado de los pines del GPIO pulsando sobre botones. Lo primero que necesitamos es tener Python instalado y la herramienta Tkinter. Para más información visita: https://wiki.python.org/moin/TkInter.

apt-get install python-tk

Como queremos interactuar con los pines del GPIO a través de Python, necesitaremos la librería correspondiente, en esta caso voy a usar PYA20. Para saber más sobre los pines del GPIO, lee este artículo y luego vuelve y sigue desde este punto. Si ya sabes todo lo necesario, instala la librería. Si no tienes instalado el paquete python-dev instálalo ahora:

sudo apt-get install python-dev

Descargamos la librería:

sudo git clone https://github.com/duxingkei33/orangepi_PC_gpio_pyH3.git

Accede a la carpeta recién creada e instala con:

sudo python setup.py install

Ahora vamos a escribir un archivo que creará un programa de escritorio con dos botones que cambiarán los estados de 2 pines del GPIO. El tercer botón cerrará el programa. Creamos un archivo llamado prueba.py en el directorio Desktop, con el código siguiente:

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# author    : "javier pérez santos para orangepiweb.es"
# credits   : "javier pérez santos, orangepiweb.es"
# copyright : "Copyright 2018, orangepiweb.es"

"""
   ___                             ____  ___        __   _
  / _ \ _ __ __ _ _ __   __ _  ___|  _ \(_) \      / /__| |__   ___  ___
 | | | | '__/ _` | '_ \ / _` |/ _ \ |_) | |\ \ /\ / / _ \ '_ \ / _ \/ __|
 | |_| | | | (_| | | | | (_| |  __/  __/| | \ V  V /  __/ |_) |  __/\__ \
  \___/|_|  \__,_|_| |_|\__, |\___|_|   |_|  \_/\_/ \___|_.__(_)___||___/
                        |___/

Programas de escritorio
"""

import os
import sys
from Tkinter import *
import tkFont
from pyA20.gpio import gpio
from pyA20.gpio import port
from time import sleep

PIN1 = port.PG6
PIN2 = port.PG7

gpio.init()
gpio.setcfg(PIN1, gpio.OUTPUT)
gpio.setcfg(PIN2, gpio.OUTPUT)

win = Tk()

myFont = tkFont.Font(family = 'Helvetica', size = 24, weight = 'bold')

def PG6ON():
        print('PIN 38 ON 40 OFF')
        gpio.output(PIN1,0)
        gpio.output(PIN2,1)

def PG7ON():
        print('PIN 38 OFF 40 ON')
        gpio.output(PIN1,1)
        gpio.output(PIN2,0)

def exitProgram():
        print('SALIENDO')
        gpio.output(PIN1,0)
        gpio.output(PIN2,0)
        win.quit()

win.title('TEST')
win.geometry('640x300')

exitButton = Button(win, text = 'Salir', font = myFont, command = exitProgram, height = 1, width = 4)
exitButton.pack(side = BOTTOM)

ledONButton = Button(win, text = 'Pin 38', font = myFont, command = PG6ON, height = 1, width = 6)
ledONButton.pack()

ledOFFButton = Button(win, text = 'Pin 40', font = myFont, command = PG7ON, height = 1, width = 6)
ledOFFButton.pack()

mainloop()

El programa es bastante sencillo y evidente, creo que se entiende bastante sin necesidad de mucha explicación. En las primeras líneas importamos las librerías necesarias y definimos los pines que vamos a usar. En este caso, he usado los pines físicos 38 y 40 que se corresponden con la nomenclatura de la librería PG6 y PG7. Inicializamos el GPIO y activamos dichos pines como SALIDA (gpio.setcfg(PIN1, gpio.OUTPUT), gpio.setcfg(PIN2, gpio.OUTPUT)). Las siguientes líneas definen el tipo de letra y las funciones que van a ejecutar los botones. Al pulsar el botón Pin 38 (este texto se define más abajo), el pin 38 del GPIO se pondrá en HIGH (gpio.output(PIN1,1) ) y el pin 40 en LOW. Y viceversa, al pulsar el botón Pin 40 el pin 40 del GPIO se pondrá en HIGH y el pin 38 en LOW. Es un ejemplo muy, muy sencillo, que puedes adaptar a tus necesidades muy facilmente.

Para probar el programa, cambiamos sus permisos para hacerlo ejecutable:

sudo chmod +x prueba.py

y lo lanzamos desde un terminal:

sudo python prueba.py

Después de introducir la clave de administrador, podrás ver la siguiente pantalla:

Programas de escritorio en Orange Pi con Tkinter

Si pulsas sobre los botones verás cómo cambia el estado de los pines 38 y 40. Sencillo ¿verdad?.

Para ejecutar un programa Python desde el escritorio tenemos varias maneras. Vamos a crear un lanzador que no nos obligue a ejecutar el programa desde el terminal. Creamos el archivo:

sudo nano prueba.desktop

y ponemos este código dentro:

[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Exec=gksudo /home/opi/Desktop/prueba.py
Name=Prueba PY
Icon=access
Comment=
Path=
StartupNotify=false

y también le damos permisos de ejecución:

sudo chmod +x prueba.desktop

La ventaja (o el problema) de este sistema es que nos preguntará la clave cada vez que hagamos doble click a través de una bonita ventana de escritorio, ya que lo lanzamos con gksudo. Si lo hiciésemos con sudo nos lo preguntaría desde terminal, para lo que habría que poner Terminal=true. Pero podemos cambiar este comportamiento si el entorno es seguro y realmente es lo que queremos/necesitamos hacer. Añadiremos la siguiente línea al archivo sudoers que es el archivo que, por explicarlo brevemente, contiene los usuarios que pueden ejecutar con propiedades de administrador. Lanzamos:

sudo visudo

y añadimos la siguiente línea:

NONBREDEUSUARIO ALL = NOPASSWD: /home/opi/Desktop/prueba.py

Cambia NONBREDEUSUARIO por tu nombre de usuario y reinicia (a veces funciona sin reiniciar, de hecho, se supone que no es necesario pero no nos cuesta nada). Ahora tendrás en el escritorio un Programa llamado Prueba PY con este icono que al hacer doble click, lanzará nuestro programa.

Programas de escritorio en Orange Pi con Tkinter, advertencia

La primera vez te advertirá de que estás lanzando un programa con privilegios de administrador. Marca la casilla si quieres que no te lo diga más, cierra la advertencia y tendremos el programa disponible y listo para activar o desactivar cualquier pin de tu GPIO. Quizás sea conveniente sacar el programa prueba.py fuera del escritorio actualizando la ruta en el lanzador para tener sólo el ejecutable en el escritorio.

Gracias a Celestino por la correción del Pin 39-38.

Espero que te haya sido de utilidad, no dudes en escribir un comentario si ves algún error o si puedo ayudarte.


Utiliza este espacio si quieres añadir algún comentario adicional o si tienes alguna duda.
No olvides añadir tu distribución y tu placa.

Todos los comentarios serán validados antes de su publicación.

Nombre*

Email* Nunca será publicado ni compartido

Comentario*



Copyright © 2018 desde 2016. Todos los derechos reservados | Diseño JaviPSantos

Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-ley 13/2012. Si continúa navegando consideramos que acepta el uso de cookies.

OK | Más información