Categorías
Tecnología

Sistemas Embebidos: Todo lo que tienes que saber

Sistemas embebidos. ¿Que son y cuales son sus carácterísticas?

Los sistemas embebidos son componentes fundamentales en nuestra vida cotidiana, aunque muchas veces pasan desapercibidos. Están en nuestros teléfonos, electrodomésticos, automóviles y mucho más. En esta entrada, exploraremos a fondo qué son los sistemas embebidos, cómo funcionan y cuál es su importancia en el mundo tecnológico actual. También nos sumergiremos en dos plataformas populares, Raspberry Pi y Arduino, y en los lenguajes de programación C y C++, que son pilares en este campo. Por último, hablaremos sobre el uso de Linux embebido en estos sistemas.

¿Qué Son los Sistemas Embebidos?

Los sistemas embebidos, también conocidos como sistemas empotrados, son sistemas informáticos diseñados para realizar tareas específicas. Están «embebidos» en otros dispositivos o sistemas más grandes, y su función principal es controlar y monitorear estos sistemas. Esto significa que no son como las computadoras personales tradicionales, sino más bien microprocesadores o microcontroladores programados para realizar una tarea determinada.

¿Cómo Funcionan los Sistemas Embebidos?

Los sistemas embebidos funcionan mediante el uso de software y hardware especializados. El software se programa para realizar tareas específicas, y el hardware se adapta para optimizar el rendimiento. Por ejemplo, en un automóvil, un sistema embebido puede controlar el motor, la transmisión, el sistema de frenos y la navegación. Esto asegura que todas las funciones del automóvil funcionen de manera eficiente y coordinada.

Plataformas de Entrada al Mundo de los Sistemas Embebidos

Dos plataformas populares que han hecho que los sistemas embebidos sean accesibles para entusiastas y estudiantes son Raspberry Pi y Arduino. Raspberry Pi es una pequeña computadora de placa única que se utiliza para aprender programación y realizar proyectos DIY. Arduino, por otro lado, es una plataforma de hardware de código abierto con una comunidad activa que se enfoca en la creación de proyectos electrónicos interactivos.

Lenguajes de Programación en Sistemas Embebidos

En el mundo de los sistemas embebidos, los lenguajes de programación C y C++ son los más utilizados debido a su eficiencia y capacidad para interactuar directamente con el hardware. Estos lenguajes permiten un control preciso y un rendimiento óptimo en dispositivos con recursos limitados.

Aunque C y C++ son los lenguages más utilizados, el lenguaje de programación Rust está avanzando rapidamente por lo que es muy interesante tenerlo en cuenta como una opción muy util en el medio plazo.

Linux Embebido

Linux, el sistema operativo de código abierto, también juega un papel importante en los sistemas embebidos. Linux embebido es una versión adaptada de Linux diseñada para sistemas con recursos limitados. Proporciona una base sólida y confiable para ejecutar aplicaciones en una amplia variedad de dispositivos, desde routers hasta sistemas de entretenimiento en automóviles.

Conclusión

Los sistemas embebidos son una parte esencial de la tecnología moderna, y gracias a plataformas como Raspberry Pi y Arduino, así como a los lenguajes de programación C y C++, se han convertido en una puerta de entrada accesible para entusiastas y estudiantes. Además, el uso de Linux embebido asegura la confiabilidad y versatilidad de estos sistemas. ¡Sigue explorando nuestro blog para obtener más información sobre la tecnología y la informática!

Categorías
Tecnología

¿Qué es Arduino en realidad?

Photo by Daniel Andrade on Unsplash


Lo sé, has oído hablar del Arduino. Incluso has usado algunas placas y las has programado para hacer un pequeño proyecto.

Pero en este post, quiero dar una mirada diferente al Arduino.

No como un aficionado. Sino como un ingeniero con algunos conocimientos de sistemas embebidos.

Así que sin más preámbulos, ¡comencemos!

¿Es hardware?
Por supuesto. Arduino es una serie de placas como Arduino nano, Arduino UNO, etc.

Todas tienen diferentes características pero una cosa en común. Todas se programan de la misma manera.

Y algo clave (que veremos más adelante) es que son de código abierto.

Es decir, tienes los diagramas de cableado y la lista de componentes disponibles.

Así que si quisieras, podrías hacer una placa igual o modificarla a tu gusto.

¿Pero, eso es todo?

No.

¿Es un software?
Sí, señor. En realidad, la clave para que todas las placas Arduino (y compatibles) se programen de la misma manera es el SW que utilizan.

Todos los que desarrollamos en Arduino usamos las funciones digitalWrite y similares sin pensarlo demasiado.

Pero, ¿qué ocurre cuando llamamos a esa función?

Pues aquí está el secreto.

En cada placa, dependiendo del microcontrolador (Atmel, ARM, Espressif) las operaciones que se realizan entre bambalinas serán diferentes.

¿Y sabes dónde se define todo eso?

Dentro del core de Arduino.

El fabricante de la placa desarrolla el core de Arduino. Ya sea Arduino o, en el caso de una placa compatible, el fabricante correspondiente.

Pero como el HW es de código abierto, la «plataforma» también lo es, por lo que está perfectamente especificado cómo tiene que ser este core.

https://arduino.github.io/arduino-cli/0.23/platform-specification/


Así que si quieres hacer una placa con un microcontrolador raro/nuevo/lo que sea, puedes hacer esa placa compatible con Arduino.

¿Y eso es todo?

¡No querido!

¿Es un IDE?
Exactamente.
Porque puedes tener una gran placa y un gran núcleo, pero falta una cosa más.

Tu código

El código que escribes para controlar la temperatura de tu casa o la humedad de tus plantas.

Tu código tiene que ser compilado junto con el núcleo.
Y, el «binario» resultante hay que grabarlo en la placa.

Todas esas cosas las hace el IDE de Arduino.

Pero, pero, pero. Igual que podemos usar placas Arduino compatibles o podemos crear nuestro propio Arduino Core para nuestra placa personalizada…

…podemos usar otros IDEs para compilar y flashear placas Arduino.

Una alternativa interesante al uso de Arduino IDE es el uso de Platform.io junto con VS Code.

(Si quieres saber más sobre VS Code aquí tienes un artículo que escribí hace tiempo hablando de las maravillas de VS Code. Eso si, está en inglés. Aunque como mi inglés no es para tirar cohetes seguro que no te cuesta mucho leerlo)

https://medium.com/codex/visual-studio-code-the-best-ide-ae9bb3991535

¿Y eso es todo?
Nope

¿Es un programador?
Es probable que, si eres joven, no lo hayas experimentado, pero en el pasado, flashear un microcontrolador era una tarea muy difícil.

Casi siempre necesitabas un programador específico para tu microcontrolador.

Y o bien tenías el dinero para comprar uno (y no eran precisamente baratos) o tenías que montar una versión casera tu mismo.

Los chicos de Arduino sabían que esto era una mierda.
Así que decidieron hacerlo más fácil.

Así que equiparon sus placas con una cosa llamada «bootloader».

Que simplemente es un pequeño programa que se encarga de hacer dos cosas.

  • Iniciar un programa que se encuentra en una determinada dirección de memoria
  • Escuchar el puerto serie y esperar a que alguien le envíe un nuevo programa.

Y esto es lo que ocurre cuando quieres grabar una placa Arduino

Haces clic en el botón «flash», el IDE envía tu nuevo programa a través del puerto serie. El bootloader recibe los datos y los almacena en la memoria flash.

Imagen de ElectronicWings.com


Y cuando el MCU se reinicia, el nuevo programa se ejecuta.

¿Y eso es todo?

…últimas palabras sobre Arduino
Como hemos dicho, tanto el HW, como el SW y el entorno de programación son de código abierto.

Y eso, amigo mío, aparte del buen diseño, ha sido la clave de su éxito.

¿Quieres hacer una placa compatible? No hay problema, usa sus esquemas, modifícalos a tu gusto y listo.

¿Quieres hacer tus propias librerías?. No hay problema, escribe tu propio código y ya está.

¿Quieres que tu placa sea compatible con Arduino? Entonces creas el core de Arduino siguiendo las instrucciones y voilà.

En pocas palabras, Arduino ha cubierto todas las partes de un sistema embebido (HW, SW de bajo nivel, Tooling y Flashing) para proporcionar a los aficionados y estudiantes una experiencia sin fisuras en la que sólo tienes que ocuparte de lo que realmente quieres hacer y olvidarte de todo lo demás.

Pero, también te da la libertad de modificar algunas de las partes (HW, SW o IDE) a tu gusto ampliando el espectro de personas que pueden utilizar la plataforma.

Espero que hayas disfrutado de este artículo y que a partir de ahora veas la plataforma Arduino bajo una nueva luz.

Categorías
Tecnología

La Santísima Trinidad De Los Sistemas IoT

Wireless IoT Architecture

Estás cansado de escuchar Internet de las Cosas, IoT, y sus miles de eufemismos y derivados.

En las noticias, en la prensa, en anuncios de Youtube y hasta tu abuela te dice que le ha puesto un dispositivo IoT a su perro Max.

Y lo mismo alguna vez te has preguntado de que va esto del IoT o has googleado un poco y no te has enterado de una hijueputa mierda.

Pues estas de suerte.

En este post, te voy a contar que es esto del IoT y cuales son los 3 componentes fundamentales de un sistema IoT.

Una cosa es una cosa y seis media docena

Bueno, pues como no podía ser de otra forma si hablamos del «Internet de las cosas» es empezar hablando de «cosas».

¿Y que son esas cosas?

Redoble de timbales…

¡Microcontroladores!

Esos microcontroladores que siempre han estado en tu tele o en tu lavadora o en tu nevera o en tu estación meteorologica.

Pero resulta que esos microcontroladores, ahora gracias a los avances en comunicaciones tienen conectividad inalambrica.

WiFi, Bluetooth, ZigBee, LoRa, SigFox, NB-IoT, etc, etc, etc.

Le podemos dar muchas vueltas. Y meternos en muchos detalles, pero la diferencia entre un microcontrolador como los que se usaban para cacharrear hace 10 años y un flamante dispositivo IoT es la conectividad inalámbrica.

Los ríos desembocan en el mar

Vale, entonces el dispositivo IoT tiene conectividad inalámbrica.

¿Y a donde se conecta?

Pues mira, depende.

Algunos, sobre todo los que tienen conectividad directa con internet mediante WiFi o GPRS se conectarán con «la nube» como veremos en la siguiente sección.

Pero la mayoría, que tienen conectividad inalámbrica con protocolos que no permiten la conexión directa con la nube se conectarán con un intermediario.

Un cacharro que se encargará de recibir sus mensajes y mandarlos a la nube.

Estos cacharros, se llaman «Gateways» o puertas de enlace para los que no se manejen con la lengua de Shakespeare.

Y como su nombre indica se encargan de enlazar dos mundos.

Los mundos de los dispositivos IoT (Que hablan Bluetooth, Zigbee, LoRa o Sigfox) por un lado y la nube (que no deja de ser una máquina a la que te conectas por un socket).

Gateways IoT | Aprendiendo Arduino

Vivir en las nubes

Y para completar esta santa trinidad de los sistemas IoT nos falta hablar del destino final de todos esos datos que un día cogieron su petate, salieron del dispositivo IoT y pasaron por el gateway con rumbo… la nube.

Supongo que te lo estarías oliendo, pero por concretar un poco la cosa.

La operativa básica de un dispositivo IoT es medir alguna magnitud (temperatura, humedad, número de coches por hora en una calle o el índice de cuñadismo).

El caso es que esos datos de uno a muchos dispositivos IoT acaban llegando a la nube.

Y allí en primera instancia se hacen dos cosas con ellos.

Representarlos gráficamente y almacenarlos.

Luego en una segunda derivada y sobre todo si tenemos muchos dispositivos IoT mandando muchos datos es extraer información de ellos.

Puede ser mediante el tan manido «Data Science» o quizás entrenando con esos datos un modelo de Machine Learning que nos permita predecir cosas.

Todo esto de manejar grandes volúmenes de datos la gente lo llama «Big Data».

IoT & Cloud Computing integration. | Download Scientific Diagram

Resumen final

El mundo del «Internet de las cosas» puede ser confuso por la gran cantidad de palabras de moda (IoT, Cloud, Big Data).

Pero hemos visto que básicamente podemos entender un sistema IoT como un conjunto de dispositivos que generan datos, estos se enrutan a través de una puerta de enlace que consigue que lleguen a la nube donde son almacenados y procesados para poder extraer información útil de ellos.