Você está na página 1de 48

12/3/2015

Sistemas Empotrados
para IoT

Temario

• Sistemas empotrados: HW y SW
• Placa basada en micro ARM Cortex M4
• Librerías ARM CMSIS
• Sistemas operativos de tiempo real, ChibiOS
• Ambiente de desarrollo de SW basado en eclipse
• Comunicaciones, protocolos y stack TCP/IP
• Conceptos de IoT
• Protocolo MQTT para IoT

1
12/3/2015

Programa (Día 1)
Hora Tema
9:00 Presentación general, temario y programa
9:10 Sistemas empotrados
9:20 Placa de desarrollo Lanin basada en micro ARM Cortex M4
9:50 Sistemas operativo embebidos y ChibiOS
10:20 Ejemplo práctico 1: Presentación de herramientas, SDK, librerías
CMSIS. Manejo básico de HW (GPIO)
12:20 Almuerzo
13:00 Detalles de uso de RTOS (Mensajes, etc)
13:30 Ejemplo práctico 2: Uso de RTOS
15:30 Conceptos de IoT
16:00 Fin de día 1

Programa (Día 2)
Hora Tema
9:00 Comunicaciones, stack TCP/IP y LwIP
9:20 Integración a RTOS
9:30 Ejemplo práctico 3: Servidor web embebido
11:00 Protocolos de comunicaciones para IoT: MQTT y COAP
11:20 Detalles de protocolo MQTT
11:50 Presentación de hardware utilizado (placa WiFi) y librerías Emtech
para acceso WiFi y MQTT
12:20 Almuerzo
13:00 Ejemplo práctico 3: Librería para uso de Wifi y MQTT.
Herramientas mosquito y paho. Suscripción a un Topic en MQTT
14:30 Ejemplo práctico 4: Publicación en un Topic en MQTT
15:00 Ejemplo práctico 5: Escenario de uso de MQTT con diversos
Topics, publicaciones y suscriptores.
16:00+ Fin día 2

2
12/3/2015

¿Qué es un Sistema
empotrado?
• Un sistema electrónico
diseñado para realizar
determinadas funciones.

• El hardware y software
optimizados parra resolver un
problema en concreto

Donde encontramos un sistema


empotrado?

3
12/3/2015

Cual es la arquitectura de un sistema


empotrado?

Interfaz con el
Alimentación
usuario

CPU
Comunicaciones Entrada/Salida

Placa Lanín

4
12/3/2015

¿Que es ARM?

• ARM: diseño de cores y algunos otros


aditamentos (periféricos, controladores
de memoria, etc)
• No fabrica chips.

5
12/3/2015

Empresas consumidoras de arquitecturas ARM

Familias de arquitecturas ARM

6
12/3/2015

Cortex-M

7
12/3/2015

4 LEDs y
2 Pulsadores

Ideales para corroborar el


correcto funcionamiento
de las diferentes
aplicaciones, para ingresar
estímulos externos a la
aplicación o como interfaz
de usuario

8
12/3/2015

Conexión USB
host

Para conectar diferentes


periféricos a la placa, tales
como teclado, mouse,
pendrive, etc.

Conexión RS 485

Posee dos canales RS485


half-duplex

9
12/3/2015

Zócalo para
memoria µSD

Alta capacidad de
almacenamiento tanto
para guardar datos de
adquisiciones como
para almacenamiento
de paginas web,
archivos de audio, etc.

Conexión USB
device

Para conexión de datos y


alimentación desde una
PC. Adicionalmente
permite utilizar el
bootloader del
microcontrolador.

10
12/3/2015

Ethernet

Ethernet 10/100Mbps
para implementación
de stack TPC/IP

Headers
Pines de uso general,
compatibles con placas
DTR desarrolladas por
Emtech S.A.
Implementa algunas
líneas del periférico
FSMC para control de
memoria Nand-Flash,
Muxed-Nor-Ram o
LCD

11
12/3/2015

DTRs

DTRs

12
12/3/2015

Alimentación

Externa o USB,
selección mediante
jumper

Serial/USB
y
JTAG/USB

Mediante un chip de
FTDI se implementa la
conversión de UART1 a
USB para uso general y
de JTAG a USB para
programador/depurador
on-board.

13
12/3/2015

JTAG

Adicionalmente se
dispone del conector
para utilizar un
programador/depurador
externo.

Diseño de aplicaciones

Electrodomésticos

Instrumentación Sector Aeroespacial

Aplicaciones
Juguetes
Comunicaciones
Automatización
Vehículos
Robótica

14
12/3/2015

Aplicaciones

Cualquier sistema puede clasificarse en:

1. Sistema sin requerimientos de


respuestas en tiempo real.
2. Sistemas con requerimientos flexibles
de respuesta en tiempo real.
3. Sistemas con requerimientos estrictos
de respuesta en tiempo real.

Dos paradigmas de programación

El software tiene acceso


directo sobre los recursos del
hardware.

El software utiliza un sistema


operativo RTOS. Nos abstrae del
hardware y nos facilita
herramientas de un S.O. para el
desarrollo.
Nuttx, FreeRTOS., ChibiOS, etc.

15
12/3/2015

Método de Programación

Bare metal

16
12/3/2015

CMSIS: Cortex Microcontroller Software Interface


Standard

La CMSIS es una librería común a todos los fabricantes de


procesadores ARM Cortex-M y pretende establecer la
abstracción del hardware.

1. Definición de registros y vectores de interrupción


2. Capa de acceso a periféricos del Core
3. Capa de acceso a periféricos
4. Biblioteca DSP

CMSIS

17
12/3/2015

CMSIS: Ejemplo

CMSIS: Ejemplo

• Configuración del periférico: Determinar


las características particulares para el
funcionamiento en una aplicación
específica.
• Configuración de la interrupción: Si se
tratan eventos del periférico a través de
INTs, éstas deben ser configuradas.

18
12/3/2015

CMSIS: Ejemplo
• La inicialización de cualquier periférico en los
cortex M4 consta de cuatro pasos básicos:
• Programación del reloj: En MCUs de muy bajo
consumo, generalmente los periféricos tienen
su señal de reloj inhabilitada.
• Programación de configuraciones: Los pines del
MCU son compartidos entre periféricos, salvo
muy contadas excepciones.

Método de Programación

19
12/3/2015

¿Qué es un Sistema
Operativo?

Es un conjunto de programas
que se encargan de crear el
vínculo entre los recursos
materiales, el usuario y las
aplicaciones.

Ejemplo de un Sistema Operativo

Interfaz
con el
Usuario

Sensores Tarea

Reloj
Tarea SO
Actuadores
Tarea

20
12/3/2015

Sistema operativo en Tiempo Real

Un RTOS, es un Sistema Operativo especializado en


operaciones de respuesta en tiempo real y debe cumplir con
las siguientes características:

1. Respuesta de tiempo Previsible.


2. Determinista.

Características de un RTOS

 Tiempo de Respuesta: Un RTOS eficaz sólo añade una pequeña sobrecarga


en el tiempo de respuesta mínimo teórico del sistema por ejemplo:
◦ El tiempo desde una petición de interrupción y el de interrupción.
◦ El tiempo de un evento de hardware, por lo general una interrupción y el
reinicio de la tarea que debe manejarlo.
◦ El tiempo de cambio de contexto, necesario para cambiar de forma
sincronizada desde el contexto de un hilo en el contexto de otro hilo.
 Tamaño: Un RTOS más compacto es preferible siendo todos los demás
parámetros iguales, por el costo de memoria.
 Confiabilidad: Algunos sistemas pueden ser más fiables que otros, la
asignación dinámica es un buen ejemplo, tanto falta de fiabilidad y el
tiempo de imprevisibilidad.
 Primitivas de Sincronización: Variedad de primitivas disponibles para
utilizar.

21
12/3/2015

Como funciona un sistema operativo en


tiempo real?
El kernel es el cuerpo del SO, El Programador (scheduler) es el
contiene todas las funciones y corazón del SO y decide que
características del RTOS. tarea debe correr.

Kernel Scheduler

T1 T2 Tn

Mensajes Eventos
Colas Semáforos

Los eventos y semáforos


Los mensajes y las colas Las tareas son las trabajadoras
son señales de
son usadas para enviar del SO y contienen el código de
sincronización entre las
datos entre tareas. la aplicación.
diferentes tareas.

¿Cuál SO debo Escoger?…


• Depende de los requerimientos de la aplicación.
• De su Confiabilidad.
• Portabilidad.
• Predictibilidad.
• Portabilidad.
• Facilidades en tiempo de ejecución.
• Desempeño en tiempo de ejecución.
• Herramientas de desarrollo disponibles.
• Que tan compacto es.

Son específicos para correr en HW con recursos limitados como RAM o ROM.

+ de 80
vendedores
de RTOs

22
12/3/2015

ChibiOS - Características

• El ChibiOS es una opción fiable, ya que de acuerdo a sus


especificaciones responde positivamente a las características
de un buen sistema operativo y ofrece herramientas que
facilita la programación de aplicaciones incluso sin restricciones
de tiempo real.

ChibiOS - Componentes

ChibiOS esta internamente divido en varios


componentes:
 Kernel

 Port Layer

 Hardware Abstraction Layer

 Platform Layer

 Board Initialization

23
12/3/2015

Kernel

Bloque principal del sistema operativo. Se subdivide


en varios componentes

 System: Se encarga de la inicialización.


 Timers: Timers virtuales y temporización
 Scheduler: Todo el mecanismo de sincronización se
implementa a través de este subsistema.
 Threads

Port Layer

Este componente es el responsable de la puesta en


marcha del sistema, interrupciones, primitivas de
bloqueo/desbloqueo, cambio de contexto y las
estructuras relacionadas con interrupción de código

24
12/3/2015

HAL y plataform layer

El HAL (Hardware Abstraction Layer) es un conjunto de


drivers de dispositivos, que se basa en los
componentes de la placa para la implementación de
bajo nivel en el hardware específico.
El propósito de este componente es abstraer al
usuario del hardware.

El Plataform layer contiene un conjunto de


controladores de los distintos periféricos

Arquitectura HAL

25
12/3/2015

Board Initialization Layer

• Archivos específicos de la placa utilizada, que


son utilizado por el inicio del sistema con el fin
de inicializar los periféricos y el kernel antes de
iniciar la aplicación

Dependencias

En la imagen puede verse


la interdependencia de
los compontes antes
descriptos

26
12/3/2015

Externs

Son librerías que se pueden agregar al directorio


del sistema operativo para manejo de más
periféricos, como la librería para el manejo de la
FAT, el stack TCP/IP, etc.

Entorno de
desarrollo

27
12/3/2015

Entorno de desarrollo

• Permite integrar distintas herramientas


de desarrollo dentro de un solo
programa.
• Editor, compilador, depurador.
• Emtech SDK. (Eclipse)

Porque Eclipse?

• Código abierto
• Interfaz amigable
• Existen diferentes plugins que
incrementan sus capacidades

28
12/3/2015

Emtech SDK - Arquitectura

Emtech SDK

29
12/3/2015

Emtech SDK – Importar proyecto

Emtech SDK – Configurar depurador

30
12/3/2015

Emtech SDK – Configurar depurador

Monitor reset halt


arm-none-eabi-gdb

Creación de threads

 Hay dos clases de hilos/tareas en ChibiOS / RT:

 Static Threads: Reserva estáticamente la memoria


en tiempo de compilación.
 Dynamic Threads: Se realiza la asignación de
memoria en tiempo de ejecución de un conjunto
de memoria o de un banco de memoria (reduce la
fiabilidad del sistema).

31
12/3/2015

Ejemplos practicos

Creación de un thread estático

Para crear un thread estático se debe usar “THD_WORKING_AREA”

static THD_WORKING_AREA(myThreadWorkingArea, 128);

En este caso, se reservan 128 bytes de la pila para uso del thread

Y para inicializarlo se puede mediante la invocación de la función chThdCreateStatic ()

Thread *tp = chThdCreateStatic (myThreadWorkingArea,


sizeof(myThreadWorkingArea),
NORMALPRIO, /* Initial priority. */
myThread, /* Thread function. */
NULL); /* Thread parameter. */

32
12/3/2015

Ejemplo, Leds intermitentes utilizando RTOS

Estados de las tareas

Waiting

Deblock Block

Preempt

Ready Running
Assign

33
12/3/2015

Comunicación entre Tareas


La comunicación puede tener la forma de un evento, un semáforo
(flag), o un mensaje que se envía a otra tarea.

1. La forma más básica de comunicación es mediante un evento. Un


servicio de interrupción puede enviar un evento a una tarea,
algunos SOs también pueden enviar un evento a varias tareas.
2. Mensajes: Permite enviar datos a uno o más tareas. Se
implementan con mailbox o queue.
3. Semáforos: Se utilizan para proteger recursos compartidos, por
ejemplo, si hay más de una tarea que necesita escribir/leer en la
misma memoria (variable) el uso de un semáforo asegura que
solamente una tarea va a escribir o leer a la vez.

Ejemplo de sincronización de tareas con


semáforos binarios
Recurso 2, inicia como
tomado.

Toma el recurso 1,
ejecuta la tarea.

Libera el recurso 2

Toma el recurso 2

Libera el recurso 1

34
12/3/2015

Ejemplo de aplicación de mensajes

Envía mensaje y espera


hasta que se reciba.

Espera mensaje
indefinidamente.

Ejemplo de aplicación Puerto Serie

Configura el puerto serie.

Envía mensaje al
presionar un botón.

35
12/3/2015

Ejemplo de aplicación Puerto Serie

Stack TCP/IP

• Es un conjunto de protocolos de red en los que


se basa internet

• Permite la transmisión de datos entre redes de


dispositivos

• Implementa muchos protocolos. TCP, IP, HTTP,


UDP, FTP, ARP, SMTP, POP, TELNET.

36
12/3/2015

Stack TPC/IP
• El stack TCP/IP puede describirse por analogía con
el modelo OSI (Open System Interconnection)

• Cada nivel soluciona una serie de problemas


relacionados con la transmisión de datos

Stack TCP/IP

37
12/3/2015

Stack LWIP
• Stack TCP/IP diseñado para sistemas
embebidos
• Desarrollado y mantenido por una red
mundial de desarrolladores
• El enfoque de lwIP es reducir el uso de
memoria RAM sin dejar
de tener una conexión
TCP a gran escala

Ejemplo de utilización de librerías externas


con ChibiOS

Por las características de mensajería y


sincronización del RTOS es posible utilizar una
librería externa como Lwip o Fatfs.

38
12/3/2015

Ejemplo de utilización de librerías externas


con ChibiOS (Lwip)

Inicializamos el stack.

Creamos la tarea que


hace de web server.

Ejemplo de utilización de librerías externas


con ChibiOS (Lwip)

Espera una nueva


conexión

Atiende la solicitud

39
12/3/2015

Ejemplo de utilización de librerías externas


con ChibiOS (Lwip)

Página html que se envía


con la solicitud

Interactuar con la página Web

• Formularios, delimitados con la etiqueta <FORM> ...


</FORM>
• METHOD:
– POST, envía los datos al agente de procesamiento
almacenándolos en el cuerpo del formulario
– GET, envía los datos agregándolos a la dirección URL y
separándolos de la dirección con un signo de interrogación.
• ACTION: indica la dirección a la que se enviará la
información.

40
12/3/2015

Interactuar con la página Web

Ejercicio: Capturar la siguiente solicitud en el


server Web y cambiar el estado de un led

IoT

• IoT (Internet de las cosas), amplio concepto que


incluye la interconexión de cualquier tipo de sensor y
actuador con Internet

• Con objetivo de hacer mas cómodas nuestras vidas y


proporcionar seguridad

41
12/3/2015

IoT, Ejemplos de aplicación

Protocolo para IoT

CoAP (Constrained Application Protocol)

• Protocolo extremadamente ligero que trae semántica de


HTTP y arquitectura RESTful
• Perfecto para dispositivos de bajo consumo y poca
capacidad de procesamiento
• Diseñado para comunicar pequeños dispositivos entre si
• Utiliza UDP

42
12/3/2015

Protocolo para IoT

MQTT (Message Queue Telemetry Transport)

• Protocolo de publicación/subscripción
• Comunica sensores y servidor
• Recomendable para grandes redes con pequeños
dispositivos monitorizados en la nube
• Utiliza TCP

MQTT

Publicador Suscriptor
Servidor
(Fuente) Topic = com/emtech/lanin/leds
(Receptor)

Sub(topic)

Pub(topic, data)

Pub(topic, data)

43
12/3/2015

Wifi - ESP8266
• Soporta wireless 802,11 b/g/n standards
• Soporta tres modos: STA, AP y STA + AP
• Incluye stack protocolo TCP/IP
• Interface de comunicación por UART o GPIO
• Permite actualizar el firmware

ESP8266 - MQTT

44
12/3/2015

Ejemplo de aplicación

Parámetros para
configurar y trabajar con
el modulo wifi

Inicializa periféricos y
buffers

Inicializa mqtt

mqtt - Subscripción

Inicializa el módulo y se
conecta al broker

Se subscribe a los tópicos

45
12/3/2015

mqtt - Subscripción

Verifica si hay algún


mensaje de las
subscripciones

Si hay mensaje trabaja


con los datos

Envía ping para mantener


conexión

mqtt - Publicación

Si se detecta pulsación se
publica cambio

Se envía ping

46
12/3/2015

Mqtt - Publicación

Cada 2s se envía
temperatura del
microcontrolador

Se envía ping

Referencias

• http://www.arm.com/
• http://cmsis.arm.com/
• http://www.chibios.org/
• http://lwip.wikia.com/wiki/LwIP_Wiki
• http://mqtt.org/
• http://www.esp8266.com/
• Basic Concepts for Real Time Operating Systems by Mats
Pettersson, IAR Systems
• Desarrollo con microcontroladores ARM. Sergio Caprile.

47
12/3/2015

Preguntas?

Gracias
Escuchamos Sugerencias…..

48

Você também pode gostar