Prototipação: Plataformas de hardware e software para sistemas embarcados

Este post faz parte da série Pontos chave na prototipação de dispositivos embarcados. Leia também os outros posts da série:

O desenvolvimento de protótipos é excelente para entender melhor um problema a ser resolvido, assim como para descobrir formas alternativas para a solução deste e entender se atende aos requisitos do cliente/usuário.  Essa série de artigos fala sobre prototipação com embarcados.

O primeiro passo no desenvolvimento de protótipos é realizar algumas escolhas referentes ao hardware e software, como a plataforma embarcada e o sistema operacional mais apropriado ao projeto. Neste artigo, listamos algumas plataformas populares, destacando as vantagens de cada uma. Também descrevemos as modalidades de software embarcado mais utilizados nestas plataformas, destacando suas principais características. Por fim, apresentamos um comparativo dessas modalidades de software e casos de uso com as modalidades adequadas para cada caso. 

Hardwares embarcados

Raspberry Pi

Essa plataforma comporta o uso de um sistema operacional de propósito geral (sobretudo, Linux Embarcado), permitindo assim que sejam portadas facilmente soluções antes feitas para PCs convencionais nestes sistemas operacionais. É uma plataforma com hardware bastante interessante, contando com opções de conectividade e comunicação já integradas na plataforma: WiFi (2.4GHz e 5GHz), Ethernet (incluindo Gigabit ethernet em seu modelo mais novo, 4B) e BLE.

Além desses fatores, a Raspberry Pi facilita o processo de desenvolvimento e integração com outros dispositivos, diversos HATS podem ser plugados diretamente na plataforma. Também oferece suporte para vários protocolos de comunicação (I2C, SPI, etc), devido à grande gama de protocolos suportados pelo Linux.
    Sua comunidade de desenvolvimento é grande e ativa, contando com muitas bibliotecas, exemplos e pessoas dispostas a ajudar. Dessa forma, ela está sempre sendo atualizada com novas versões de aplicativos e Kernel Linux. 

BeagleBone 

É similar às Raspberries Pi, roda Linux, Android (versões um pouco antigas) e outros sistemas operacionais. Também conta com suporte para diversos protocolos de comunicação, com ou sem fio. Porém, como principal diferencial, esta plataforma conta com um projeto totalmente open-hardware e open-source. A versão mais popular é BeagleBone Black, havendo também versões mais compactas (como a Pocketbeagle Bone, por exemplo) e algumas voltadas à robótica (como a BeagleBone Blue, por exemplo). 

Arduino

Plataforma totalmente programável em C/C++ (bare-metal ou com RTOS), usando bibliotecas (nativas ou feitas por terceiros) e compatível com uma vasta gama de microcontroladores. É possível realizar o desenvolvimento em qualquer PC (Windows, MAC OS ou Linux) através de cross-compilação usando o software próprio da plataforma, sendo possível desenvolver em um smartphone/tablet também. Possui uma grande e ativa comunidade de desenvolvimento, contando com muitas bibliotecas, exemplos e pessoas dispostas a ajudar. 

Softwares embarcados

Nesta seção, serão descritas as três modalidades de software embarcado, com seus respectivos detalhes e particularidades.

Bare Metal 

Versão em C 

É usada para desenvolver um firmware geralmente de baixa a média complexidade, Aqui, não se faz o uso de um sistema operacional de tempo real, tampouco se usa um sistema operacional de propósito geral.


Nesta modalidade, há compiladores e linkers que geram um binário a ser executado no dispositivo-alvo (microcontrolador), logo a cross-compilação é algo mandatório aqui. Por isso, geralmente são usadas toolchains (muitas delas baseadas no GNU GCC) para realizar a cross compilação.
Exemplo: Arduino. 

Versão em Python

O Python utilizado em plataformas embarcadas sem SO tem o propósito de facilitar o desenvolvimento do código para controlar dispositivos a partir de rotinas simples, curtas (poucas linhas) e com alta legibilidade. Neste caso, são utilizados interpretadores Python especiais para esse fim, embarcados nos microcontroladores. Por isso, é necessário que a plataforma-alvo ofereça suporte a pelo menos um interpretador Python.

Exemplos: MicroPython [MicroPython, 2021], CircuitPython [CircuitPython, 2021]: 

  • Versão do Python para rodar diretamente em microcontroladores compatíveis, como ESP32, ESP8266, Raspberry Pi Pico, etc.; 
  • Permite um fácil controle de microcontroladores de baixo custo; 
  • É possível portar soluções utilizadas em outros hardwares, facilitando a atualização tecnológica de um produto. 

Sistemas Operacionais de propósito geral 

Os sistemas operacionais de propósito geral são aqueles que normalmente utilizamos no dia-a-dia em computadores pessoais, smartphones, etc. Ou seja, utilizar um sistema operacional de propósito geral em um sistema embarcado consiste em utilizar um sistema operacional do dia-a-dia (exemplo: Ubuntu) em um sistema embarcado, aproveitando todas as vantagens e facilidades que esse tipo de sistema operacional pode oferecer, permitindo  dedicar o sistema embarcado a funcionalidades muito bem definidas, inclusive com alto grau de complexidade. 

Raspberry PI OS (Raspbian) 

É a principal distribuição Linux para as plataformas da linha Raspberry Pi, sendo referência para prototipação de soluções com Linux embarcado. Possui vários recursos disponíveis na Web e suporte open-source, com uma comunidade bastante ativa. 

Outras distribuições de Linux 

A maioria dos fabricantes de SOCs e SIPs oferecem suporte a esse OS nos seus dispositivos. Há uma infinidade de distribuições para se escolher, cada qual com suas vantagens, sendo escalável desde pequenos dispositivos até sistemas complexos com inúmeros recursos. Com licença de uso GNU GPL, possui uma ampla comunidade de desenvolvedores. Por isso, oferecem suporte para uma grande variedade de SoC, SiP e dispositivos periféricos (conectividade wi-fi, conectividade, bluetooth, displays, etc.). Ainda no quesito conectividade, possui suporte para os principais protocolos utilizados atualmente, até mesmo protocolos industriais.

Exemplos: Ubuntu, Debian, Arch Linux, etc. 

Yocto Project 

Oferece ferramentas para criar uma distribuição Linux customizada, somente com os elementos necessários visando reduzir a complexidade da distribuição Linux a ser usada no protótipo e possuir recursos computacionais requeridos (memórias e processamento) do hardware alvo [Yocto, 2021]. Geralmente é usada para gerar versões de produção com somente os elementos necessários, sendo possível gerar distribuições Linux (enxutas e focadas em um projeto) para os mais diferentes hardwares-alvo: Raspberries Pi, BeagleBones, etc. 

Android para dispositivos embarcados 

É interessante para desenvolver soluções ricas em interfaces gráficas, conectividade e compatibilidade com grandes serviços e aplicativos de mercado. Por ser muito enraizado no dia-a-dia das pessoas (smartphones, smartwatches, smart tvs, etc.), a aceitação e adoção de uso de uma solução com Android embarcado são facilitados. É baseado em Linux, havendo uma ampla comunidade de desenvolvimento e suporte. Entretanto, podem ser necessárias licenças da Google para embarcar o Android em um produto real. 

RTOS 

Modalidade de software embarcado que contém um sistema operacional (neste caso, de tempo real). É capaz de permitir que o sistema seja determinístico e tenha garantido pelo seu Kernel os níveis de latência, processamento, controle de tasks, etc.  O RTOS mais popular e disponível para a maioria das plataformas de microcontroladores do mercado é o FreeRTOS [FreeRTOS, 2021]: 

  • Portável, open source (com licença MIT, muito permissível), SO de tempo real com footprint reduzida (podendo ocupar somente 5Kb de memória), geralmente usado para pequenos dispositivos embarcados; 
  • Suporte para seleção de funcionalidades e características desejáveis, apresentando controle do desempenho e do uso de recursos; 
  • Suporta as arquiteturas de microprocessadores mais populares, como as variações ARM, processadores PIC, x86, etc.; 
  • Devido a compra do FreeRTOS pela Amazon (2017), apresenta extensões específicas para AWS; 
  • OS é compilado junto com as aplicações, constituindo, portanto, uma única imagem final; 
  • Várias extensões disponíveis a partir do repositório FreeRTOS+, como sistemas de arquivos, frameworks de I/O, etc. 

Algumas derivações do FreeRTOS são: 

OpenRTOS [OPENRTOS, 2021]: versão comercial do FreeRTOS, oferecendo garantia e total suporte; 

SAFERTOS [SAFERTOS, 2021]: derivado do FreeRTOS, mas não open source. Projetado para atender requisitos de confiabilidade aos padrões e certificações médicos, industriais e automotivos. 

Outro RTOS amplamente utilizada é o Apache NuttX [NuttX, 2021]: 

  • Sistema operacional de tempo real que possui compatibilidade com POSIX; 
  • Em parte dos casos, permite a portabilidade direta de soluções e bibliotecas desenvolvidas inicialmente para o Linux embarcado. Normalmente, permite tal portabilidade com poucas adaptações; 
  • Possui uma comunidade crescente, contando com desenvolvedores experientes e grandes empresas dando contribuições ao seu código-fonte (exemplos: Xiaomi e Sony) 
  • Na prática, é um meio termo entre um RTOS “puro” (scheduler, filas, semáforos, etc.) e um Linux; 
  • Possui um footprint muito pequeno, permitindo o uso em uma vasta gama de microcontroladores de 8-bits até 32-bits, de diversos fabricantes e arquiteturas. 

Comparativos entre as modalidades de software embarcado 

Segue abaixo um comparativo entre as três modalidades (bare-metal, RTOS e SO de propósito geral), de modo a dar uma visão geral do custo, complexidade e esforços de teste e qualidade de cada uma das modalidades: 

prototipação

Casos de uso para cada modalidade de software embarcado

Para melhor ilustrar como cada modalidade de software embarcado se encaixa em casos de uso reais, observe os quatro casos de uso a seguir: 

Caso 1) software embarcado que controla um eletrodoméstico simples

prototipação

Requisitos:  

  • Interface simples com usuário (botões e display alfanumérico);
  • Funcionalidade extremamente bem definida (executar a batida conforme o usuário escolheu, nada mais) ;
  • Não possui alta criticidade (se a execução falhar, ninguém se machuca)  

Modalidades elegíveis:  

  • Bare-metal, pela baixa complexidade exigida do software; 
  • Ou RTOS, caso seja desejado melhor controle de funcionalidades executadas em paralelo 

Caso 2) software embarcado que será executado em um sistema crítico de um avião comercial 

prototipação

Requisitos:  

  • Ser extremamente confiável, pois um erro pode significar a morte de muitas pessoas;
  • Exige tempo de latência mínimo (um erro na latência pode significar um acidente aéreo);
  • Ter gerenciamento de CPU e memória extremamente confiável, resultando em menores chances possíveis de erros de execução.

Modalidade elegível:  

  • RTOS, uma vez que possui baixa latência de execução, utiliza um kernel com ótimo gerenciamento de memória e CPU e permite que micro-funcionalidades tenham o menor acoplamento possível. 

Caso 3) um dispositivo eletrônico em uma loja para colher dados de pesquisa de satisfação do consumidor 

prototipação

Requisitos:  

  • Permitir interação com o usuário, seja por interfaces elaboradas ou mais simples;
  • Latência não é algo crítico aqui, afinal demorar alguns milissegundos a mais para executar não atrapalha a vida de ninguém.

Modalidades elegíveis:  

  • Sistema operacional de propósito geral, uma vez que latência não é um problema e pode oferecer suporte a conectividades diversas e suporte a interfaces gráficas elaboradas ou não;
  • Ou RTOS, caso deseje o menor custo possível com hardware na solução final. 

Caso 4) uma smart TV, com suporte a conectividade Bluetooth e WiFi e a aplicativos de streaming muito populares do mercado 

Requisitos:  

  • Interfaces com o usuário devem ser, obrigatoriamente, muito elaboradas;
  • Suportar diversos tipos de conectividade de forma simultânea;
  • Suportar aplicações terceiras;
  • Latência não é algo crítico aqui, afinal demorar alguns milissegundos a mais para executar não atrapalha a vida de ninguém  

Modalidade elegíveis:  

  • Sistema operacional de propósito geral somente.  

Próximos passos

Neste artigo analisamos as características das principais plataformas de hardware e modalidades de software para embarcados. Esse é o primeiro passo para o início de um projeto envolvendo prototipação com embarcados. No próximo artigo abordaremos sobre interfaces de usuário para embarcados, as quais podem ser necessárias durante a construção do protótipo.

Referências

Outros artigos da série

Prototipação: User Interfaces (UI) para sistemas embarcados >>

Cientista da computação e analista de dados, com Ph.D. em ciência da computação, na área de Aprendizado de Máquina e Reconhecimento de Padrões, pela Unicamp.

Trabalho com P&D no Instituto Eldorado, atuando no departamento de embarcados e em Edge Analytics.

Sou engenheiro eletricista formado pela Faculdade de Engenharia de Guaratinguetá (FEG - UNESP) e trabalho com Android embarcado em Campinas-SP.
Curioso e viciado em tecnologia, sempre busco me aprimorar na área de sistemas embarcados (modalidades bare-metal, RTOS, Linux embarcado e Android embarcado).

Para mais informações, acesse minha página no Facebook:https://www.facebook.com/pbertoleti

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Home » Internet Das Coisas » Prototipação: Plataformas de hardware e software para sistemas embarcados
Comentários:
Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Luiz Sampaio
luiz
22/11/2021 10:08

Muito bom, muito claro!

Talvez você goste:

Nenhum resultado encontrado.

Séries



Outros da Série

Menu