Paso 20: Cómo los programas de Python funcionan
Hay dos cliente programas Python utilizados en este instructable para crear la cámara sensible de frambuesa Pi movimiento.
RPI-ms-camera.py
El primer programa de "rpi-ms-camera.py" se inicia con el comando:
en el archivo de sistema "/ etc/network/interfaces". Se ejecuta el comando "después en" cuando las interfaces de red están funcionando.
Listados 1 a 6 muestran el código fuente del programa rpi-ms-camera.py:
Líneas 4-26 (Listado 1) las bibliotecas de importación necesitada y definir constantes que se utilizarán en el programa.
- Líneas 4-6 importación las librerías que se requieren para emitir comandos del sistema, el módulo de la cámara de control, obtener el tiempo y permitir el programa de lectura y escritura de los pines GPIO.
- 10 de línea define que pin GPIO se utiliza para detectar el movimiento detectado por el sensor de PIR.
- Las líneas 13 y 14 son constantes que se utilizan para los mensajes de salida que indican qué modo está funcionando la cámara.
- Línea 17 define qué directorio se utilizará para almacenar la foto o vídeo capturado por la cámara más reciente.
- Línea 20 define la ubicación del programa que se utiliza para subir archivos a Dropbox.
- Línea 23 establece el número de segundos de video en el que se registrarán cuando se detecta movimiento. Esto puede modificarse para adaptarse a sus necesidades. Los segundos más de vídeo grabado, más tiempo tomará para subir a Dropbox.
- Línea 26 establece el número de segundos que esperará el programa después de ajustar una foto o grabar un vídeo. Este retardo se utiliza para evitar tomar muchas fotos y vídeos en una fila del mismo evento. Esto puede cambiar si más frecuentes o menos frecuentes fotos o vídeos se van a tomar.
Líneas 28-31 (Listado 2) definir la función de "generate_file_name". Esta función se utiliza para generar un nombre de archivo único basado en la fecha y hora. Este nombre de archivo se utilizará para las fotos o vídeos. El formato del nombre generado es "yyyy-mm-dd-hh-MM-ss-tz" donde aaaa es el año, mm es el mes, dd es el día, hh es la hora, MM es el minuto, ss es los segundos y tz es la zona horaria.
Líneas 33-46 (Listado 2) definir la función de "motion_detected". Esta función es llamada cuando el sensor PIR detecta movimiento. Esta función se ajusta una foto o video, registros sube la foto o el vídeo a Dropbox y elimina el archivo de la Raspberry Pi.
- Línea 36 crea el nombre del archivo que se utilizará para la foto o el vídeo.
- Línea 37 imprime un mensaje indicando que se ha detectado movimiento.
- Líneas 38-40 se ejecutan si se ha establecido el modo de cámara para tomar fotos.
- Línea 39 añade la extensión ".jpg" en el nombre del archivo.
- Línea 40 llama a la función "snap_photo" para tomar la fotografía.
- Líneas 41-43 se ejecutan si la cámara se ha puesto a grabar video.
- Línea 42 añade la extensión ".h264" en el nombre del archivo.
- Línea 43 llama a la función "record_video" para grabar el video.
- Línea 44 llama a la función "upload_to_dropbox" para subir la foto o el vídeo a Dropbox.
- Línea 45 borra la foto o vídeo. Esto se hace para evitar que la tarjeta SD de frambuesa Pi llenando con fotos o videos.
- Línea 46 imprime un mensaje indicando que el archivo ha sido borrado.
Líneas 48-53 (Listado 3) definen la función de "snap_photo". Esta función se utiliza para tomar una foto.
- Línea 51 establece la resolución de la foto.
- Línea 52 se encaja a presión la foto y almacena en el archivo especificado.
- Línea 53 imprime un mensaje que indica que se tomó una foto.
Líneas 55-64 (Listado 3) definen la función de "record_video". Esta función se utiliza para grabar un video.
- Línea 59 establece la resolución del vídeo.
- Línea 60 empieza a grabar el video y almacena en el archivo especificado.
- Línea 61 imprime un mensaje indicando que ha comenzado la grabación de vídeo.
- Línea 62 hace que el programa espere hasta que el número de segundos especificado.
- Línea 63 detiene la grabación del vídeo.
- Línea 64 imprime un mensaje indicando que el video ha dejado de grabar.
Líneas 66-74 (Listado 3) define la función de "upload_to_dropbox". Esta función cargará el archivo especificado a Dropbox.
- Línea 70 extrae sólo el nombre del archivo el nombre de archivo completo que fue aprobado en la función. Este será el nombre del archivo almacenado en Dropbox.
- Línea 71 imprime un mensaje acerca de qué archivo se subirá.
- Línea 72 define el comando completo que se utilizará para cargar hasta el archivo. El comando consiste en el nombre y la ubicación del programa de carga, la opción de "subir" para el comando, el nombre de archivo local y el nombre que debe utilizarse para el archivo en Dropbox.
- Línea 74 utiliza la función del sistema "subprocess.call" para ejecutar el comando.
Líneas 76-85 (listado 4) definir la función de "upload_ip_address". Esta función se utiliza para crear un archivo con la dirección IP de la Raspberry Pi y subirla a Dropbox. El propósito de subir un archivo con la dirección IP es hacer más fácil obtener la dirección IP de la Raspberry Pi para propósitos de depuración. Con la dirección IP, es posible utilizar "ssh" para abrir una sesión de terminal a la frambuesa Pi y emitir comandos de Linux.
- Línea 80 imprime un mensaje que indica que la dirección IP se subirá a Dropbox.
- Línea 81 crea el nombre del archivo que contendrá la dirección IP.
- Línea 82 construye el comando para obtener la dirección IP del sistema. Es el comando "hostname-I >" seguido del nombre del archivo.
- Línea 83 utiliza la función del sistema "subprocess.call" para ejecutar el comando.
- Línea 84 llamadas "upload_to_dropbox" para subir el archivo a Dropbox.
- Línea 85 elimina el archivo de la Raspberry Pi.
Líneas 87-91 (listado 4) definir la función de "first_time_config". Esta función se llama durante el proceso de configurar el Raspberry Pi cuando se emite el comando "python rpi-ms-camera.py - firsttime". Este comando se utiliza en el paso 9 de este instructivo.
- Línea 91 utiliza la función del sistema "subprocess.call" para emitir el comando que carga archivos a Dropbox. Cuando se emite este comando por primera vez, solicita al usuario ingresar la información necesaria para conectarse a Dropbox.
Líneas 93-99 (listado 4) definir la función de "test_dropbox". Esta función se llama durante el proceso de configurar la frambuesa cuando el comando "python rpi-ms-camera.py - prueba" se publica. Este comando crea un archivo de prueba que contiene la dirección IP del Raspberry Pi y sube a Dropbox. Si envía con éxito el archivo, luego el Raspberry Pi ha correctamente constituido para su uso con Dropbox. Se utiliza en el paso 9 de este instructivo.
- Línea 97 imprime un mensaje indicando que la conexión de Dropbox está a punto de ser probado.
- Línea 98 llama a la función "upload_ip_address" para crear y cargar un archivo que contiene la dirección IP de la Raspberry Pi.
- Línea 99 imprime un mensaje indicando que la carga ha finalizado y le pide al usuario que Compruebe la carpeta de la aplicación de Dropbox para verificar el archivo ha subido con éxito.
Líneas 100-133 (listado 5) son el principio del programa principal.
- 107-110 las líneas son comentarios que muestran todas las opciones del programa.
- Línea 113 comprueba para ver si las opciones que han sido especificadas. Si tienen opciones se ha especificado que el programa continúa en la línea 114. Si no hay opciones han sido especificados, el programa va a la línea 127.
- Líneas 114-115 Compruebe si se ha especificado la opción para tomar fotos y si así establece el modo de cámara fotos.
- Líneas 116-117 Compruebe si se ha especificado la opción de grabación de vídeo y si tan establece el modo de cámara en videos.
- Líneas 118-120 si se especificó la primera opción de tiempo y si lo llama a la función "first_time_config" y luego sale el programa.
- Líneas 121-123 para ver si se especifica la opción de prueba y si lo llama a la función "test_dropbox" y luego sale el programa.
- Líneas de 124-126 se alcanzan si se especifica alguna otra opción. Desde esta opción no reconocida, se imprime un mensaje de error y el programa sale.
- Líneas 127-133 se ejecutan cuando no se ha especificado ninguna opción. Impresión de líneas 128-132 lo que todas las opciones válidas son y luego la línea 133 sale el programa.
Líneas 135-164 (listado 6) realizar operaciones de inicialización para el programa principal.
- Líneas es a partir de 135-136 impresión mensajes indicando la cámara sensible de frambuesa Pi movimiento y modo de (foto o video) que se utilizará.
- Líneas de 138-141 establece el módulo de cámara. Línea 139 inicializa la cámara. Líneas 140-141 indican a la cámara para voltear la imagen para que esté derecha arriba desde la perspectiva del usuario. La imagen de los bancos es necesario debido a la forma de que la cámara se monta en el panel frontal.
- Las líneas 143-145 establece el pin GPIO para el sensor de movimiento PIR. Hay dos esquemas de numeración de los pines GPIO: línea 144 indica al software GPIO qué esquema utiliza este programa. Línea 145 establece el pin para el sensor de PIR un pin de entrada.
- Línea 149 llama a la función "upload_ip_address" para subir un archivo a Dropbox que contiene la dirección IP asignada a este Pi de frambuesa. Se utiliza para la depuración pero también para hacerle saber que la cámara está arriba y funcionando.
Líneas 152-163 (listado 6) es el bucle principal del programa.
- Línea 152 define un bucle que se repetirá indefinidamente hasta que el se apaga, el Raspberry Pi.
- Línea 154 imprime un mensaje que indica que la cámara estará esperando para detectar el movimiento.
- Línea 155 espera una señal desde el sensor PIR que indica que se ha detectado movimiento.
- Línea 156 llama a la función "motion_detected" para sacar una fotografía o grabar un vídeo y subirlo a Dropbox.
- Línea 157 imprime un mensaje que indica que la cámara va a dormir durante unos segundos. El objetivo de este retraso es evitar demasiadas fotos y videos de ser tomado para el mismo evento de movimiento.
- Línea 158 duerme durante el número especificado de segundos.
- Después de dormir ha terminado, el programa vuelve a la línea 154.
Líneas 159-163 (listado 6) se utilizan para propósitos de depuración. Estas líneas se ejecutarán si el programa se ejecuta desde la línea de comando y se presiona Ctrl/C para detenerlo.
- Línea 160 imprime un mensaje indicando que el usuario haya dejado el programa
- Línea 161 para el módulo de cámara.
- Línea 162 para el monitoreo de los pines GPIO.
- Línea 163 para el lazo haciendo que el programa de salida.
RPI-alto-btn.py
El segundo programa "rpi-fin-btn.py" se inicia durante el proceso de arranque mediante el comando
en el archivo de sistema "/ etc/rc.local". El "&" al final del comando hacen que el programa ejecute como un proceso separado que sigue funcionando hasta que salga el programa.
El listado 7 muestra el código fuente del programa rpi-alto-btn.py:
Las líneas 2-13 inicializan el programa.
- Líneas 2-3 importar las librerías necesarias para controlar los dispositivos conectados a los pines GPIO, comandos de edición del sistema, permite al programa dormir.
- Líneas 6 y 7 definen el pin que supervisará el interruptor de apagado y el pin que controla la iluminación del LED en el interruptor.
- La línea 8 dice el software GPIO qué esquema de numeración el programa utilizará para los pines GPIO.
- Línea 9 establece el pin GPIO para controlar el LED en el interruptor para ser un pin de salida.
- Línea 10 establece el pin GPIO para monitorear el interruptor para prensas a un pin de entrada.
- Línea 11 ilumina el LED en el interruptor por el valor del pin en true.
- Línea 13 imprime un mensaje que indica que el interruptor ahora se está controlando.
Línea 18 hace que el programa espere a que el interruptor al ser presionado.
Líneas 19-21 se utilizan para la depuración. Se ejecutará cuando el programa se ejecuta desde la línea de comandos y pulse Ctrl/C estas líneas.
- Línea 20 a imprimir un mensaje que indica que el usuario detiene el programa.
- Línea 21 para el monitoreo de los pines GPIO.
Líneas 22-26 se ejecutan presionando el interruptor de apagado.
- Línea 23-25 causa el LED en el interruptor para apagar brevemente para proporcionar información al usuario que se presionó el interruptor.
- Línea 23 apaga el LED.
- Línea 24 hace que el programa a dormir durante medio segundo.
- Línea 25 nuevamente enciende el LED.
- La línea 26 utiliza la función "subprocess.call" para ejecutar el comando "sudo halt" que hará que el Pi de frambuesa para apagar.
Cuando el Raspberry Pi ha apagado el LED en el interruptor de apagado apaga indicando que es seguro desconectar la cámara de la toma de corriente.