Capitulo 3
Capitulo 3
Capitulo 3
Disuelva la levadura en agua caliente. Agregue azúcar, sal, aceite y 3 tazas de agua.
Golpee la masa, divídala en dos y colóquela en los moldes de pan. Cubra y deje
levar hasta que se duplique.
La receta pudo haberse escrito en cualquier idioma: inglés, español, chino o árabe. El único
requisito para la opción de idioma es que la persona que hace el pan lo comprenda. Si bien
los diferentes idiomas poseen distintas reglas gramaticales y sintaxis, la lógica de la receta
no debe cambiar.
Los programas informáticos adoptan muchas formas diferentes. Los sistemas operativos, el
firmware y las aplicaciones son ejemplos de programas que se encuentran en las
computadoras.
Un sistema operativo (SO) es un programa que permite que los usuarios interactúen con las
computadoras. Los sistemas operativos modernos incluyen interfaces gráficas para facilitar
la interacción del usuario. Los ejemplos de SO son Windows, Linux, OS X, Apple iOS y
Android.
Firmware son programas creados para permitir que una computadora realice una tarea
específica. El firmware suele estar presente en computadoras pequeñas, como relojes
digitales simples, dispositivos modernos y diversos subsistemas encontrados en
automóviles modernos (por ejemplo, el sistema de frenos antibloqueo (ABS) y las bolsas de
aire). Debido a la memoria limitada y a otras restricciones de recursos, los dispositivos de
IoT a menudo dependen del firmware para su funcionamiento. La funcionalidad del
firmware y el SO se superpone. A veces, el firmware también puede actuar como SO para
computadoras más simples.
Las aplicaciones son programas creados para ayudar al usuario a realizar una tarea
específica. Los ejemplos de aplicaciones son Microsoft Word, Mozilla Firefox y Calculator.
Otro beneficio de saber programar es que los programadores pueden crear sus propias
herramientas de software. ¿Necesita un filtro específico de red no disponible en el
mercado? Tal vez un proyecto requiere un análisis de datos específico. Un buen
programador puede cifrarlo.
Expresiones
Area_Triangle = (base*height)/2
Print Area_Triangle
Funciones
z= Function(x,y)
IF - THEN: esta estructura lógica permite que la computadora tome una decisión
según el resultado de una expresión. Un ejemplo de expresión es myVar > 0. Esta
expresión es verdadera si el valor almacenado en la variable myVar es mayor que
cero. Cuando el intérprete o compilador encuentra una estructura IF - THEN, evalúa
la expresión proporcionada. Si la expresión es falsa, la computadora continúa con la
siguiente estructura, ignorando el contenido del bloque IF - THEN. Si la expresión
es verdadera, la computadora ejecuta la acción asociada antes de pasar a la siguiente
instrucción del programa. (Figura 1).
Los lenguajes interpretados dependen de otro programa para analizar y ejecutar el código.
Este programa se denomina intérprete. El código permanece en texto legible para el
humano y se envía a un intérprete para su ejecución. Si bien los lenguajes interpretados
facilitan el mantenimiento y la solución de problemas de los códigos, la ejecución es más
lenta que en los lenguajes compilados. Algunos ejemplos de lenguajes interpretados son
Python, JavaScript y PHP.
Lenguajes de computadora
Al igual que los idiomas humanos, hay varios lenguajes de computadora diferentes.
Algunos lenguajes de computadora son mejores que otros para ciertos tipos de tareas.
JavaScript, un lenguaje de computadora, está diseñado para crear aplicaciones web. Con
JavaScript, un programador puede crear aplicaciones web que pueden interactuar con los
usuarios y otras aplicaciones.
Python, otro lenguaje interpretado, permite declaraciones más simples. Python es muy fácil
de usar, potente y versátil y se ha convertido en el lenguaje de preferencia de muchos
desarrolladores de IoT. Uno de los motivos principales de popularidad de Python es la
comunidad de desarrolladores; los desarrolladores de Python han creado y puesto a
disposición muchos módulos específicos que pueden importarse a cualquier programa para
prestar inmediatamente mayor funcionalidad.
Blockly es un lenguaje de programación visual que permite a los usuarios crear programas
conectando bloques que representan diversas estructuras de lenguaje lógico en lugar de
escribir el código real. Blockly se ejecuta dentro de un navegador web y puede traducir el
programa visualmente creado, como JavaScript, PHP o Python. En la figura se muestra un
ejemplo de Blockly.
C, un lenguaje compilado, es bueno para crear programas complejos y rápidos, pero sus
reglas y sintaxis estrictas dificultan su desarrollo. Creado a principios de 1970, C se ha
convertido en uno de los lenguajes de programación más utilizado de todos los tiempos. El
sistema operativo Linux se escribe en C.
Java es un lenguaje compilado que se “escribe una sola vez y se ejecuta en cualquier lugar”
(WORA). A pesar del nombre similar, Java y JavaScript no están relacionados. Java está
diseñado para ejecutarse en cualquier plataforma sin la necesidad de la recompilación. Las
aplicaciones basadas en Java requieren una plataforma de JVM (máquina virtual Java)
instalada en la computadora. JVM es el entorno donde se ejecuta el código compilado en
Java.
Procesamiento de datos y dispositivos de
IoT
Una aplicación común para los sistemas de IoT es la recopilación de datos. Los dispositivos
de IoT, como sensores, a menudo se implementan en ubicaciones donde ocurre la
recopilación de datos. La agricultura, el transporte y la manufactura son solo algunos
ejemplos de áreas donde la recopilación de datos se realiza mediante uno o más sistemas de
IoT.
Aunque la recopilación de datos es importante, los datos deben procesarse antes de que
puedan ser útiles. Los datos recopilados se pueden procesar en el punto de recopilación o se
pueden transmitir y almacenar en la nube para procesarlos en otro momento. Con
frecuencia los datos de distintas fuentes se combinan para brindar información más útil. Se
utilizan programas informáticos para procesar eficazmente los datos recolectados.
En un ejemplo agrícola, los dispositivos de IoT se pueden utilizar para supervisar el suelo y
las condiciones climáticas. Los sensores recogen datos sobre la humedad del suelo, la
temperatura y los niveles de acidez. Otros sensores pueden recopilar datos sobre los niveles
de CO2 en el aire además de la temperatura del aire, la presión barométrica y la humedad.
Todos estos datos casi no tienen uso hasta que se procesan. Se puede escribir un programa
de computadora para procesar los datos y calcular las chances de lluvia
API de software
En muchos casos, los programas deben comunicarse con otros programas, sitios web o
dispositivos. Una interfaz de programa de aplicación (API) es un conjunto de rutinas y
herramientas de software que facilita la comunicación entre programas. Gracias a las API,
las aplicaciones que se ejecutan a través de las redes pueden comunicarse entre sí,
compartir datos y solicitar servicios específicos de otras aplicaciones, por ejemplo,
preguntar a una API externa si la persona de la imagen es hombre o mujer.
Hay diferentes tipos de API disponibles, como API de sistema operativo, API de aplicación
y API de sitio web. Al crear una aplicación de administrador de archivos, un desarrollador
de software aprovechará la API de sistema operativo para copiar, mover o eliminar un
archivo. Si la aplicación del desarrollador no tiene el código necesario para realizar estas
funciones, simplemente puede solicitar al sistema operativo que las realice a través de su
API de sistema operativo expuesta.
Las aplicaciones de IoT pueden comunicarse entre sí mediante las API, pero también
pueden utilizarlas para comunicarse con otros servicios basados en la nube.
Independientemente del tipo de API, el objetivo sigue siendo el mismo: permitir que otros
programas interactúen entre sí. Los detalles sobre cómo utilizar una API específica y qué
tareas se exponen se incluyen en la documentación de la API.
La figura muestra un ejemplo de documentación de una API. Observe las tareas expuestas
por la API. Todas las tareas enumeradas pueden se utilizadas por otros programas.
API de REST
La transferencia de estado representativa (REST), o servicio web RESTful, es un tipo de
API diseñado para facilitar la interacción de los programas con Internet. Las API de REST
usan llamadas basadas en HTTP entre las diferentes aplicaciones para manipular y acceder
a la información almacenada en las bases de datos potentes.
Los recursos web solían ser identificados exclusivamente por una URL. Actualmente, los
recursos web abarcan cada entidad o cosa que puede nombrarse, identificarse o abordarse.
Las entidades pueden ser un objetivo de paso del día, una configuración de temperatura de
la casa o la frecuencia cardíaca de un marcapasos. Cada recurso ahora tiene una
identificación de recurso uniforme (URI) que generalmente comienza con una barra
diagonal, por ejemplo, /frecuenciacardíaca. Las API de REST usan el protocolo HTTP y
una URL o URI para solicitar servicios web. Dichas solicitudes REST basadas en la web
activan respuestas en formatos web bien definidos, como XML y JSON (notación de
objetos JavaScript). Mediante el uso de HTTP como protocolo, los servicios RESTful
pueden tomar prestadas operaciones de HTTP, como las acciones HTTP GET, POST, PUT
and DELETE. Un ejemplo puede ser un marcapasos que envía actualizaciones sobre la
frecuencia cardíaca promedio a una base de datos médica. El marcapasos puede utilizar una
llamada de API de REST en un formato específico (PONER de HTTP) para actualizar la
información en la base de datos.
Los sistemas de IoT que aprovechan los servicios en la nube dependen con frecuencia de
los servicios RESTful para comunicarse. Por ejemplo, considere un reloj inteligente con
capacidades climáticas, donde un dispositivo de IoT recopila la información del clima para
su ubicación actual y la muestra al usuario. Este reloj puede programarse para comunicarse
con un sistema meteorológico basado en la web a través de una URL de API de REST
(dirección web). Este tipo de URL y sus parámetros se describirán en la documentación de
la API. La figura muestra un ejemplo de URL de servicio RESTful. De la misma manera en
que un explorador web visita una página web, el reloj se contacta con la URL descrita en la
documentación de la API del sistema meteorológico y solicita, mediante la acción
OBTENER de HTTP, el clima para la ubicación actual (según el sensor del GPS). El
sistema meteorológico responderá, conforme a su propia API, con datos con formato JSON
o XML que contienen la información del clima para dicha ubicación. El código que se
ejecuta en el reloj, también creado según la API del sistema meteorológico, a su vez
muestra la información al usuario.
a) Los dispositivos deben protegerse de ataques que afecten su función o permitan que se
usen para fines no deseados sin autorización.
b) Los dispositivos deben proteger las credenciales de autenticación y los materiales clave
privados de la divulgación a partes no autorizadas.
d) Los dispositivos deben protegerse contra el uso como vectores para atacar a otros
dispositivos o hosts en Internet.
Una manera en que un hacker puede cambiar la función de un dispositivo es: acceder al
dispositivo, deshabilitar la función, instalar software nuevo en el dispositivo y reiniciarlo.
Otra forma de proteger el dispositivo es asegurarse de que el código del dispositivo (tanto
firmware como aplicación) sea el código original que se creó. Esta medida de seguridad
puede proteger el dispositivo de intentos de cambiar sus funciones, incluso si se infringió la
seguridad física. Esto se realiza “firmando” criptográficamente el código original y
garantizando que el dispositivo no se inicie si el código no está firmado. Este es el mismo
método que se utiliza para garantizar la integridad y la procedencia de los documentos. Hay
muchos enfoques que surgen en la industria para satisfacer los diferentes ángulos de este
problema, como la computación de confianza, las tecnologías de anclaje de confianza de
Cisco y el arranque seguro de Cisco. Por ejemplo, para iOS en un router, el anclaje de
confianza de Cisco y el acceso seguro de Cisco comprueban el código firmado para
garantizar que el código que se ejecuta en las plataformas de hardware de Cisco sea
auténtico y no esté modificado, estableciendo una raíz de confianza a nivel del hardware y
una identidad inmutable del dispositivo para edificar el sistema.
También es fundamental que los dispositivos de IoT se diseñen para actualizarse de forma
remota. El diseño debe incluir funciones para permitir la administración remota del
dispositivo y las actualizaciones. También deben tenerse en cuenta la eliminación de las
puertas traseras de la fase de desarrollo o las cuentas de acceso de depuración de
codificación rígida y la aplicación del acceso autorizado únicamente.
Los datos deben cifrarse mientras se reciben o transmiten a servidores locales o remotos. El
acceso remoto a los servidores o los terminales remotos también debe protegerse. Esto
garantiza que los datos conserven su integridad dado que permanecen protegidos del acceso
no autorizado y la manipulación. Los algoritmos de encriptación y los protocolos de
transmisión seguros son técnicas de uso general para proteger el software y los datos.
Bluetooth 4.1
RaPi además incluye un encabezado de 40 pines con GPIO. Los pines de GPIO
(entrada/salida de uso general) son extremadamente útiles para interactuar con el mundo
físico. Los sensores, los accionadores, los switches y los dispositivos pueden conectarse a la
GPIO y controlarse mediante el código que se ejecuta en RaPi. Otros puertos de RaPi
incluyen una salida de audio, una ranura para tarjeta SD, un puerto Ethernet, 4 puertos
USB, una interfaz de cámara (CSI), una interfaz de dispositivo (DSI) y un conector micro
USB (para alimentación).
Creada con base en Raspberry Pi, RaPi se diseñó para ser pequeña y económica. RaPi
puede ejecutar varios sistemas operativos, como Linux y Windows.
PL-App
Existen varias maneras de configurar y usar Raspberry Pi. Mediante la conexión física de
una pantalla HDMI, un ratón y un teclado USB, RaPi se convierte en una PC general y
permite al usuario tener acceso físico local. Una vez que se descarga la imagen compatible
del sistema operativo de Raspberry Pi a la tarjeta micro SD, RaPi está lista para usar.
La Figura 3 muestra una captura de pantalla de los componentes que conforman PL-App.
Raspberry Pi 3 incluye una ranura para tarjeta micro SD (Figura 1) que se usará como
dispositivo de almacenamiento para el sistema. Antes de que Raspberry Pi 3 se pueda
utilizar, debe instalarse un sistema operativo en la tarjeta micro SD que se colocará en la
ranura SD para arrancarla.
Si bien hay varias formas de instalar un sistema operativo en una tarjeta micro SD, el más
común (y probablemente el más rápido) es utilizar un archivo de imagen. Un archivo de
imagen es un archivo único que contiene una imagen del sistema de archivos completo. En
ese sentido, el archivo de imagen es una copia exacta del sistema de archivos y puede
utilizarse para reconstruir el sistema de archivos en otros medios. Los formatos de archivo
de imagen comunes son: .iso y .img.
Hay varias opciones disponibles para las herramientas de transferencia de imágenes. El que
se usa en este curso es parte del Iniciador de PL-App. Se trata de una herramienta
personalizada de transferencia de imágenes que simplifica la implementación de las
imágenes utilizadas en el curso. El Iniciador de PL-App además administra la detección y
el control acéfalo de Raspberry Pi conectada a la red.
nterpretación de Linux
Linux es un sistema operativo creado en 1991. Fue creado, y es mantenido actualmente, por
una comunidad de programadores. Linux es de código abierto, rápido, confiable y pequeño.
Requiere muy pocos recursos de hardware para ejecutarse y es altamente personalizable.
Linux es parte de diferentes plataformas y puede encontrarse en cualquier lugar, desde
“relojes a supercomputadoras”. Linux es también una opción muy popular en los
dispositivos de IoT.
Otro aspecto importante de Linux es que está diseñado para estar en la red. Las operaciones
de red y las conexiones son simples en Linux, lo que lo convierte en una buena opción para
los profesionales y administradores de redes. Cualquier persona puede obtener el código
fuente del núcleo, examinarlo, modificarlo y volver a compilarlo a disposición. Las
empresas y los usuarios son libres de modificar, reempaquetar y ejecutar el software.
Pueden redistribuir el programa con o sin cargos.
Una distribución de Linux es el término que se utiliza para describir los distintos paquetes
de Linux creados por distintas empresas. Las distribuciones de Linux (o distros) incluyen el
núcleo de Linux más varias herramientas y paquetes de software personalizados. Si bien
algunas proporcionan y cobran el soporte de Linux (orientado a empresas basadas en
Linux), la mayoría ofrece su distribución gratuita sin soporte. Debian, Red Hat, Ubuntu,
Slackware y Mint son solo algunos ejemplos de distribuciones de Linux.
Raspbian es una distribución del sistema operativo Linux creada específicamente para
Raspberry Pi. Raspbian es una variación de Debian Linux y, por lo tanto, mantiene la
estructura de Linux.
Para interactuar con el hardware de la máquina, el usuario interactúa con el shell que
interactúa con el núcleo que, a su vez, interactúa con el hardware. La figura es un diagrama
de alto nivel de Linux.
Acceso a CLI
Se crearon diferentes shells y añadieron muchas funciones para facilitar la escritura y la
interacción del usuario. Algunas de las características importantes del shell incluyen la
compleción de comandos y nombres de archivos con la tecla TAB, el historial de
comandos, los accesos directos del teclado para pasar de línea de comando y otras. Entre
los shells más populares aparecen el shell Bourne (sh), Bash (bash), el shell C (csh), el shell
C mejorado (tcsh) y el shell Z (zsh). Qué shell utilizar es una cuestión de preferencia para la
mayoría de los usuarios.
Aunque haya una CLI aún presente, el SO moderno a menudo arranca en la GUI de manera
predeterminada, ocultando la CLI al usuario. Una forma de acceder a la CLI en un sistema
operativo basado en la GUI es a través de una aplicación del emulador de terminal. Estas
aplicaciones permiten que el usuario acceda al shell y generalmente se denominan con
alguna variación de la palabra “terminal”. En Linux, los emuladores de terminal comunes
son Terminator, eterm, xterm, console y gnome-terminal. La figura muestra una captura de
pantalla de Gnome-Term, una aplicación del emulador de terminal de Linux.
Independientemente del emulador de terminal utilizado, el usuario aún decide qué shell
utilizar dentro de la aplicación del emulador de terminal. Para cambiar el shell, el usuario
debe tener el shell deseado instalado en el sistema y configurar algunas opciones en un
archivo de configuración. Si bien es importante comprender la diferencia entre emulador de
terminal y shell, reemplazar o configurar el shell predeterminado excede el alcance de este
curso.
Para invocar un comando a través del shell, simplemente escriba el nombre. El shell
intentará encontrarlo en la ruta del sistema y, si lo encuentra, lo ejecutará.
La figura muestra una lista de algunos comandos básicos de Linux y sus funciones.
Haga clic aquí para experimentar una interfaz de línea de comandos de Linux en su
navegador web.
Proceso de comandos de administración
Proceso es el término que se utiliza para hacer referencia a cualquier tarea ejecutada por el
sistema. Un programa de computadora es pasivo. Es un conjunto de instrucciones
almacenado en un disco como código ejecutable. Un proceso es en la práctica un programa
en acción. Las ID de proceso, o PID, son ID exclusivas asociadas a los procesos utilizadas
por el núcleo para identificarlos. Como con cualquier otro sistema operativo multitarea,
Linux puede administrar varios procesos al mismo tiempo. Linux también incluye
herramientas para la administración y visualización de los procesos. Los siguientes son
algunos comandos de administración de procesos:
ps: este comando se utiliza para enumerar los procesos en ejecución en el sistema
cuando se invoca. Se puede indicar a ps que muestre los procesos en ejecución que
pertenecen al usuario actual o a otros usuarios. Si bien enumerar procesos no
requiere privilegios de raíz, eliminar o modificar otros procesos del usuario puede
que lo haga.
top: este comando también se utiliza para indicar procesos en ejecución pero, a
diferencia de ps, top sigue mostrando los procesos en ejecución dinámicamente.
Presione q para salir de top.
kill:: este comando se utiliza para modificar el comportamiento de un proceso
específico. Según los parámetros, kill eliminará, reiniciará o detendrá un proceso.
En muchos casos, el usuario ejecutará ps o top antes de ejecutar kill. Esto se hace
para que el usuario adquiera la PID de un proceso antes de ejecutar kill.
rod@machine: $ ls -l My_Awesome_File
user@machine: $
El usuario que posee el archivo puede leer (Read), escribir (Write) y ejecutar
(eXecute) el archivo. Esto se representa con el primer “rwx” (de izquierda a
derecha).
El grupo que posee el archivo puede leer (Read) y escribir (Write) el archivo. Esto
se representa con “rw-”.
Cualquier otro usuario o grupo del sistema solo puede leer (Read) el archivo. Esto
se representa con “r--”.
Como mencionamos antes, los permisos de archivos son una parte fundamental de Linux y
no se pueden eliminar. Un usuario tiene tanto derecho a un archivo como el permiso del
archivo se lo permite. El único usuario que puede anular el permiso de un archivo en un
sistema Linux es el usuario raíz. Al tener el poder de anular los permisos de archivos, el
usuario raíz puede escribir a cualquier archivo. Dado que todo en Linux se trata como un
archivo, el usuario raíz tiene control total sobre el sistema Linux.
Una variable es una entidad de programación utilizada para almacenar datos. Básicamente,
una variable es una parte de la memoria que puede recibir un nombre legible para el
almacenamiento de datos y la recuperación. También se puede cambiar el contenido de una
variable mientras se ejecuta el programa.
Crear una nueva variable en Blockly es sencillo: se debe arrastrar el bloque variable al
espacio de trabajo y completar la ranura de valor. La figura muestra una variable de
Blockly.
Blockly también admite funciones. Al igual que las variables, Blockly tiene bloques
específicos para representar funciones. Asimismo, los programadores simplemente
seleccionan y arrastran los bloques de funciones al área del espacio de trabajo y completan
las ranuras requeridas.
Otros bloques están disponibles, como el bloque IF - THEN, el bloque WHILE y el bloque
FOR. También hay bloques específicos para los sensores y los accionadores.
Por último, Blockly se puede utilizar para traducir el código basado en bloques en Python o
JavaScript. Esto es muy útil para los programadores principiantes.
Subordinada IF - THEN
La estructura subordinada IF - THEN se utiliza para permitir que el código tome
decisiones. Al probar la veracidad de una expresión, el programa pasará a la siguiente
declaración si la expresión se evalúa como falsa. Si la expresión es verdadera, la acción
THEN se ejecuta antes de pasar a la siguiente declaración del código.
Bucle FOR
El bucle FOR se utiliza para repetir la ejecución de un bloque específico de un código una
cantidad específica de veces. Es común utilizar el bucle FOR cuando la cantidad de
repeticiones se conoce de antemano.
El programa Blockly que se muestra en la figura utiliza el bucle FOR para determinar todos
los números primos entre 1 y 100. Los números primos son los números divisibles solo por
1 o por el número en sí y se publican en la pantalla, mientras que los números que no son
primos se ignoran.
El programa utiliza dos bucles FOR para calcular el resto de la división entre el número que
se evalúa y los números entre 2 y el número mismo. Si el resto de la división es cero, el
número no es un número primo. Si ninguna división produce un resto equivalente a cero,
entonces es un número primo. El programa publica el número primo en la pantalla y
continúa con la evaluación del siguiente número; solo se detiene cuando llega a 100.
El código de Blockly en la figura es: count with j from 1 to 100 by 1do if j > 1do count with i
from 2 to j by 1do et remainder to remainder of j + iif remainder = 0do break out of
loopelse Write on screen jPrint on screen "is a prime"
Bucle WHILE
El bucle WHILE se utiliza para ejecutar un bloque de códigos siempre que una condición
sea verdadera. El código en el bucle WHILE a menudo modifica las entidades y las
variables para finalmente hacer que la expresión sea falsa. Si la expresión comprobada por
WHILE nunca se torna falsa, el bucle se ejecuta continuamente y se denomina bucle
infinito. Por lo general, no se recomiendan bucles infinitos en la programación.
El programa Blockly que se muestra en la figura utiliza el bucle WHILE para crear un
juego de adivinanzas. El programa elije un número al azar entre 1 y 10 y solicita al usuario
que intente adivinarlo. El programa seguirá repitiendo la conjetura hasta que el usuario
adivine el número correcto.
La legibilidad es importante
A pesar del hecho de que Python está diseñado para ser simple, aún hay una curva de
aprendizaje. Para que conocer Python sea aún más fácil, un principiante puede utilizar
Blockly para mejorar la comprensión de Python.
Si bien los distintos lenguajes de programación tienen diferente semántica y sintaxis, todos
comparten la misma lógica de programación. Los principiantes pueden utilizar Blockly para
crear fácilmente un programa independiente del lenguaje, exportarlo como código de
Python y usar el código recientemente creado para aprender la sintaxis, la estructura y la
semántica de Python.
Interpretador de Python
Python es un lenguaje interpretado; por lo tanto, requiere un intérprete para analizar y
ejecutar el código de Python. El interpretador de Python comprende y ejecuta el código de
Python. El hecho de que el código de Python pueda crearse en cualquier editor de texto y
que los intérpretes de Python estén disponibles para muchos sistemas operativos permite
que los desarrolladores de Python creen e implementen los programas de Python
prácticamente en cualquier sistema operativo. Las herramientas de terceros, como Py2exe y
Pyinstaller, también pueden utilizarse para incluir el código fuente de Python en un
archivo ejecutable, lo que elimina la necesidad de intérpretes de Python al ejecutar el
código de Python.
Para iniciar el intérprete, simplemente escriba python o python3 en el indicador del shell.
Algunos sistemas heredados todavía se están ejecutando en una versión anterior de Python
2, pero muchos sistemas nuevos están migrando a la nueva versión 3 de Phyton. La versión
de Python está impresa en la primera línea cuando se inicia el intérprete (Figura 1). Este
curso se basa en código de Python 3 y aunque es bastante compatible con la versión
anterior Python 2, algunas funciones pueden tener diferente conducta.
El indicador >>> indica que el intérprete está listo y espera los comandos.
Otra forma de utilizar el intérprete es python -c command [arg] ... que ejecuta las
declaraciones en el comando. Como las declaraciones de Python suelen contener espacios u
otros caracteres determinados del shell, se recomienda incluir el comando completo entre
comillas simples.
El intérprete actúa como calculadora simple. Puede ingresar una expresión y escribirá el
valor. La sintaxis de la expresión es directa. Los operadores +, -, * y / funcionan al igual
que en la mayoría de los otros lenguajes (por ejemplo, Pascal o C). Los paréntesis (())
pueden utilizarse para agrupar, como se muestra en la Figura 1.
Los intentos de utilizar una variable no definida (sin ningún valor asignado) resultarán en
un error, como se muestra en la Figura 4.
Las secuencias, definidas como secuencias de caracteres, también pueden manejarse desde
el modo interactivo. Utilice el carácter de barra invertida (“\”) para sustraerse de los
caracteres. Por ejemplo, una cadena que utiliza comillas dobles, pero que también necesita
utilizar una comilla doble dentro de la cadena. Si la cadena se ingresa de la siguiente
manera: "I really "need" this"., Python se confundirá y pensará que la primera comilla
doble dentro de la cadena finaliza realmente la cadena. Si coloca una barra invertida (\)
antes de las comillas dobles dentro de la cadena de la siguiente manera: "I really \"need\"
this", la barra invertida (\) hará que Python se sustraiga o ignore el carácter que sigue.
Las comillas simples o comillas dobles pueden utilizarse para envolver las cadenas, como
se muestra en la Figura 5.
Las funciones son una parte importante de muchos lenguajes de programación. Las
funciones permiten que un bloque de códigos reciba un nombre y se vuelva a utilizar según
sea necesario. El siguiente ejemplo define una función para agregar dos números y publicar
el resultado, como se muestra en la Figura 7.
Range(): la función range() genera una lista de números utilizados generalmente para iterar
con los bucles FOR. La Figura 1 muestra ejemplos de la función range().
range([start], stop[, step]: a partir del número de secuencia, genera números hasta dicho
número (sin incluirlo), diferenciando entre cada número en la secuencia.
Tuplas
Una tupla es una secuencia de objetos incambiables de Python. Las tuplas son secuencias
separadas por paréntesis. La Figura 2 muestra ejemplos de tuplas.
Listas
Las listas son una secuencia de objetos cambiables de Python. Las listas pueden crearse
configurando distintos valores separados por comas entre corchetes. La Figura 3 muestra
ejemplos de listas y cómo pueden actualizarse.
Conjuntos
Diccionario
Un diccionario es una lista de elementos separados por comas. Cada elemento es una
combinación de un valor y una clave única. Cada tecla se separa de su valor por dos puntos.
El diccionario completo se escribe entre llaves. Se puede acceder a, actualizar o eliminar
los elementos del diccionario. También hay muchas funciones integradas en el diccionario,
como la función que compara elementos dentro de diferentes diccionarios y la que
proporciona un conteo de la cantidad total de elementos de un diccionario. La Figura 5
muestra ejemplos de diccionarios.
La Figura 1 muestra un fragmento del código que crea un módulo de Python para calcular y
publicar la serie Fibonacci hasta el número N.
El código anterior se creó en un editor de texto y guardó como fibo.py. Ahora que el
módulo se ha creado y guardado en el disco, se puede importar a cualquier otro programa
de Python y alimentar al intérprete a través de la palabra clave import, como se muestra en
la Figura 2.
Observe que el intérprete no ejecuta el contenido de fibo.py, sino que sabe dónde encontrar
las funciones fib() y fib2(). Para usar el módulo y sus funciones, simplemente llámelos por
su nombre, como se muestra en la Figura 3.
Los módulos comunes que verá en IoT y en este curso incluyen los módulos de
procesamiento de datos (funciones matemáticas), los módulos de autoevaluación (nivel de
batería y prueba de memoria), los módulos de seguridad (hashes, cifrado/descifrado) y los
módulos de servidor de red y cliente (Web, FTP, NTP, etc.).
IF - THEN en Python
Al igual que otros lenguajes, Python implementa la estructura IF - THEN. Los bloques IF -
THEN se pueden utilizar para permitir que el código tome decisiones según el resultado de
una expresión, como se muestra en la figura.
El bucle WHILE calcula el término siguiente en la serie Fibonacci siempre que la condición
b < 10 sea verdadera. Como en C, Python asume cualquier valor del número entero que no
sea cero como verdadero y cero como falso. La prueba que se utiliza en la figura es una
comparación simple.
Observe que el cuerpo del bucle está indentado. La indentación es la forma en que Python
agrupa las declaraciones. En el indicador interactivo, debe escribir una ficha o espacio para
cada línea indentada. Las entradas más complejas de Python deben realizarse con un editor
de texto. Cuando una declaración compuesta se ingresa interactivamente, debe ir secundada
por una línea en blanco para indicar la finalización (porque el analizador no puede adivinar
qué línea será la última). Observe que cada línea dentro de un bloque básico se debe
indentar por la misma cantidad.
Dana Lewis ha vivido con diabetes tipo 1 desde los 14 años. El páncreas de las personas
con diabetes tipo 1 no produce suficiente insulina para administrar el azúcar en la
circulación sanguínea. Las personas como Dana deben supervisar y corregir los niveles de
insulina. Debido a que el monitor que utilizaba tenía muchos defectos, Dana y su esposo
decidieron utilizar Raspberry Pi para construir un páncreas artificial, como se muestra en la
figura.
Robot Pi 4Borg
La figura muestra un equipo robótico asequible de los expertos en robótica de PiBorg. Es
educativo y divertido.
Otro ejemplo se relaciona con el tamaño; si bien RaPi es muy pequeña y tiene pocos
requisitos de energía, algunos proyectos pueden requerir controladores incluso más
pequeños. Para esas situaciones, puede ser mejor trabajar con un microcontrolador de
Arduino. Arduino también es pequeño y consume muy poca energía, pero incluye pines
analógicos. Esto hace que Arduino sea perfecto para trabajar con sensores y dispositivos
analógicos.
En el modelo, los sensores monitorean el entorno y garantizan que los valores permanezcan
dentro de un umbral predefinido. Si el valor monitoreado supera el umbral definido, se
toman medidas. El detector de humo, un sensor que monitorea los niveles de CO2 en el
hogar, tiene un valor predefinido de 0,4. Si el nivel medido supera 0,4, la alarma se
desactiva. El detector de humo no tiene ninguna funcionalidad controlada por el usuario,
simplemente responde al entorno.
Las conexiones de red entre el gateway doméstico y otros dispositivos de red también están
representadas. Observe cómo el gateway doméstico se conecta a un cable módem que, a su
vez, se conecta a un divisor. El divisor divide la señal proveniente del ISP y envía señales
de televisión por cable al televisor y datos al cable módem. El par de cable módem y
divisor es lo que proporciona conectividad de Internet al gateway doméstico y al hogar
entero.
Nota: si bien PT 7.0 es potente y flexible, varios sensores y accionadores pueden tener
diferentes conexiones. PT 7.0 implementa Ethernet por cable e inalámbrica, pero no
implementa otras conexiones posibles.
Nota: si bien no es común encontrar Python en las MCU en la vida real, PT 7.0 implementa
el soporte de Python para comodidad de los usuarios.