Está en la página 1de 8

UNIVERSIDAD TÉCNICA DE MANABÍ

FACULTAD DE CIENCIAS INFORMÁTICAS


CARRERA DE TECNOLOGÍA DE LA INFORMACIÓN

MATERIA

SISTEMAS EMBEBIDOS

TEMA

Programar de forma básica funcionalidades de un sistema operativo

embebido en un microcontrolador.

DOCENTE

Ing. Marlon Navia Mendoza

ESTUDIANTE

Marcillo Peñarrieta Johan Wellington

Millet Rodríguez Jean

Diciembre 19, 2023


Código del programa:

Iniciamos definiendo configuraciones clave y componentes necesarios para el


funcionamiento del programa. Comenzamos incluyendo la librería "DHT.h", la cual
proporciona funciones para interactuar con el sensor de humedad y temperatura. Definimos
constantes, como el pin de datos del sensor DHT (DHT_PIN_DATA), el pin del LED
(LED_BUILTIN), el pin del botón (Boton), y establecemos el tiempo de delay para el
parpadeo (blink_delay). Además, declaramos una variable sensor_handle del tipo
TaskHandle_t para almacenar el identificador de la tarea del sensor y un booleano llamado
estado, el cual controla el estado de la tarea de lectura del sensor. En la función setup(), se
inician las comunicaciones seriales, se crean las tareas de parpadeo y de lectura del sensor
utilizando xTaskCreatePinnedToCore, se configura el pin del botón como entrada con pull-
up, y se adjunta una interrupción al botón para cambiar el estado de la segunda tarea al ser
presionado. El mensaje "Ejemplo Básico de Multi Threading" impreso por el puerto serial
sirve como indicación del inicio y propósito del programa de multitarea que está por
ejecutarse.

La función loop() en este contexto está vacía ya que el programa se basa en el uso de
multitarea, delegando la ejecución de tareas específicas a funciones dedicadas. En este
caso, loop() no contiene ninguna lógica ya que la ejecución del código se gestiona mediante
tareas independientes. Por otro lado, la función Interrupcion() es invocada por la
interrupción del botón. Dentro de esta función, se utiliza una condición para verificar el
estado actual: si estado es verdadero, se suspende la tarea asociada al sensor mediante
vTaskSuspend; si es falso, se reanuda la tarea usando vTaskResume. Posteriormente, se
invierte el valor de estado para alternar entre suspender y reanudar la tarea en cada llamada
a la interrupción del botón. Esta lógica permite controlar dinámicamente la ejecución de la
tarea del sensor según la interacción con el botón.
La función TaskBlink define la tarea encargada de controlar el parpadeo del LED. Primero,
configura el pin asociado al LED como salida, luego utiliza un bucle infinito para alternar
el estado del LED entre encendido y apagado mediante la inversión del valor del pin. Para
controlar la frecuencia de parpadeo, se introduce un retardo definido por blink_delay
utilizando vTaskDelay. Además, cada vez que cambia el estado del LED, se imprime un
mensaje por el puerto serial para indicar dicho cambio.

Por otro lado, SensorRead se encarga de realizar la lectura del sensor DHT. Inicializa el
sensor, establece la comunicación con él y luego entra en un bucle infinito. En cada
iteración, verifica si la lectura del sensor es exitosa. Si lo es, lee la humedad y la
temperatura del sensor, las imprime por el puerto serial y espera un tiempo definido antes
de realizar la siguiente lectura. En caso de que la lectura falle, se muestra un mensaje de
error por el puerto serial. Este bucle permite mantener un intervalo entre las lecturas del
sensor para evitar lecturas frecuentes y controlar el flujo de datos.
PREGUNTAS:

Pregunta 1: ¿Qué funcionalidad se implementó en el programa? (Por ejemplo paralelismo,


comunicación entre tareas, u otro). Describa brevemente como se lo implementó.

La implementación del programa se centra en el aprovechamiento del multi-threading


mediante FreeRTOS en un dispositivo ESP32. Se ejecutan dos tareas concurrentes
esenciales:

Tarea de lectura del sensor DHT:

 La tarea SensorRead está diseñada para obtener lecturas de temperatura y humedad del
sensor DHT22, realizando lecturas cada 5 segundos.
 Utiliza la librería DHT.h para interactuar con el sensor, extrayendo los datos y
mostrándolos por el puerto serie en un bucle infinito.
 Creada en el núcleo 1 del dispositivo para gestionar lecturas independientes del sensor.

Tarea de parpadeo del LED integrado:

 TaskBlink controla el parpadeo del LED integrado del dispositivo, alternando su estado
en un intervalo de tiempo determinado (blink_delay).
 Esta tarea se sitúa en el núcleo 0 del dispositivo, ejecutando un bucle infinito para lograr
el parpadeo del LED de forma independiente.

Además, se incluye una función de interrupción denominada Interrupcion que se activa en


respuesta a un flanco descendente en un pin específico del dispositivo (botón). Esta función
alterna dinámicamente el estado de la tarea de lectura del sensor entre suspendido y
reanudado, aprovechando las funciones vTaskSuspend y vTaskResume. Esta interacción
proporciona la capacidad de activar o desactivar la lectura del sensor de manera interactiva
mediante el botón.

En síntesis, esta implementación demuestra la funcionalidad de multi-threading en un


dispositivo Arduino, donde tareas simultáneas se ocupan de la lectura y visualización de
datos del sensor DHT22, así como del control del LED integrado. La interrupción del botón
facilita el control dinámico de la tarea de lectura del sensor, permitiendo su suspensión o
reanudación según el estado actual.

Pregunta 2: ¿Qué sistema operativo fue con el que se trabajó? Describa muy brevemente
sus características principales.

El sistema operativo utilizado es FreeRTOS. Es un sistema operativo en tiempo real de


código abierto diseñado para sistemas embebidos y aplicaciones con restricciones de
recursos. Sus principales características incluyen:

 Multitarea y programación concurrente: Permite ejecutar múltiples tareas de forma


simultánea, administrando eficientemente el tiempo de CPU y los recursos.
 Planificación dinámica: Ofrece una gestión de tareas flexible con planificación basada
en prioridades, permitiendo la ejecución de tareas críticas en tiempo real.
 Bajo consumo de recursos: Está diseñado para dispositivos con recursos limitados, lo
que lo hace eficiente en términos de uso de memoria y capacidad de procesamiento.
 Portabilidad: Es altamente portable y puede ser adaptado a una amplia gama de
arquitecturas y plataformas, lo que lo convierte en una opción popular para sistemas
embebidos y microcontroladores.
 Licencia de código abierto: FreeRTOS se distribuye bajo la licencia MIT, lo que
permite su uso en proyectos comerciales y no comerciales sin restricciones significativas
de licencia.

Pregunta 3: ¿Qué otro sistema operativo puede implementarse en este microcontrolador?


¿Cómo se lo puede instalar o implementar?

Además de FreeRTOS, existen otros sistemas operativos que se pueden implementar en un


microcontrolador como el ESP32. Uno de ellos es Zephyr, un sistema operativo de código
abierto que es compatible con el ESP32-DevKit y está especialmente diseñado para
aplicaciones embebidas y de IoT.

Para instalar o implementar Zephyr en el ESP32-DevKit, se pueden seguir los siguientes


pasos:

1. Preparación del entorno de desarrollo:


Asegúrate de tener configurado un entorno de desarrollo compatible con el ESP32, como
Arduino IDE o PlatformIO.

2. Descarga del firmware o código fuente:

Obtén el firmware o el código fuente de Zephyr desde el sitio web oficial del proyecto.
Asegúrate de descargar la versión compatible con el ESP32-DevKit.

3. Configuración:

Si Zephyr requiere configuración previa a la compilación, ajusta los parámetros necesarios


según las especificaciones de tu aplicación. Esto podría incluir la selección de periféricos y
otros ajustes específicos para el ESP32-DevKit.

4. Compilación:

Utiliza las herramientas proporcionadas por Zephyr para compilar el firmware o el código
fuente adaptado a tu aplicación y al ESP32-DevKit.

5. Carga del firmware:

Utiliza un programador o un cargador de arranque compatible para cargar el firmware


resultante en el ESP32-DevKit. Muchas veces, los entornos de desarrollo incluyen
herramientas que permiten cargar el firmware directamente a través del puerto USB del
microcontrolador.

Siguiendo estos pasos, se puede instalar Zephyr u otro sistema operativo compatible con el
ESP32-DevKit, lo que permitirá desarrollar aplicaciones específicas para entornos
embebidos o de IoT.
CONCLUSIONES

El análisis del código proporcionado revela una implementación efectiva de multitarea en


un entorno de microcontrolador utilizando FreeRTOS. Las tareas definidas, como el
parpadeo del LED y la lectura del sensor DHT22, demuestran la capacidad de ejecutar
operaciones simultáneas de manera independiente. La integración de una interrupción de
botón para controlar dinámicamente la tarea del sensor agrega una capa adicional de
interactividad al sistema. Además, al explorar las alternativas de sistemas operativos para el
ESP32, se destacan opciones como Zephyr, mostrando cómo diferentes sistemas pueden
implementarse siguiendo pasos específicos de descarga, configuración, compilación y carga
del firmware. Este análisis brinda una visión integral de cómo abordar el desarrollo en
entornos de microcontroladores, aprovechando la multitarea y considerando la posibilidad
de utilizar diferentes sistemas operativos según las necesidades específicas del proyecto.

También podría gustarte