|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  Raspberry Pi Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  AutoIt (Programación) Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

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.

uno.py

# 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)
dos.py

# 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)
tres.py

# 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)

 

elige_led.py

#!/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.

elegir.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

___________________________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información