En el tutorial anterior , configuramos con éxito un escritorio Linux Raspberry Pi (RPi). Ahora aprendamos Python.
Podríamos comenzar explicando cómo controlar el hardware usando scripts de Python, pero eso anularía el propósito de usar Raspberry Pi y un lenguaje de muy alto nivel (VHLL), como Python, para controlar la electrónica.
Por supuesto, puede controlar fácilmente la electrónica y diseñar aplicaciones integradas con cualquier microcontrolador. La razón por la que utilizamos RPi (una computadora de placa única) y un VHLL es para utilizar capacidades de programación de escritorio, web y de red en aplicaciones integradas. Esto nos permite diseñar aplicaciones potentes y complejas que emplean interfaces de usuario, gráficos, redes y bases de datos para manipular, compartir y utilizar datos de sensores integrados y diseñar aplicaciones integradas que se pueden conectar en red a sistemas de escritorio o servidores.
Con RPi, podemos interactuar con una variedad de dispositivos (o circuitos) integrados complementarios que proporcionan datos a nivel de máquina en aplicaciones específicas. Luego, estos datos pueden ser manipulados y utilizados por un VHLL (como Python) para diseñar grandes aplicaciones en diversos nichos. Esto puede incluir biometría, robótica, automatización, juegos y computación en la nube, etc.
Por ejemplo, podemos conectar un módulo de huellas dactilares con Raspberry Pi y diseñar un sistema de asistencia biométrica. Utilizando las funciones de Python, también podemos desarrollar una solución de software en este sistema de asistencia biométrica donde un gerente de recursos humanos puede ver un registro de asistencia, evaluar la productividad de los empleados y calcular salarios y pagos de horas extras. Podríamos desarrollar un software de gestión de recursos humanos totalmente integrado.
Simplemente conectando una matriz de LED, una pantalla LCD de caracteres o una pantalla LCD gráfica con RPi, podemos diseñar un tablero de visualización controlado remotamente que muestre mensajes personalizados a través de una solución GUI basada en escritorio RPi. Conectando un sensor acelerómetro y algunos botones, podemos desarrollar un gamepad personalizado para jugar en Raspberry Pi.
Hay posibilidades ilimitadas cuando se combinan la electrónica, un sistema operativo y las capacidades de un VHLL. Una base sólida en Python significa que puedes crear aplicaciones complejas que van más allá de un pasatiempo de programación básico.
Lenguaje de programación
Python es un lenguaje de muy alto nivel (VHLL) que también se puede utilizar para codificar a nivel de bits y bytes. Es un lenguaje de programación multiplataforma, orientado a objetos y de propósito general que puede ejecutarse en todos los principales sistemas operativos y plataformas de hardware. Aunque Python está orientado a objetos, no se limita a un patrón de diseño de software OOP.
Esto significa que es posible diseñar soluciones de software en Python utilizando programación procedimental o funcional. Los patrones de diseño de software como Singleton, Model-View-Controller (MVC), Template, Proxy, Command, Observer, Factory y otros se pueden implementar en Python. Las características orientadas a objetos de Python son similares a las de C++, pero más simples.
Como VHLL, Python tiene un alto nivel de abstracción del hardware subyacente. Además, Python puede integrarse con una variedad de otros lenguajes de programación y combinarse con componentes de software escritos en otros lenguajes. Esta versatilidad es una ventaja del software en casi todos los nichos.
Sin embargo, Python es un lenguaje interpretado, por lo que suele ser lento en comparación con los lenguajes compilados. Esto puede resultar un desafío al diseñar aplicaciones que necesitan responder a eventos urgentes. Pero es posible precompilar Python o utilizar módulos escritos en otros lenguajes compilados. Y en la mayoría de los casos, el rendimiento de una aplicación Python es suficiente.
Cuando se utiliza para aplicaciones integradas en Raspberry Pi, los usuarios pueden encontrar limitaciones. Ejecutar una aplicación integrada con Python puede ser más lento que ejecutar código de máquina en un microcontrolador. El RPi también carece de algunas características de hardware importantes, como convertidores de analógico a digital, reloj en tiempo real e interrupciones de hardware.
Cualquier requisito para convertidores analógicos a digitales o reloj en tiempo real se puede compensar conectando el ADC o RTC externo al RPi. Para las interrupciones, debe confiar en la API de interrupciones de Linux. Las interrupciones de software necesitarán una gestión cuidadosa de los subprocesos o no se implementarán tan rápido como las interrupciones de hardware reales.
Formularios
Python es un lenguaje de programación de propósito general que se puede utilizar en varios dominios de aplicaciones. Tiene una biblioteca estándar y varios módulos de extensión que le permiten utilizar Python en diversas aplicaciones y soluciones de software.
Al ejecutar Python en computadoras de placa única como Raspberry Pi, Beaglebone y otras en entornos Linux completos, se puede utilizar en aplicaciones integradas. Estas computadoras de placa única pueden conectarse con microcontroladores y chips programables para diseñar aplicaciones interesantes en sistemas integrados, robótica, automatización, biometría y otros nichos.
Se puede utilizar una implementación de tres Python, llamada MicroPython, para programar una placa de microcontrolador como pyBoard. Esto es similar a cómo se usa C integrado para programar Arduino y otros microcontroladores.
MicroPython en pyBoard le permite programar aplicaciones de microcontrolador usando Python, así como compilar Python en código de bytes o código de máquina.
Para evitar confusiones, utilizaremos Python V3 convencional en el RPi. Con el soporte de módulos de extensión, interactuará con circuitos electrónicos y hardware a través de entrada/salida de propósito general (GPIO) y otras interfaces de hardware RPi. MicroPython produce código de bytes ejecutable o código de máquina que se puede ejecutar como firmware en pyBoard.
Usando RPi, diseñaremos aplicaciones Python de propósito general que se ejecutan como procesos de Linux en lugar de código de bytes de firmware o código de máquina. Una ventaja de usar Python en el control estadístico de procesos (SBC), en lugar de Micropython en pyBoard, es que obtenemos acceso completo a la biblioteca estándar y a los módulos de extensión de Python. Micropython carece de la mayoría de las funciones de la biblioteca estándar.
Otras ventajas de usar Python convencional significan que podemos:
- Importe módulos de control de hardware para configurar y administrar componentes electrónicos a través de GPIO e interfaces de hardware.
- Utilice la biblioteca de sockets para conectarse a los servicios de Internet disponibles
- Obtenga acceso de intérprete a dispositivos de hardware a través del puerto serie USB y el protocolo Telnet
- Responda a dispositivos externos y eventos de temporizador con la ayuda de las API de Linux y módulos especiales de Python.
- Escriba secuencias de inicialización que implementen una aplicación Python de cualquier complejidad.
Gracias a estas características y versatilidad, Python se ha convertido en la mejor opción a la hora de programar aplicaciones de Internet de las cosas (IoT). Además, Python se puede utilizar para programación de escritorio, desarrollo web, desarrollo de software, aplicaciones comerciales e informática científica. Con la ayuda de la biblioteca Tk GUI y kits de herramientas como Qt, wxWidgets y Kivy, puede diseñar GUI de escritorio.
La biblioteca estándar de Python admite todos los principales protocolos de Internet y el uso de HTML, JSON y XML. Existen varios marcos de Python para el desarrollo web e Internet, incluidos Django, Flask, Bottle, Pyramid y sistemas de gestión de contenido basados en Python, como Django CMS y Plone.
Además, se pueden utilizar herramientas basadas en Python como SCons, Roundup, Apache Gump y Buildbot para el desarrollo de software. También se puede utilizar para soluciones de comercio electrónico y planificación de recursos empresariales (ERP). Hay paquetes disponibles que se pueden utilizar para informática científica, análisis y visualización de datos.
Python tiene mucho que ofrecer, pero depende del desarrollador decidir cómo utilizar mejor sus recursos con la electrónica.
Implementaciones
Python tiene cuatro implementaciones con calidad de producción.
1. Pitón clásico. Esta es la implementación más actualizada y completa de Python. CPython, incluido su intérprete, compilador, biblioteca estándar y módulos de extensión, está codificado en lenguaje C. Puede ejecutarse en cualquier plataforma compatible con C. CPython es la implementación de facto del lenguaje de programación Python y normalmente se denomina "Python". . No requiere ningún entorno de programación especial.
2. Jython. Compatible con Java 7 y superiores, Jython es una implementación de Python desarrollada para máquinas virtuales Java (JVM). La última versión, Jython 2.7.1, es compatible con Python 2.7 pero no con Python V3. Las versiones de Python V2 y V3 también son incompatibles entre sí.
Jython puede utilizar todas las bibliotecas y marcos de Java y es compatible con cualquier clase de Java como módulo de extensión. Las aplicaciones Jython son esencialmente aplicaciones Java puras que pueden ejecutarse en cualquier dispositivo habilitado para JVM y están disponibles para casi todos los sistemas operativos y plataformas de hardware.
3. FerroPython. IronPython es una implementación .Net (Common Language Runtime o CLR) de Python. CLR ahora es de código abierto y está adaptado a Linux y macOS. El CLR también tiene una implementación multiplataforma, Mono, que puede ejecutarse en Windows y otros sistemas operativos que no sean de Microsoft.
IronPython puede ejecutarse en cualquier máquina de destino con un marco .Net. Puede utilizar cualquier clase CLR como módulo de extensión, incluidas las clases escritas en C# y Visual Basic .Net.
4. PyPy-PyPy. Una implementación alternativa de CPython que puede generar código de máquina nativo "justo a tiempo". PyPy es más rápido en velocidad y administración de memoria en comparación con todas las demás implementaciones, y el crédito se debe a su compilación justo a tiempo en código de máquina. CPython es más rápido que Jython y IronPython y está sólo ligeramente por detrás de PyPy.
PyPy es compatible con Python V2 y V3. Es compatible con la mayoría de las bibliotecas estándar de Python y puede usar cualquier extensión codificada en C. De forma predeterminada, no tiene pila y proporciona microprocesos para la concurrencia.
También hay disponible una implementación de Python de alto rendimiento conocida como Pyston. Sin embargo, las implementaciones de Python difieren según el entorno en el que se ejecutan y las bibliotecas, módulos de extensión y marcos que pueden utilizar. La implementación seleccionada también influye en el empaquetado y distribución de la aplicación.
Puede instalar y ejecutar cualquiera de las implementaciones de Python anteriores en Raspberry Pi. De forma predeterminada, el RPi usa CPython. Para un mayor rendimiento, se puede instalar PyPy, que es de dos a 10 veces más rápido que Python convencional. PyPy y CPython pueden usar módulos de extensión codificados en C, pero si necesita bibliotecas y módulos Java, es posible que prefiera Jython. Para bibliotecas CLR y módulos de extensión, considere IronPython.
Recuerde: el RPi nunca fue diseñado para aplicaciones en las que el tiempo es crítico. Por tanto, continuaremos con la instalación predeterminada de Python en Raspbian. Es CPython y proporciona todas las características del lenguaje Python.
Biblioteca estándar y módulos de extensión
La biblioteca estándar de Python incluye módulos integrados (escritos en C) para tareas relacionadas con el sistema operativo y módulos (escritos en Python) para tareas de programación comunes como manipulación de datos, manipulación de cadenas, operaciones de fecha y hora, operaciones matemáticas, archivos y directorios. acceso, compresión de datos, etc.
Los módulos de extensión, ya sea de la biblioteca estándar o de la implementación específica de Python, permiten funciones adicionales para el sistema operativo subyacente u otros componentes de software. También puede integrar Python en aplicaciones codificadas en otros lenguajes a través de extensiones de Python específicas de la aplicación.
Algunos ejemplos:
- CPython puede usar bibliotecas y clases de C++ como módulos de extensión
- Jython puede utilizar bibliotecas y clases de Java como módulos de extensión
- IronPython puede utilizar bibliotecas y clases CLR como módulos de extensión.
Sin embargo, cuando se utilizan módulos de extensión, la portabilidad multiplataforma de una aplicación Python puede verse comprometida y requerir dependencias adicionales. Por ejemplo, Jython requerirá que JVM compile bibliotecas y clases de Java.
Entornos de programación
Normalmente, los archivos Python son archivos de texto que son scripts o módulos. Los scripts son archivos que se ejecutan directamente como un proceso. Los módulos son archivos fuente importados para proporcionar cierta funcionalidad al script. Aunque un archivo Python puede hacerlo porque los módulos pueden servir como scripts ejecutables, proporcionando funcionalidad para otros scripts al importarlos.
Básicamente, cualquier aplicación Python puede verse como una colección de scripts y módulos o solo un script.
Para desarrollar software, necesitará un editor de texto para escribir código para scripts y módulos de Python, así como un compilador e intérprete para generar código ejecutable. Hay varios entornos de desarrollo integrados disponibles que combinan un editor de texto, un compilador y un intérprete en un único entorno de programación.
Los entornos de desarrollo integrados (IDE) populares para Python incluyen IDLE, Eclipse, Geany y Thonny. Raspbian viene con la instalación IDLE predeterminada. La mayoría de los IDE proporcionan un intérprete a través del cual los códigos Python se pueden ejecutar de forma interactiva. Éstas se denominan sesiones interactivas. Estas sesiones interactivas se pueden identificar mediante una cadena de mensaje “>>>” que indica que se espera que se ejecuten algunas instrucciones de Python.
Ejecución de scripts
Los scripts de Python se pueden ejecutar en el IDE o en un intérprete de Python de línea de comandos. Dentro del IDE, las declaraciones de Python también se pueden ejecutar desde una sesión interactiva, aunque normalmente es mejor empaquetar su aplicación como un script de Python. Por ejemplo, en RPi, los scripts de Python se pueden ejecutar en IDLE (u otro IDE de Python) o en el shell Bash.
Al ejecutar scripts de Python desde el shell, se puede utilizar el comando "python" o "python3". El comando debe seguir el nombre y/o la ruta del script Python de destino y cualquier argumento opcional según sea necesario. El shell bash también permite varias líneas como un único argumento que se puede utilizar para ejecutar varias declaraciones de código Python juntas. Sin embargo, algunos shells solo permiten un comando de una sola línea donde se pueden ejecutar una o más declaraciones de Python separadas por punto y coma.
Los archivos de script de Python tienen una extensión .py (sufijo del nombre del archivo) y los archivos de código de bytes compatibles con Python tienen extensiones .pyc o .pyo.
Para ejecutar scripts de Python desde el shell bash, se pueden utilizar estos comandos:
Nombre del script Python.py
o
python3 nombre-script-.py
Python 2.7 puede ser la versión predeterminada de Python en una máquina. Al ejecutar el comando Python , el script se ejecutará en la versión predeterminada. Al ejecutar el comando python3 o python3.5 , el script se ejecutará explícitamente en las versiones V3 o V3.5 respectivamente (si están instaladas).
En Raspbian, los scripts de Python se pueden escribir y compilar usando IDLE. Puede abrir IDLE navegando a Programación -> Python 3 (IDLE).

Navegando a IDLE (Python 3) en Raspbian.
IDLE se abrirá con una sesión activa e interactiva como esta:

El IDE IDLE de Python en Raspbian.
Para escribir un script o módulo de Python, haga clic en Archivos -> Nuevo archivo.

Creando un nuevo archivo para escribir un script Python en IDLE en Raspbian.
Escriba su script Python en el editor de texto y guárdelo haciendo clic en Archivos -> Guardar.

Guardar un script de Python en IDLE en Raspbian.
Para ejecutar un script de Python, ábralo en el IDE y haga clic en Ejecutar -> Ejecutar módulo o presione F5.

Ejecutando el script Python en IDLE en Raspbian.
Recursos
Python es un lenguaje de programación maduro que ofrece aprendizaje continuo. El mejor lugar para explorar Python es su sitio web . Lo mismo ocurre con Jython , FerroPython y PyPy . Los paquetes de biblioteca estándar y los módulos de extensión se pueden descargar desde el Índice de paquetes de Python .
Costos
CPython está cubierto por la licencia Python Software Foundation versión 2, que es compatible con la licencia pública GNU (GPL). Jython, IronPython y PyPy también están cubiertos por licencias gratuitas. Esto significa que cualquier cosa descargada desde los sitios principales de Python, Jython, IronPython y PyPy es completamente gratuita.
Muchas fuentes, herramientas y módulos de extensión de Python de terceros ofrecen licencias similares o están cubiertos por la GPL o la GPL reducida (LGPL). Algunos módulos y herramientas desarrollados comercialmente pueden requerir una tarifa. Sin embargo, Python se puede utilizar para cualquier desarrollo de software propietario, gratuito o de código abierto.
En el próximo tutorial cubriremos los fundamentos del lenguaje de programación Python.