Raspberry Pi
Tutorial de Rapberry Pi en español.
- Juan Antonio Villalpando -
Volver al índice del tutorial
____________________________
6C.- Elegir aplicación.
______________________________
1.- Elegir el parpadeo de tres LED.
- Tenemos 3 LED y 3 script para hacerlos parpadear, cada uno con un tiempo distinto.
- Los tres scripts son uno.py, dos.py y tres.py
- Tenemos otro script llamado elige_led.py
- Si pulsamos '11' parpadeará el LED33, si pulsamos '22' parpadeará el LED35, si pulsamos '33' parpadeará el LED37.
- Si pulsamos '4' dejará de parpadear el LED33, con '5' dejará de parpadear el LED35 y con '6' dejará de parpadear el LED37.
______________________________
1.- Conexión.
- Teclado y pantalla LCD como en el tutorial anterior (aunque la pantalla LCD no hace falta). Consulta el tutorial anterior.
- En caso de poner la pantalla LCD es necesaria la librería vista en el tutorial anterior.
- Además de estos elementos ponemos 3 LED conectados a los terminales 33, 35 y 37 del Raspberry.
______________________________
2.- Códigos.
|
# Juan Antonio Villalpando
# kio4.com
import RPi.GPIO as GPIO # Librería para GPIO
from time import sleep # Función sleep del módulo time
GPIO.setwarnings(False) # Ignorar avisos.
GPIO.setmode(GPIO.BOARD) # Modo de patillaje físico
GPIO.setup(33, GPIO.OUT, initial=GPIO.LOW)
while True:
GPIO.output(33, GPIO.HIGH)
print("Encendido_1.")
sleep(0.5)
GPIO.output(33, GPIO.LOW)
print("Apagado_1.")
sleep(0.5)
|
|
# Juan Antonio Villalpando
# kio4.com
import RPi.GPIO as GPIO # Librería para GPIO
from time import sleep # Función sleep del módulo time
GPIO.setwarnings(False) # Ignorar avisos.
GPIO.setmode(GPIO.BOARD) # Modo de patillaje físico
GPIO.setup(35, GPIO.OUT, initial=GPIO.LOW)
while True:
GPIO.output(35, GPIO.HIGH)
print("Encendido_2.")
sleep(0.75)
GPIO.output(35, GPIO.LOW)
print("Apagado_2.")
sleep(0.75)
|
|
# Juan Antonio Villalpando
# kio4.com
import RPi.GPIO as GPIO # Librería para GPIO
from time import sleep # Función sleep del módulo time
GPIO.setwarnings(False) # Ignorar avisos.
GPIO.setmode(GPIO.BOARD) # Modo de patillaje físico
GPIO.setup(37, GPIO.OUT, initial=GPIO.LOW)
while True:
GPIO.output(37, GPIO.HIGH)
print("Encendido_3.")
sleep(1)
GPIO.output(37, GPIO.LOW)
print("Apagado_3.")
sleep(1)
|
|
#!/usr/bin/env python
import smbus
import sys
import time
import I2C_LCD_driver
import subprocess
import os
class MyKeyboard:
#Modificado por Juan A. Villalpando http://kio4.com
KeyPadTable= [['D','C','B','A'] , ['#','9','6','3'], ['0','8','5','2'], ['*','7','4','1']]
RowID=[0,0,0,0,0,0,0,4,0,0,0,3,0,2,1,0]
CurrentKey=None
def __init__(self,I2CBus=1, I2CAddress=0x20):
self.I2CAddress = I2CAddress
self.I2CBus = I2CBus
self.bus = smbus.SMBus(self.I2CBus)
self.bus.write_byte(self.I2CAddress,0xff)
def ReadRawKey(self):
OutPin= 0x10
for Column in range(4):
self.bus.write_byte(self.I2CAddress,~OutPin)
key = self.RowID[self.bus.read_byte(self.I2CAddress) & 0x0f]
if key >0 :
return self.KeyPadTable[key-1][Column]
OutPin = OutPin * 2
return None
def ReadKey(self):
LastKey= self.CurrentKey;
while True:
NewKey= self.ReadRawKey()
if NewKey != LastKey:
time.sleep(0.01)
LastKey= NewKey
else:
break
if LastKey==self.CurrentKey:
return None
self.CurrentKey=LastKey
return self.CurrentKey
if __name__ == "__main__":
test = MyKeyboard()
mylcd = I2C_LCD_driver.lcd()
todo = ""
while True:
V = test.ReadKey()
if V != None:
todo = todo + V
mylcd.lcd_clear()
mylcd.lcd_display_string(todo, 1)
if V == '#':
sys.stdout.write(todo)
mylcd.lcd_display_string(todo[:-1], 1)
#print(V)
if todo[:-1] == '11':
p1 = subprocess.Popen(['python3','uno.py'])
print("Pulsado 11")
if todo[:-1] == '22':
p2 = subprocess.Popen(['python3','dos.py'])
print("Pulsado 22")
if todo[:-1] == '33':
p3 = subprocess.Popen(['python3','tres.py'])
print("Pulsado 33")
if todo[:-1] == '4':
#p1.terminate()
#p1.kill()
os.system("pkill -f 'python3 uno.py' ")
print("Pulsado 4")
if todo[:-1] == '5':
os.system("pkill -f 'python3 dos.py' ")
print("Pulsado 5")
if todo[:-1] == '6':
os.system("pkill -f 'python3 tres.py' ")
print("Pulsado 6")
sys.stdout.flush()
todo = ""
else:
time.sleep(0.001)
GPIO.cleanup()
|
______________________________
3.- Comentarios.
- Estas son otras formas de ejecutar un script.
#exec(open("uno.py").read());
#uno.some_func()
#subprocess.run(["uno.py"])
#os.system('python uno.py')
- Para terminar un proceso utilizamos una de estas dos órdenes.
p1.terminate()
p1.kill()
- Si no podemos parar un proceso, vamos al terminal y escribimos
ps -aux | grep python
Consultamos el número de PID
pi 5467 ........................................ python3 uno.py
- Terminamos ese proceso:
kill -9 5467
- Para matar todos los procesos del mismo nombre, por ejemplo todos los: uno.py
ps aux | grep -ie 'python3 uno.py' | awk '{print "kill -9 " $2}' | sh -x
- En el código lo pondríamos así:
os.system("ps aux | grep -ie 'python3 uno.py' | awk '{print \"kill -9 \" $2}' | sh -x")
- Otra forma
pkill - f 'python3 uno.py'
- En nuestro caso en vez de cerrar el proceso mediante p1.terminal, utilizo pkill, porque podría ocurrir que haya varios procesos abiertos para el mismo script, es decir
pi 4168 0.9 0.7 11088 7304 ? S 18 : 31 0 : 00 python3 uno. py
pi 4175 1.2 0.7 11088 7300 ? S 18 : 33 0 : 00 python3 uno. py
pi 4185 2.4 0.7 11092 7300 ? S 18 : 35 0 : 00 python3 uno. py
pi 4195 6.5 0.7 11088 7300 ? S 18 : 38 0 : 00 python3 dos. py
- Distintas formas de terminar un proceso abierto mediante p1 = subprocess.Popen(['python3','uno.py'])
#p1.terminate()
#p1.kill()
os.system("pkill -f 'python3 uno.py' ") # Esto cierra si hay varios abiertos.
______________________________
1.- Conexión.
- Ponemos un pulsador y según esté en alto o bajo se ejecutará una aplicación.
______________________________
2.- Código.
- Debemos tener dos aplicaciones llamadas uno.py y dos.py.
|
import uno
import dos
import subprocess
import RPi.GPIO as GPIO # Import Raspberry Pi GPIO library
GPIO.setwarnings(False) # Ignore warning for now
GPIO.setmode(GPIO.BOARD) # Use physical pin numbering
GPIO.setup(10, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Set pin 10 to be an input pin and
while True:
if GPIO.input(10) == GPIO.HIGH:
uno
# subprocess.Popen("uno.py")
dos
|
import subprocess
p = subprocess.Popen("notepad.exe")
p.terminate()
https://stackoverflow.com/questions/1186789/what-is-the-best-way-to-call-a-script-from-another-script
___________________________________________________
|