Sección Unicamente para Tutoriales y Guías
#9130
Buenas compañeros, ando realizando un proyecto de raspberry + carcasa NES y necesitaba poder apagar y encender la Raspberry a través de un botón.

Según si estemos en Recalbox o Retropie el procedimiento es distinto, así que procedo a explicar los dos.

Buscando encontré un tutorial que explica a la perfección el proceso para poder apagar nuestra plaquita a través del GPIO.
Consiste en la programación de un script en python, y el tutorial en cuestión es el siguiente http://forum.arcadecontrols.com/index.p ... c=147052.0

Aunque está genialmente explicado ahí, paso a ponerlo en español.

Necesitamos:
  • Una Raspberry Pi
  • Un pulsador
  • Dos cables para la conexión entre la Raspberry y el pulsador


Imagen

El pulsador lo tenemos que conectar a los pines 5 y 6 del GPIO. Con el simple hecho de conectar un pulsador en esos pines tendremos la capacidad de poder arrancar la placa a través del botón sin ninguna linea de código extra ni configuración. Sin embargo lo interesante del asunto es poder tanto encender como apagar la raspberry, por lo que el proceso de apagado si que tiene que ser programado a través de un script.
En pocas palabras, el objetivo final es hacer un programilla que la raspberry ejecute al arrancar y que se quede esperando indefinidamente una acción que nosotros le digamos (que en nuestro caso será pulsar el botón). Una vez que se realice esa acción forzamos el apagado de la placa, fácil! :vago

RETROPIE

Lo primero que tenemos que hacer es acceder por SSH a nuestra Raspberry, y una vez dentro ejecutar las siguientes lineas
Código: Seleccionar todosudo apt-get update

Código: Seleccionar todosudo apt-get -y install python-rpi.gpio


Después, creamos nuestro script con el siguiente comando
Código: Seleccionar todosudo nano /home/pi/shutdown.py


y dentro copiamos el siguiente fragmento de código
Código: Seleccionar todoimport RPi.GPIO as GPIO
import time
import os

GPIO.setmode(GPIO.BCM)
GPIO.setup(03, GPIO.IN, pull_up_down = GPIO.PUD_UP)
while True:
    print GPIO.input(03)
    if(GPIO.input(03) == False):
        os.system("sudo shutdown -h now")
        break
    time.sleep(1)


Tras ello pulsamos Ctrl+X y decimos Y (Yes) para guardar cambios.
Una vez hecho esto y con nuestro script ya programado, tenemos que indicarle a la raspberry que cada vez que arranque tiene que ejecutar este código, para ello tenemos que escribir en crontab a través de la siguiente línea
Código: Seleccionar todosudo crontab -e

Si os pregunta, seleccionar la opción 2 (nano).

bajamos hasta el final y escribimos lo siguiente
Código: Seleccionar todo@reboot sudo python /home/pi/shutdown.py


De nuevo pulsamos Ctrl+X y decimos Y para guardar.

Para finalizar, nos tenemos que asegurar que el script funciona correctamente, por lo que vamos a testear su funcionamiento ejecutando de manera manual el código a través de la siguiente línea
Código: Seleccionar todosudo python /home/pi/shutdown.py


Si todo va bien, el código no arrojará ningún error por pantalla y se quedará escuchando a que pulsemos el botón. Si lo pulsamos, la raspberry se debe apagar!

Una vez apagada podemos comprobar que, efectivamente, la raspberry también enciende si pulsamos el botón y... ya tendremos nuestro pulsador de encendido/apagado :D

RECALBOX

En recalbox no tenemos package manager (apt-get), y comandos como sudo no funcionan, ya que digamos es una versión "light" del sistema y no implementa todos los paquetes, por lo que si necesitas instalar alguno tienes que montar la imagen, añadirlo y volver a hacer un build de la imagen. Por suerte el paquete que necesitamos (el de python) ya está instalado, por lo que nos ahorramos este tedioso paso.

Lo primero que tenemos que hacer es acceder por SSH a nuestra Raspberry, y una vez dentro crear nuestro script con el siguiente comando
Código: Seleccionar todomkdir pi
cd pi
nano shutdown.py


y dentro copiamos el siguiente fragmento de código
Código: Seleccionar todoimport RPi.GPIO as GPIO
import time
import os

GPIO.setmode(GPIO.BCM)
GPIO.setup(03, GPIO.IN, pull_up_down = GPIO.PUD_UP)
while True:
    print GPIO.input(03)
    if(GPIO.input(03) == False):
        os.system("shutdown -h now")
        break
    time.sleep(1)


Tras ello pulsamos Ctrl+X y decimos Y (Yes) para guardar cambios.
Una vez hecho esto y con nuestro script ya programado, tenemos que indicarle a la raspberry que cada vez que arranque tiene que ejecutar este código, para ello tenemos que indicar en init.d que tenemos un script que queremos que arranque junto con el sistema.

Para ello lo primero es irse a init.d
Código: Seleccionar todocd /etc/init.d


Una vez aquí tenemos que darle permisos de escritura a la carpeta. Como el comando chmod tampoco funciona, la solución pasa por ejecutar
Código: Seleccionar todomount -o remount, rw /


Si ejecutamos el comando
Código: Seleccionar todols
vemos como hay una serie de ficheros enumerados desde el 01 hasta el 99. Todo esto son scripts que se ejecutan de manera secuencial al arrancar la placa, teniendo cada uno de ellos una función. Por ejemplo, el S31 arranca emulationstation, el S32 el bluetooth, etc...
Lo que nosotros vamos a hacer es crear un script en la última posición de la lista, para asegurarnos así que ningún otro arranque interfiere en el de nuestro script.

Ejecutamos el siguiente comando
Código: Seleccionar todonano S99myscript


y copiamos el siguiente código
Código: Seleccionar todo#!/bin/sh
#
# Start logging
#

start() {
        python /recalbox/share/system/pi/shutdown.py
}

stop() {
        printf "Stopping shutdown: "
        echo "OK"
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|reload)
        stop
        start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $?


De nuevo pulsamos Ctrl+X y decimos Y para guardar.

Para finalizar, nos tenemos que asegurar que el script funciona correctamente, por lo que vamos a testear su funcionamiento ejecutando de manera manual el código a través de la siguiente línea
Código: Seleccionar todo/etc/init.d/S99myscript start


Si todo va bien, el código no arrojará ningún error por pantalla y se quedará escuchando a que pulsemos el botón. Si lo pulsamos, la raspberry se debe apagar!

Una vez apagada podemos comprobar que, efectivamente, la raspberry también enciende si pulsamos el botón y... ya tendremos nuestro pulsador de encendido/apagado :D

OPENELEC (KODI)
*TUTORIAL EN CONSTRUCCIÓN*

Os dejo los pasos aún sin explicar:
Instalación y testeo realizado en base a la imagen v11 de kamber (OpenELEC 7.0.1 y Kodi 16.1)
1) Habilitar el paquete RPi.GPIO en kodi yendo a... Sistema/Ajustes/Add-ons/Instalar desde repositorio/OpenELEC Add-ons (unofficial)/Add-ons de programa/RPi.GPIO.
Una vez ahí instalar y habilitar el plugin, posteriormente pulsar en actualizar por si hubiera una actualización. -La versión 7.0.3 es la más reciente a fecha de 09/08-

2) Programar el script:

Código: Seleccionar todomkdir /storage/scripts
nano /storage/scripts/shutdown.py


Pegar esta porción de código en el fichero y guardar con Ctrl+X, después Y
Código: Seleccionar todoimport sys
sys.path.append('/storage/.kodi/addons/python.RPi.GPIO/lib')
import RPi.GPIO as GPIO
import time
import os

GPIO.setmode(GPIO.BCM)
GPIO.setup(03, GPIO.IN, pull_up_down = GPIO.PUD_UP)
while True:
    print GPIO.input(03)
    if(GPIO.input(03) == False):
        os.system("sudo shutdown -h now")
        break
    time.sleep(1)


Probar con el código
Código: Seleccionar todopython /storage/scripts/shutdown.py


Si queremos hacer que arranque al encender la placa:
Código: Seleccionar todonano /storage/.config/autostart.sh

Código: Seleccionar todopython /storage/scripts/shutdown.py &


Información sacada del tutorial en Inglés: http://www.barryhubbard.com/raspberry-pi/howto-raspberry-pi-openelec-power-wake-shutdown-button-using-gpio/


Os dejo una foto de las pruebas que estoy realizando ahora mismo con un botón de encendido/apagado, otro de reset y un led :P



EDIT:
Como veo que ya sois varios los que me lo habéis preguntado, os pongo como sería la conexión y programación para el botón de RESET.

Hay dos opciones:

1 - Volver a hacer el tutorial creando un nuevo script (con otro nombre) y cambiando el comando de apagado
(SI ES EN RECALBOX SERÍA SIN EL SUDO)
Código: Seleccionar todosudo shutdown -h now

por
Código: Seleccionar todosudo shutdown -r now

Obviamente el botón hay que conectarlo en otros dos pines diferentes, por ejemplo al 7 y al 9.
Si lo conectas al 7 y al 9 hay que modificar el script y donde pone GPIO.setup() y GPIO.input() cambiar el 03 por 04, quedando tal que así.
Código: Seleccionar todoimport RPi.GPIO as GPIO
import time
import os

GPIO.setmode(GPIO.BCM)
GPIO.setup(04, GPIO.IN, pull_up_down = GPIO.PUD_UP)
while True:
    print GPIO.input(04)
    if(GPIO.input(04) == False):
        os.system("sudo shutdown -r now")
        break
    time.sleep(1)



2 - Conectar (soldando) el botón al puerto RUN de la placa. El puerto RUN son unos agujeritos que se encuentran al lado del GPIO.
Este tipo de reinicio es de tipo hardware, es decir, es como si desconectaras y conectaras la rpi de la corriente, lo cual no es muy recomendable, al menos hacerlo de manera repetida.
Última edición por MrBeaker el 09 Ago 2017, 19:53, editado 8 veces en total.
viajero33, lino894, jlsangom y 14 otros le gusta esto
#9288
MrBeaker escribió:Buenas compañeros, ando realizando un proyecto de raspberry + carcasa NES y necesitaba poder apagar y encender la Raspberry a través de un botón.
Buscando encontré un tutorial que explica a la perfección el proceso para poder apagar nuestra plaquita a través del GPIO.
Consiste en la programación de un script en python, y el tutorial en cuestión es el siguiente http://forum.arcadecontrols.com/index.p ... c=147052.0

Aunque está genialmente explicado ahí, paso a ponerlo en español.

Necesitamos:
  • Una Raspberry Pi
  • Un pulsador
  • Dos cables para la conexión entre la Raspberry y el pulsador


Imagen

El pulsador lo tenemos que conectar a los pines 5 y 6 del GPIO. Con el simple hecho de conectar un pulsador en esos pines tendremos la capacidad de poder arrancar la placa a través del botón sin ninguna linea de código extra ni configuración. Sin embargo lo interesante del asunto es poder tanto encender como apagar la raspberry, por lo que el proceso de apagado si que tiene que ser programado a través de un script.
En pocas palabras, el objetivo final es hacer un programilla que la raspberry ejecute al arrancar y que se quede esperando indefinidamente una acción que nosotros le digamos (que en nuestro caso será pulsar el botón). Una vez que se realice esa acción forzamos el apagado de la placa, fácil! :vago

Lo primero que tenemos que hacer es acceder por SSH a nuestra Raspberry, y una vez dentro ejecutar las siguientes lineas
sudo apt-get update
sudo apt-get -y install python-rpi.gpio


Después, creamos nuestro script con el siguiente comando
sudo nano /home/pi/shutdown.py

y dentro copiamos el siguiente fragmento de código
Código: Seleccionar todoimport RPi.GPIO as GPIO
import time
import os

GPIO.setmode(GPIO.BCM)
GPIO.setup(03, GPIO.IN, pull_up_down = GPIO.PUD_UP)
while True:
    print GPIO.input(03)
    if(GPIO.input(03) == False):
        os.system("sudo shutdown -h now")
        break
    time.sleep(1)


Tras ello pulsamos Ctrl+X y decimos Y (Yes) para guardar cambios.
Una vez hecho esto y con nuestro script ya programado, tenemos que indicarle a la raspberry que cada vez que arranque tiene que ejecutar este código, para ello tenemos que escribir en crontab a través de la siguiente línea
sudo crontab -e

bajamos hasta el final y escribimos lo siguiente
@reboot sudo python /home/pi/shutdown.py

De nuevo pulsamos Ctrl+X y decimos Y para guardar.

Para finalizar, nos tenemos que asegurar que el script funciona correctamente, por lo que vamos a testear su funcionamiento ejecutando de manera manual el código a través de la siguiente línea
sudo python /home/pi/shutdown.py

Si todo va bien, el código no arrojará ningún error por pantalla y se quedará escuchando a que pulsemos el botón. Si lo pulsamos, la raspberry se debe apagar!

Una vez apagada podemos comprobar que, efectivamente, la raspberry también enciende si pulsamos el botón y... ya tendremos nuestro pulsador de encendido/apagado :D

Os dejo una foto de las pruebas que estoy realizando ahora mismo con un botón de encendido/apagado, otro de reset y un led :P

http://oi63.tinypic.com/154c1as.jpg

No me deja adjuntarla por ser demasiado grande :x



Hola, me puedes confirmar que apagando de esta forma no se nos vuelve corrupta la SD, ya que muchos apagados y reset lo hacen forzandolo, es decir, igual que si quitamos la corriente a la Pi.

Entonces mi duda es, con este script hace un apagado correcto de la Pi, mediante software y luego cortando la alimentacion, todo junto?? o solo hace el apagado de software y se queda como en stand-by para luego proceder al encendido nuevamente??

Un saludo y gracias por el tutorial.
#9410
Titan escribió:
MrBeaker escribió:Buenas compañeros, ando realizando un proyecto de raspberry + carcasa NES y necesitaba poder apagar y encender la Raspberry a través de un botón.
Buscando encontré un tutorial que explica a la perfección el proceso para poder apagar nuestra plaquita a través del GPIO.
Consiste en la programación de un script en python, y el tutorial en cuestión es el siguiente http://forum.arcadecontrols.com/index.p ... c=147052.0

Aunque está genialmente explicado ahí, paso a ponerlo en español.

Necesitamos:
  • Una Raspberry Pi
  • Un pulsador
  • Dos cables para la conexión entre la Raspberry y el pulsador


Imagen

El pulsador lo tenemos que conectar a los pines 5 y 6 del GPIO. Con el simple hecho de conectar un pulsador en esos pines tendremos la capacidad de poder arrancar la placa a través del botón sin ninguna linea de código extra ni configuración. Sin embargo lo interesante del asunto es poder tanto encender como apagar la raspberry, por lo que el proceso de apagado si que tiene que ser programado a través de un script.
En pocas palabras, el objetivo final es hacer un programilla que la raspberry ejecute al arrancar y que se quede esperando indefinidamente una acción que nosotros le digamos (que en nuestro caso será pulsar el botón). Una vez que se realice esa acción forzamos el apagado de la placa, fácil! :vago

Lo primero que tenemos que hacer es acceder por SSH a nuestra Raspberry, y una vez dentro ejecutar las siguientes lineas
sudo apt-get update
sudo apt-get -y install python-rpi.gpio


Después, creamos nuestro script con el siguiente comando
sudo nano /home/pi/shutdown.py

y dentro copiamos el siguiente fragmento de código
Código: Seleccionar todoimport RPi.GPIO as GPIO
import time
import os

GPIO.setmode(GPIO.BCM)
GPIO.setup(03, GPIO.IN, pull_up_down = GPIO.PUD_UP)
while True:
    print GPIO.input(03)
    if(GPIO.input(03) == False):
        os.system("sudo shutdown -h now")
        break
    time.sleep(1)


Tras ello pulsamos Ctrl+X y decimos Y (Yes) para guardar cambios.
Una vez hecho esto y con nuestro script ya programado, tenemos que indicarle a la raspberry que cada vez que arranque tiene que ejecutar este código, para ello tenemos que escribir en crontab a través de la siguiente línea
sudo crontab -e

bajamos hasta el final y escribimos lo siguiente
@reboot sudo python /home/pi/shutdown.py

De nuevo pulsamos Ctrl+X y decimos Y para guardar.

Para finalizar, nos tenemos que asegurar que el script funciona correctamente, por lo que vamos a testear su funcionamiento ejecutando de manera manual el código a través de la siguiente línea
sudo python /home/pi/shutdown.py

Si todo va bien, el código no arrojará ningún error por pantalla y se quedará escuchando a que pulsemos el botón. Si lo pulsamos, la raspberry se debe apagar!

Una vez apagada podemos comprobar que, efectivamente, la raspberry también enciende si pulsamos el botón y... ya tendremos nuestro pulsador de encendido/apagado :D

Os dejo una foto de las pruebas que estoy realizando ahora mismo con un botón de encendido/apagado, otro de reset y un led :P

http://oi63.tinypic.com/154c1as.jpg

No me deja adjuntarla por ser demasiado grande :x



Hola, me puedes confirmar que apagando de esta forma no se nos vuelve corrupta la SD, ya que muchos apagados y reset lo hacen forzandolo, es decir, igual que si quitamos la corriente a la Pi.

Entonces mi duda es, con este script hace un apagado correcto de la Pi, mediante software y luego cortando la alimentacion, todo junto?? o solo hace el apagado de software y se queda como en stand-by para luego proceder al encendido nuevamente??

Un saludo y gracias por el tutorial.


Buenas,

Este tutorial realiza el apagado a través de software, es decir, ejecuta la línea de comando shutdown -h now como se puede ver en el script y deja la rpi en standby (con el led rojo de la placa encendido).

En cuanto a si vuelve o no corrupta la SD según he podido leer por otros foros la respuesta es no, al menos según la experiencia de los que han utilizado este tipo de técnica para el apagado. No puedo darte un no rotundo pero vamos, es un apagado por línea de comandos, no cortas la corriente ni dejas procesos abiertos, por lo que más liviano que este... :?:

Me alegro de que os haya gustado.

Saludos.
#9411
gamusino69 escribió:muchas gracias por el tutorial...yo compre en su momento un cablecito con un boton de encendido y estoy usando eso que no va tampoco mal...aunque lo de poner una carcasa de nes o super nintendo me llama bastante.....gracias!!


Yo también tengo el cable, de hecho lo tengo conectado a la rpi y a veces utilizo el interruptor para apagar 100% la placa, ya que con esto se queda en una especie de stand-by.

Si os gusta la idea de la carcasa NES (impresa mediante impresora 3D para la rpi), puedo decirle al compañero que me la proporcionó que se haga cuenta en el foro y os ponga imágenes y más info. :D
#9465
Mil gracias por el fantástico tutorial @MrBeaker muy bien explicado !! No pasa nada hombre, ya lo acabo de mover :victoria

Un abrazo crack!

PD: Te he modificado con tu permiso un poco el tutorial, he puesto los codes correctamente y he agregado la imagen del final ( si te dice que es más grande , debes usar el código "thumbnail")
#9485
Kike escribió:Mil gracias por el fantástico tutorial @MrBeaker muy bien explicado !! No pasa nada hombre, ya lo acabo de mover :victoria

Un abrazo crack!

PD: Te he modificado con tu permiso un poco el tutorial, he puesto los codes correctamente y he agregado la imagen del final ( si te dice que es más grande , debes usar el código "thumbnail")


Muchas gracias Kike.
Claro que sí, ahora está mucho mejor :D
#9574
MrBeaker escribió:
gamusino69 escribió:muchas gracias por el tutorial...yo compre en su momento un cablecito con un boton de encendido y estoy usando eso que no va tampoco mal...aunque lo de poner una carcasa de nes o super nintendo me llama bastante.....gracias!!


Yo también tengo el cable, de hecho lo tengo conectado a la rpi y a veces utilizo el interruptor para apagar 100% la placa, ya que con esto se queda en una especie de stand-by.

Si os gusta la idea de la carcasa NES (impresa mediante impresora 3D para la rpi), puedo decirle al compañero que me la proporcionó que se haga cuenta en el foro y os ponga imágenes y más info. :D


pues lo de la carcasa me llama bastante estaria genial poder ver algunas fotitos mas,muchas gracias por el tutorial...saludos.
#9577
gamusino69 escribió:
MrBeaker escribió:
gamusino69 escribió:muchas gracias por el tutorial...yo compre en su momento un cablecito con un boton de encendido y estoy usando eso que no va tampoco mal...aunque lo de poner una carcasa de nes o super nintendo me llama bastante.....gracias!!


Yo también tengo el cable, de hecho lo tengo conectado a la rpi y a veces utilizo el interruptor para apagar 100% la placa, ya que con esto se queda en una especie de stand-by.

Si os gusta la idea de la carcasa NES (impresa mediante impresora 3D para la rpi), puedo decirle al compañero que me la proporcionó que se haga cuenta en el foro y os ponga imágenes y más info. :D


pues lo de la carcasa me llama bastante estaria genial poder ver algunas fotitos mas,muchas gracias por el tutorial...saludos.


He invitado al forero a que se haga cuenta aquí.
Ya ha abierto un hilo en compra/venta mostrando algunas fotos. La calidad de la impresión es muy muy buena.

viewtopic.php?f=61&t=1624
#9610
No sería mas facil y practico apagar nuestra raspberry desde un cable con interruptor como el que muestro en el enlace? ,mas profesional y menos lios de cables ni protoboard...digo yo ,yo solo intendo dar mi opinión. :adios

https://www.aliexpress.com/item-img/Free-Shipping-5V-2-5A-Power-Charger-Adapter-Power-Supply-For-Raspberry-Pi-3-Model-B/32637489139.html#
#9864
lino894 escribió:No sería mas facil y practico apagar nuestra raspberry desde un cable con interruptor como el que muestro en el enlace? ,mas profesional y menos lios de cables ni protoboard...digo yo ,yo solo intendo dar mi opinión. :adios

https://www.aliexpress.com/item-img/Free-Shipping-5V-2-5A-Power-Charger-Adapter-Power-Supply-For-Raspberry-Pi-3-Model-B/32637489139.html#


Yo también tengo ese cable conectado, pero no es lo mismo apagar cortando la corriente que apagar la placa por software...
De todas formas esto necesito hacerlo para el proyecto que llevo entre manos, aunque como te digo también tengo el cable que comentas para que, una vez que esté en Stand-by, poder desconectarla de corriente.
#9883
lino894 escribió:Si que es verdad que para cortar alimentación a través del cable , primero a de apagarse mediante software con el comando sudo shutdown -h now.
Como tu lo propones sería de una forma mas practica. :silbido


Realmente al estar trasteando con hardware es engorroso por el cableado, pero sería una forma rápida de lo que se debería de hacer normalmente a través del apagado por menú. :D
#9938
MrBeaker escribió:Yo también tengo ese cable conectado, pero no es lo mismo apagar cortando la corriente que apagar la placa por software...
De todas formas esto necesito hacerlo para el proyecto que llevo entre manos, aunque como te digo también tengo el cable que comentas para que, una vez que esté en Stand-by, poder desconectarla de corriente.


Una pequeña duda, el apagado por software te la deja en stand-by, y como comentas luego la apagas con el cable, entonces cuando realizas de nuevo el encendido con el cable, te arranca directamente?? o se queda en stand-by y luego pulsando el boton te arranca??
#9944
Titan escribió:
MrBeaker escribió:Yo también tengo ese cable conectado, pero no es lo mismo apagar cortando la corriente que apagar la placa por software...
De todas formas esto necesito hacerlo para el proyecto que llevo entre manos, aunque como te digo también tengo el cable que comentas para que, una vez que esté en Stand-by, poder desconectarla de corriente.


Una pequeña duda, el apagado por software te la deja en stand-by, y como comentas luego la apagas con el cable, entonces cuando realizas de nuevo el encendido con el cable, te arranca directamente?? o se queda en stand-by y luego pulsando el boton te arranca??


Cuando vuelves a meterle corriente por cable automáticamente se enciende, eso si que no se puede controlar a no ser que sea con un módulo micro USB externo al que lleva la placa. El botón se podría usar para encender si la placa se queda en stand-by y no has desenchufado el cable.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 12

Alguien que pueda ayudarme con este tema?? Muchas […]

A mi me pasaba lo mismo, el problema estaba en las[…]

Yo compre el adaptador de media markt que salía po[…]

Mi consejo es que actualices a RetroPie 4.3.8 desd[…]

Apagado y rayo amarillo

He probado con otro pack (el mismo de la caja tran[…]

Gamelist.xml de gameandwatch

Prueba con esto : Espero que sea lo que buscas !![…]

La imagen no me carga, no hace nada. A alguien mas[…]

edita el archivo music.py agrega el emulador de ND[…]