Anda di halaman 1dari 38

Microcontroladores

para IoT
Material Teórico
Microcontroladores para IoT

Responsável pelo Conteúdo:


Prof.ª Dr.ª Marise de Barros Miranda Gomes

Revisão Textual:
Prof. Esp. Claudio Pereira do Nascimento
Microcontroladores para IoT

• Definição e Arquitetura Básica de um Microcontrolador;


• Classificação dos Microcontroladores;
• Linguagem de Programação para Microcontrolador.

OBJETIVO DE APRENDIZADO
· Apresentar a arquitetura básico de um microcontrolador que é com-
ponente essencial quando se utilizam dispositivos inteligentes, nós
sensores ou placas microcontroladas associadas a sensores;
· Ilustrar como as coisas, os objetos do cotidiano, as máquinas das
indústrias, as plantas de cultivo em larga escala que normalmente
não contêm um computador acoplado, com a adição de um mi-
crocontrolador conectado à internet pode fornecer poder compu-
tacional suficiente, para aprimorar essas coisas sem adicionar alto
custo e maior complexidade do que os processadores de compu-
tador padrão.
Orientações de estudo
Para que o conteúdo desta Disciplina seja bem
aproveitado e haja maior aplicabilidade na sua
formação acadêmica e atuação profissional, siga
algumas recomendações básicas:
Conserve seu
material e local de
estudos sempre
organizados.
Aproveite as
Procure manter indicações
contato com seus de Material
colegas e tutores Complementar.
para trocar ideias!
Determine um Isso amplia a
horário fixo aprendizagem.
para estudar.

Mantenha o foco!
Evite se distrair com
as redes sociais.

Seja original!
Nunca plagie
trabalhos.

Não se esqueça
de se alimentar
Assim: e de se manter
Organize seus estudos de maneira que passem a fazer parte hidratado.
da sua rotina. Por exemplo, você poderá determinar um dia e
horário fixos como seu “momento do estudo”;

Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma


alimentação saudável pode proporcionar melhor aproveitamento do estudo;

No material de cada Unidade, há leituras indicadas e, entre elas, artigos científicos, livros, vídeos
e sites para aprofundar os conhecimentos adquiridos ao longo da Unidade. Além disso, você
também encontrará sugestões de conteúdo extra no item Material Complementar, que ampliarão
sua interpretação e auxiliarão no pleno entendimento dos temas abordados;

Após o contato com o conteúdo proposto, participe dos debates mediados em fóruns de discus-
são, pois irão auxiliar a verificar o quanto você absorveu de conhecimento, além de propiciar o
contato com seus colegas e tutores, o que se apresenta como rico espaço de troca de ideias e
de aprendizagem.
UNIDADE Microcontroladores para IoT

Definição e Arquitetura Básica


de um Microcontrolador
Os dispositivos conectados são a base da IoT. Os objetos ou dispositivos IoT
monitoram e medem “coisas” ou “objetos” do mundo real, do cotidiano das pessoas
que usam essas coisas, incluindo máquinas industriais, eletrodomésticos, prédios,
carros, itens de supermercado e inclusive vestuário.

O desenvolvimento de soluções IoT requerem componentes de hardware e


software nos projetos. Os projetos de IoT em geral nascem de prototipagens, visto
que não existem soluções prontas que possam ser aplicadas diretamente. Faz-se
necessário adequações de hardware, sensores e programação em software.

A prototipagem e o refinamento são um processo interativo e em continua avalia-


ção, pois as coisas do cotidiano estão sujeitas a mudanças e alterações dinamicamente.

A indústria vem definindo a prototipagem profissional por meio de micro-


controladores e suas interfaces de desenvolvimento, tanto em hardware quan-
to em software.

Um microcontrolador é um circuito integrado que tem poder computacional de


processamento muito semelhante a um pequeno computador. Com um conjunto
de instruções reduzidas e um hardware menos complexo que um computador, é
possível manipulá-lo para produzir aplicações personalizadas com segurança, alto
desempenho e custo muito reduzido.

O mercado amador tem disponibilizado também placas com microcontrolado-


res já preparados para utilização de prototipagem rápida, funcional e eficiente.
As plataformas de hardware amadoras, como Arduino e Raspberry Pi, ajuda-
ram a iniciar esse processo de prototipagem e refinamento mais ágil. É um micro-
controlador disponível para uso, sem a necessidade de projetar e fabricar placas
de circuito impresso para determinado tipo de microcontrolador. A adoção de
componentes prontos, reconfiguráveis e reprogramáveis agiliza a prototipagem
e a adaptação a vários tipos de projetos e aplicações.

Além disso, todo microcontrolador possui uma capacidade de gravação e


regravação das configurações de suas funções, periféricas e algorítmicas, dando
uma total interação com o projeto.
Explor

Mas afinal o que é um microcontrolador?

8
Um Microcontrolador (MCU) é um pequeno computador, um SoC (System
on Chip), em um único componente de circuito integrado, figura 1. Contém um
núcleo de processador, memória, e periféricos programáveis de entrada e saída,
são os I/O (input/output). A memória de programação pode ser RAM, ROM,
PROM, muitas vezes incluída no chip. Os microcontroladores podem ser usados
em aplicações embarcadas (embutidas). Muito diferente dos microprocessado-
res utilizados em computadores. Microcontrolador pode ser definido como um
circuito integrado programável dedicado, pois vem com a possibilidade de ser
programado para desempenhar tarefas específicas desenvolvidas pelo projetista.

Microcontrolador PIC16F627A Microcontrolador PIC 24F – 16 bit Microcontrolador Arduino


ATMEGA328P-PU

Figura 1 – Tipos de chips de microcontroladores


Fonte: Divulgação

SoC: System-on-a-chip (SoC) ou System On Chip (SOC), traduzindo, sistema-em-um-chip,


Explor

se refere a todos os componentes de um sistema computacional ou qualquer outro sistema


eletrônico, em um circuito integrado (chip). Contêm funções digitais, analógicas, algum
padrão de comunicação RF (rádio frequência).

Um microcontrolador com o sufixo PIC processa dados de 8, 16 e 32 bits. PIC


quer dizer Programmable Interface Controller (Controlador de Interface Progra-
mável). Possuem uma extensa variedade de modelos e periféricos internos. Tem
desempenho de alta velocidade no processamento devido a arquitetura Harvard e
conjunto de instruções RISC (conjuntos de 35 instruções e de 76 instruções) com
recursos de programação por Memória flash, EEPROM e PROM.

A arquitetura básica de um microcontrolador é bem semelhante à de um mi-


croprocessador, o que diferencia é a capacidade de processamento e o hardware
a ela associada. Mas basicamente em termos de diagrama de blocos são muito
semelhantes. Além disso é válido tratar o microcontrolador como um sistema em-
barcado, pois a ele está associada uma placa, memória, e periféricos de entrada e
saída (figura 2), em menor tamanho que uma placa de computador.

9
9
UNIDADE Microcontroladores para IoT

Interface com usuário

microcontrolador embarcado
Variáveis Variáveis
de entrada Software de saída
Hardware

Link para outros sistemas

Figura 2 – Diagrama de blocos de um microcontrolador embarcado

Como um microcontrolador em geral faz parte de sistemas embarcados, então


um sistema embarcado pode ser interpretado como uma maneira de trabalhar,
executar ou organizar uma ou mais tarefas de acordo com um conjunto fixo de
regras, ou ainda, um arranjo no qual todas as unidades se reúnem e trabalham
juntas de acordo com o programa ou plano. Exemplos de sistema embarcado é o
temporizador de uma máquina de lavar roupa.
Um sistema embarcado é um sistema que possui software incorporado no
hardware de computador, de uma máquina, de um equipamento ou celular. É sis-
tema dedicado a uma parte específica de uma aplicação ou parte de um produto.
Dependendo da aplicação, o sistema embarcado pode ser programável, repro-
gramável ou com programação de fábrica. Exemplos de sistemas embarcados
incluem vários produtos, como a central de automação dos atuais carros, a linha
branca como micro-ondas e máquinas de lavar, câmeras, impressoras e tv. Eles
usam microprocessadores e microcontroladores, os chamados ASICs ou proces-
sadores de sinais digitais (DSP).
Para que um microcontrolador funcione, é preciso que esteja incorporado a um
sistema de hardware, como as partes da figura 3.

MEMÓRIA
DE PROGRAMA
PROCESSADOR
CIRCUITO DE MEMÓRIA DE DADOS INTERFACEAMENTO DE
APLICAÇÃO ENTRADA/CIRCUITOS
ESPECÍFICA DRIVERS
PORTAS DE
TEMPORIZADORES
COMUNICAÇÃO
OU CONTADORES
Fonte de SERIAL
Alimentação INTERFACEAMENTO
Reset
DE SAÍDA/CIRCUITOS
CONTROLE DE PORTA DRIVERS
Circuito Oscilador INTERRUPÇÃO PARALELA

Figura 3 – Partes de um microcontrolador em um hardware

10
Importante! Importante!

EMBARCADO = INCORPORADO
Pode ser hadware, software, devices, sensores. Pode ser um sistema eletrônico ou uma
placa eletrônica.

Figura 4
Fonte: iStock/Getty Images

O microcontrolador em um sistema embarcado pode executar funções através


de um software específico gravado em sua unidade interna. Isto quer dizer que o
software está embarcado no microcontrolador.

Para programar o software, são utilizadas ferramentas de desenvolvimento com


linguagem em alto nível, acessível ao desenvolvedor ou projetista.

Isso mesmo! PROGRAMAÇÃO. A evolução das IDEs (Interfaces de desenvolvi-


mento) mais o baixo custo do hardware e a possibilidade de reprogramação do mi-
crocontrolador, propiciaram a acesso ao desenvolvimento de inúmeras aplicações
para automação e consequentemente a Internet das Coisas (figura 5).

Placa para embarcado


com I/O, oscilador, Sistema eletrônico
comunicação Software/IDE microcontrolado

+ + =
Figura 5 – Composição de um sistema eletrônico microcontrolado
Fonte: Adaptado de iStock/Getty Images

Com a IDE, pode-se programar, através de software, o microcontrolador para


executar determinada função de acordo com a disponibilidade de sua biblioteca de
funções. Em geral, o software é programado em linguagem de alto nível através de
uma IDE instalada em um computador que suporte sua linguagem. O programa é
compilado em um código suportado pelo microcontrolador, ou seja, inteligível e gra-
vado na memória interna (em geral) do microcontrolador.

11
11
UNIDADE Microcontroladores para IoT

Assim, o microcontrolador junto com os periféricos já está apto a executar a tarefa


para qual foi programado. Um software de sistema eletrônico embarcado é pro-
jetado para manter as principais limitações em função do tamanho e desempenho.
• A disponibilidade de memória do sistema;
• A disponibilidade de velocidade do microcontrolador;
• Para sistemas muito dinâmicos, com funcionamento contínuo, existem limi-
tações quanto a dissipação de calor /energia exigidos em processamento de
eventos como parada, execução, em estado de espera.

Por conta destas limitações, há a dificuldade de gerenciar duas ou mais tarefas


por um microcontrolador. Por exemplo, a leitura de uma temperatura por meio
de um sensor, e assim que atinge um determinado percentual acima das tempe-
raturas médias de uma semana, aciona um alarme ou uma lâmpada. O proces-
samento necessário e a quantidade de memória inviabilizam o projeto. Existem
duas soluções possíveis, a primeira é fazendo uso de uma aplicação externa por
meio de computadores. Outra solução e incorporar um pequeno e muito leve
sistema operacional no microcontrolador.

Todos os computadores precisam de um sistema operacional que vai depender do


seu hardware, processador, memória e disco rígido. Por esse motivo, os computado-
res são capazes de executar várias tarefas. O sistema operacional como Windows da
Microsoft ou o Linux gerenciam o hardware do computador e todas as aplicações do
usuário. Nesse caso, os sistemas operacionais são projetados para executarem várias
tarefas genéricas em diferentes tipos de hardwares dos computadores.

Mas se um microcontrolador precisa executar mais de uma tarefa específica, en-


tão é necessário um sistema operacional que ajude esse circuito integrado a funcionar
com mais de uma tarefa específica. Em geral, os microcontroladores são utilizados
para execução de tarefa específica e autônoma, sem a intervenção do usuário.

Neste caso, o sistema operacional precisa responder dinamicamente aos even-


tos para os quais o microcontrolador foi programado, o sistema operacional em
tempo real RTOS (Real Time Operating System). Um RTOS é especialmente
projetado para executar tarefas com um tempo muito preciso e alta confiabilida-
de. Em especial na indústria, na saúde, na logística, em sistemas dinâmicos, como
aeronaves e embarcações, muitas medições em tempo real, sem interrupções são
necessárias para tomada de decisão e evitar riscos, acidentes ou desastres. Um
RTOS pode ser usado em um sistema microcontrolador e também pode exigir
diferentes tipos de memórias. O RTOS é projetado para fornecer um padrão
de execução previsível que foi predeterminado.

Isso é interessante para os sistemas microcontrolados, porque geralmente possuem


requisitos em tempo real. Um requisito em tempo real é aquele que específica que o
sistema deve responder a um determinado evento em um tempo estritamente defini-
do, a temporalidade, o prazo são requisitos associados e previstos nos parâmetros do
projeto. Por exemplo, em quantos ciclos de clock a tarefa deve ser executada, quanto
tempo entre uma leitura e a próxima em relação ao sensor acoplado.

12
Eventos de alta complexidade ou de missão crítica são aqueles que exigem re-
quisitos prioritários, tolerante a falhas e alta performance, funcionando com mais
de uma tarefa em execução. Essa garantia em tempo real, por sistemas microcon-
trolados, só pode ser garantida se a programação do sistema operacional puder ser
prevista. O sistema operacional ou RTOS prioriza a tarefa em função de condições
previamente atribuídas ou programadas como recurso prioritário.
Um microcontrolador é um processador pequeno. Encapsulado em um único
circuito integrado, limitado em recursos internos, com memória de leitura (ROM ou
Flash) para que o programa ali gravado seja executado quando requerido, também
tem uma memória de acesso aleatório – RAM para auxiliar na execução do progra-
ma gravado, mantendo algum armazenamento necessário temporariamente.

PARANDO PARA APRENDER MAIS SOBRE MEMÓRIAS


• Memórias – todo sistema computacional precisa de memória interna ou externa. Um computador
em geral tem memória em seu processador, memória na placa do computador, memória externa.
Vamos aprender como são subdivididas as memórias em um sistema computacional, o mesmo
valerá em escala de tamanho de armazenamento para os microcontroladores.
• Memória ROM (Read Only Memory) – É um tipo de memória que pode ser acessada
somente para ser lida. É feita uma gravação do programa a ser executado e o microcon-
trolador ou processador vai lendo o programa gravado na memória e executando o códi-
go. Nos computadores, a BIOS é uma ROM com um programa gravado, com informações
de entradas e saídas para realizar o primeiro funcionamento básico do computador em
seu modo de inicialização.
• BIOS (Basic Input Output System) – A BIOS setup possibilita a inicialização de sistemas
básicos computacionais. A BIOS controla a do sistema operacional que está instalado no
disco rígido. Também verifica se todos as partes de hardware, essenciais ao computador,
estão funcionando corretamente no momento em que o computador é ligado.
• RAM (Random Acess Memory) – A memória do tipo RAM, memória de acesso aleatório,
permite a leitura e a escrita, utilizada como memória primária em sistemas eletrônicos
computacionais ou digitais. A RAM é um componente essencial não apenas nos computa-
dores pessoais, mas em qualquer tipo de computador, pois é onde basicamente ficam
armazenados os programas básicos operacionais. Por mais que exista espaço de armazena-
mento disponível, na forma de um HD (hard disk)/disco rígido ou memória flash, é sempre
necessária uma certa quantidade de memória RAM. Os dados armazenados em memória
RAM são voláteis, quando se desliga o computador.
• EPROM (Erasable Programmable Read Only Memory) – É uma memória programável,
modo somente de leitura. Para reprogramar, basta apagar o conteúdo gravado e regravar
um novo programa. Esta memória é apagada por incidência de luz ultravioleta em seu chip
por uma janela. Os dados gravados são mantidos mesmo quando a energia é desligada.
• Memória de massa ou auxiliar ou secundária – Esta memória armazena grandes
quantidades de dados. Os dados armazenados nas memórias de massa não são perdi-
dos quando se desliga o computador.
• EEPROM (Electrically Erasable Programmable Read Only Memory) – É uma memória
programável, modo somente de leitura. Para reprogramar, basta apagar o conteúdo gra-
vado e regravar um novo programa. Esta memória é apagada eletronicamente. Os dados
gravados são mantidos mesmo quando a energia é desligada.

13
13
UNIDADE Microcontroladores para IoT

Ressalta-se que um microcontrolador é um computador pequeno, de baixo custo


e autônomo, que pode ser usado como um sistema embarcado, e que é fundamental
para o funcionamento do seu programa interno, a memória.

Os microcontroladores oscilam a partir de determinada frequência de clock


para o seu funcionamento interno e externo de modo sincronizado. É uma forma
de controlar as tarefas como uma espécie de contador para saber exatamente
quando cada parte do microcontrolador funcionará. As partes de um microcon-
trolador geralmente incluem:
• Um microprocessador de 8, 16, 32 bits ou mais.
• Uma pequena memória tipo RAM.
• Uma ROM programável e memória flash.
• Uma comunicação paralela e serial de I/O.
• Temporizadores e geradores de sinal.
• Conversão analógica para digital e digital para analógica

Quando se trata de microcontroladores, um dos requisitos básicos é o baixo


consumo de energia, isso porque, os dispositivos controlados por eles operam
por bateria ou alguma forma de energia renovável, para tornar o conjunto micro-
controlador + sensor, autônomo.

Classificação dos Microcontroladores


A classificação dos microcontroladores é caracterizada pelo tamanho do barra-
mento, conjunto de instruções (instructions set) e a memória interna.

Os microcontroladores pertencem a famílias que incorporam características


comuns em um mesmo encapsulamento, como o processador, a memória de
programa e dados, periféricos, comunicação serial, conversores Analógico/Di-
gital, geradores de PWM, dentro outras, porém com recursos específicos que
dependem da aplicação.

Classificação de acordo com o número de bits (Tabela1)


a) O microcontrolador de 8 bits: significa que a CPU ou ULA pode
processar dados de 8 bits de cada vez. Os exemplos de microcontrola-
dores de 8 bits são Intel 8031/8051. Estes são usados em controle de
posição, aplicações de controle de velocidade.
b) O microcontrolador de 16 bits: ele executa maior precisão e desempe-
nho em comparação com 8 bits. Estes são desenvolvidos para a finalidade

14
de aplicações de alta velocidade, como sistema de controle servo, robótica
etc. Alguns exemplos de microcontrolador de 16 bits são MCUs de 16 bits,
famílias estendidas Intel 8096 e Motorola MC68HC12.
c) O microcontrolador de 32 bits: ele usa as instruções de 32 bits para
realizar as operações aritméticas e lógicas. Elas são desenvolvidas para
efeitos de aplicação de velocidade muito alta em processamento de ima-
gem, telecomunicações, sistema de controle inteligente etc.

Obs.: As famílias dos microcontroladores são classificados em geral pelos nú-


meros de bits .

Exemplos de famílias de microcontroladores


Tabela 1 – Fabricantes e tipos de microcontroladores
FABRICANTE TIPO FABRICANTE TIPO
ARM ARM Cortex M Core MAXIM INTEGRATED MAX32650
MICROCHIP Atmel AVR 32 MICROCHIP PIC 32-bit PIC32
CYPRESS M8C (PSoC) NPX LPC 4000
FREESCALE ColdFire 32bit RABBIT 2000 8 BIT
NXP 8051 RENESAS ELECTRONICS R8C 16 BIT MCU
INFINEON 32 bit TriCore TEXAS INSTRUMENTS C2000 32BIT
Fonte: Elaborada pelo autor

Classificação de acordo com dispositivos de memória


a) Memória interna do Microcontrolador: quando na unidade do micro-
controlador tem internamente a memória de programa e dados, além
das portas de Entrada/Saída, comunicação serial, contadores, tempori-
zadores e interrupções.
b) Memória externa do Microcontrolador: quando uma unidade de mi-
crocontrolador não possui todas as blocos disponíveis em um chip, ope-
rando com memória externa.

Classificação de acordo com o conjunto de instruções


a) Arquitetura CISC (Figura 6): CISC (Complex Instruction Set
Computer) - computador com conjunto de instruções complexas,
permite ao usuário aplicar 1 instrução como alternativa para mui-
tas instruções simples ou microinstruções.

15
15
UNIDADE Microcontroladores para IoT

INSTRUÇÕES DE MÁQUINA
CONVERSÃO DO MICROCÓDIGO
MICROINSTRUÇÕES
EXECUÇÃO DA MICROINSTRUÇÃO
Figura 6 – Arquitetura CISC

Para entender melhor a figura 6, o código ou instruções de máquina


consiste de uma sequência de bytes que tratam de instruções a serem
executadas pelo processador. Por exemplo a palavra HELLO WORD
da Figura 7. Os códigos associados a esta palavra são executados em
nível microinstrução.

Figura 7 – Código em baixo nível


Fonte: Adaptado de Wikimedia Commons

Atualmente, os microcontroladores são programados por interfaces de


programação amigáveis e voltadas a lógica de programação em alto nível.
b) Arquitetura RISC (Figura 8): RISC significa Reduced Instruction
Set Computers - Computadores com Conjunto de Instruções Reduzi-
das. O RISC reduz o tempo de operação encurtando o ciclo de clock
por instrução. O RISC oferece uma execução melhor que a CISC.

INSTRUÇÕES DE MÁQUINA
EXECUÇÃO DA MICROINSTRUÇÃO
Figura 8 – Arquitetura RISC

Tabela 2 - Conjunto de instruções para CISC e RISC


CISC RISC
Mov AX, 4 Mov AX, 0
Mov BX, 2 Mov BX, 4
ADICIONAR BX, AX Mov CX, 2
Início - ADICIONAR AX, BX
Loop - Início
Fonte: Elaborada pelo autor

No exemplo acima, os sistemas RISC diminuem o tempo de execução redu-


zindo os ciclos de clock por instrução, e os sistemas CISC diminuem o tempo
de execução reduzindo o número de instruções por programa. O RISC oferece
uma execução melhor que a CISC.

16
Classificação de acordo com a arquitetura de memória
a) Microcontrolador com Arquitetura de Memória Harvard (Figura 9):
o ponto em que uma unidade microcontroladora tem um endereço de
memória diferente e espaço para o programa e memória de dados, o
microcontrolador tem arquitetura de memória Harvard no processador.

MEMÓRIA
UNIDADE DE DE DADOS

PROCESSAMENTO MEMÓRIA DE
DE PROGRAMA

Figura 9 – Arquitetura Harvard


b) Microcontrolador com Arquitetura de Memória Princeton (Figura 10):
esta arquitetura é assim denominada quando um microcontrolador tem um
endereço de memória comum para a memória de programa e memória
de dados.

UNIDADE DE MEMÓRIA DE
PROCESSAMENTO DADOS E DE
PROGRAMA

Figura 10 – Arquitetura Princeton

Em Síntese Importante!

Existem vários tipos diferentes de microcontroladores programáveis. Podemos catego-


rizar por vários parâmetros, incluindo bits, tamanho do flash, tamanho da memória
RAM, conjunto de instruções, número de linhas de entrada / saída, tipo de embalagem,
arquitetura, tensão de alimentação e velocidade.

TIPOS DE MICROCONTROLADORES
MICROCONTROLADOR

BITS MEMÓRIA/DISPOTIVOS CONJUNTO DE ARQUITETURA DE MEMÓRIA


INSTRUÇÕES

4 8 16 32 EMBARCADO EXTERNO CISC RISC Priceton Harvard

FAMÍLIA

805.1 Motorola PIC Texas National ARM others


EXEMPLOS
Intel Atmel Dallas Phillips Siemens

Figura 11

17
17
UNIDADE Microcontroladores para IoT

Tipos de Microcontroladores, Principais


Fabricantes e suas Características Técnicas
Microcontrolador 8051
É um microcontrolador de 40 pinos com Vcc (tensão de alimentação) de
5V conectado ao pino 40 e Vss (tensão de referência ou terra) no pino 20 que
é mantido 0V. Possuem portas de entrada e saída de P1.0 - P1.7 e recurso de
drenagem aberta. Port3 tem recursos extras. O pino 36 tem uma condição de
drenagem aberta e o pino 17 tem um transistor interno dentro do microcontrola-
dor. Quando aplicamos a lógica 1 na porta 1, obtemos a lógica 1 na porta 21 e
vice-versa. A programação do microcontrolador é realizada com conhecimentos
de programação e arquitetura do microcontrolador. Basicamente, escreve-se um
programa em linguagem C que é convertido em linguagem de máquina para ser
interpretado pelo microcontrolador. Um pino RESET é conectado ao pino 9,
conectado a um capacitor. Quando o interruptor está ligado, o capacitor começa
a carregar e o RST é alto. A aplicação de um valor elevado ao pino de reinicia-
lização redefine o microcontrolador. Se aplicarmos a lógica zero a este pino, o
programa inicia a execução desde o começo.

Arquitetura de memória de 8051


A memória do 8051 é dividida em duas partes. Elas são memória de programa
e memória de dados (Figura 11) . Memória de Programa armazena o programa que
está sendo executado, enquanto a Memória de Dados armazena temporariamente
os dados e os resultados. O 8051 tem sido usado em um grande número de dispo-
sitivos, principalmente porque é fácil de integrar em um dispositivo. Microcontro-
ladores são usados principalmente em gerenciamento de energia, tela sensível ao
toque, automóveis e dispositivos médicos.

FFH FFFFH FFFFH FFFFH


VCC

SFRS XX51 External


External EA Program
Data Memory XX51 External
80H Memory (60K) EA Data
(max64K) Memory
7FH (max60K)
123 0FFFH External 1000H
bytes of
internal Program
data 0000H Memory
memory 0000H (4K) 0000H
00H

ARQUITETURA DE MEMÓRIA DE DADOS ARQUITETURA DE MEMÓRIA DE PROGRAMA


ARQUITETURA DE MEMÓRIA DO
MICROCONTROLADOR 8051
Figura 11 – As duas partes de memória do Microcontrolador 8051

18
Pinagem e blocos do Microcontrolador 8051
O 8051 foi produzido pela primeira vez em 1980, foi o sucessor do primeiro
microcontrolador da Intel, o 8048, lançado originalmente em 1976. Ao longo
dos anos, tem sido uma das famílias de microcontroladores mais populares e
ainda vale a pena ser visto. A Intel não produz mais microcontroladores base-
ados em 8051, mas há variantes sendo vendidas principalmente pela Cypress,
Maxim, Microchip / Atmel e Silicon Labs.
O 8051 também se tornou popular como um complemento aos módulos Bluetooth
como uma solução System-On-Chip (SOC). Exemplos são a série CC2541 da Texas
Instruments, os módulos Bluegiga da Silicon Labs e os módulos HC-05/06. A vanta-
gem disso é que pode adicionar seu próprio código em cima da pilha Bluetooth e evitar
provisionar um microcontrolador separado no projeto. A arquitetura clássica do 8051 é
bastante básica (figura 12) e, portanto, fácil de aprender.
Intel 8051 Microarchitecture
P0.0 - P0.7 P2.0 - P2.7

Vcc
Port 0 Port 2
Vss Drivers Drivers

RAM Addr. Port 0 Port 2 EPROM/


Register RAM
Latch Latch ROM

Program
Address
ACC Stack Register
Pointer

B TMP2 TMP1 Buffer


Register

PC
Interrupt, Serial Port,
ALU Incrementer 16
and Timer Blocks

8 Program
PSW Counter
PSEN#
Instruction
Register

ALE/PROG# Timing
and DPTR
EA#/VPP Control
RST

Port 1 Port 3
Latch Latch

Port 1 Port 3
OSC. Drivers Drivers

XTAL1 XTAL2

P1.0 - P1.7 P3.0 - P3.7

Figura 12 – Arquitetura em blocos do Microcontrolador 8051


Fonte: Wikimedia Commons

19
19
UNIDADE Microcontroladores para IoT

Uma característica do núcleo do 8051 que merece ser estudada é a inclusão de


um mecanismo de processamento booleano que permite que operações de lógica
booleana de nível de bit sejam executadas de forma direta e eficiente em determina-
dos registros internos, portas e locais de RAM selecionados. Os 16 bytes (128 bits)
dos locais internos de RAM 0x20–0x2F são endereçáveis por bits.

Outra característica é a inclusão de quatro conjuntos de registros de trabalho


selecionáveis pelo banco (R0-R7) que reduzem bastante a quantidade de tempo ne-
cessário para completar uma rotina de interrupção de serviço. Com uma instrução,
o 8051 pode alternar bancos de registradores versus a tarefa demorada de transfe-
rir os registros críticos para a pilha, ou locais de RAM designados. Esses registros
também permitiram que o 8051 realize rapidamente uma troca de contexto.

Outra razão para estudar o 8051 é que ele é um dos poucos microcontroladores
que são deixados com um conjunto de instruções CISC baseado em acumulador,
apesar de ser simples em comparação com sua grande prima, a arquitetura 80x86.

Microcontroladores clássicos baseados em 8051 normalmente incluem um ou


dois UARTs, dois ou três temporizadores, 128 ou 256 bytes de dados internos
RAM (16 bytes dos quais endereçáveis por bits), até 128 bytes de E / S, 512 bytes
a 64 KB de memória de programa interna e, às vezes, uma quantidade de RAM de
dados estendidos (ERAM) localizada no espaço de dados externo. As variações mais
recentes incluem interfaces seriais populares, como I²C, SPI e USB.

• UART: Universal Asynchronous Receiver/Transmitter é o acrônimo de Receptor/Transmissor


Explor

Universal Assíncrono. Sua finalidade é possibilitar a transmissão e a recepção de dados


originalmente disponíveis na forma paralela.
• I²C - (Inter-Integrated Circuit) é um protocolo de barramento serial desenvolvido pela
Philips que é usado para conectar periféricos de baixa velocidade a uma placa mãe, a um
sistema embarcado ou a um telefone celular.
• SPI - Serial Peripheral Interface ou SPI é um protocolo que permite a comunicação
do microcontrolador com diversos outros componentes, formando uma rede. É uma
especificação de interface de comunicação série síncrona usada para comunicação de
curta distância, principalmente em sistemas embarcados.
• USB - (Universal Serial Bus) baseia-se numa arquitetura de tipo série. É uma interface
de entrada/saída muito mais rápida do que as portas padrão, principalmente a pa-
ralela, que não suporta frequências muito altas.

Tabela 3 – Função da Pinagem do Microcontrolador 8051


Pino Nome E/S Função
O Port 1 é uma interface de E/S bidirecional com 8 bits individualmente endereçáveis
e resistores de pull-up internos. Terminais que estejam no estado lógico 1 podem
1a8 P1.0 a P1.7 E/S
ser utilizados como entradas. No 89S52, alguns pinos deste port possuem
funções alternativas.

20
Quando aplicado nível lógico 1 a este terminal durante 2 ciclos de máquina (com
o oscilador operando) ocorre o reset do microcomputador. Um resistor interno
9 RST (RESET) E
conectado a VSS permite o power-onreset com apenas um capacitor externo
conectado a VCC.
O Port 3 é uma interface de E/S bidirecional com 8 bits individualmente endereçáveis
10 a 17 P3.0 a P3.7 E/S e resistores de pull-up internos. Terminais que estejam no estado lógico 1 podem ser
utilizados como entradas. O Port 3 também funções alternativas em todos os pinos.
18 XTAL2 (clock2) Saída do amplificador inversor do oscilador.
19 XTAL1 (clock1) Entrada do amplificador inversor do oscilador e entrada do gerador de clock interno.
20 VSS (GND OU TERRA) Potencial de referência (terra).
O Port 2 é uma interface de E/S bidirecional com 8 bits individualmente endereçáveis
e resistores de pull-up internos. Terminais que estejam no estado lógico 1 podem
21 a 28 P2.0 a P2.7 E/S
ser utilizados como entradas. O Port 2 também gera a parte mais significativa dos
endereços durante acessos às memórias externas de programa ou dados.
PROGRAM STORE ENABLE: Habilita o acesso à memória de programa externa durante
29 PSEN S a busca de instruções. Permance em nível lógico 1 durante o acesso da memória de
programa interna.
ADDRESS LATCH ENABLE: Fornece o sinal para armazenamento da parte menos
30 ALE S significativa do endereço durante acessos às memórias externas de programa
ou dados.
EXTERNAL ACCESS: Quando em nível lógico 1, as instruções da memória de programa
interna são executadas. Quando em nível lógico 0, todas as instruções são buscadas
31 EA E
na memória de programa externa. No caso do 8031 este terminal deve sempre estar
em nível lógico 0.
O Port 0 é uma interface de E/S bidirecional com 8 bits individualmente endereçáveis
em dreno aberto. Terminais que estejam no estado lógico 1 podem ser utilizados
32 a 39 P0.0 A P0.7 E/S como entradas de alta impedância. O Port 0 também atua como barramento de dados
e gera de maneira multiplexada a parte menos significativa dos endereços durante
acessos às memórias externas de programa ou dados.
40 VCC Potencial de alimentação (+5v)
RXD (Received Receptor da interface serial assíncrona ou entrada e saída de dados da interface
P3.0
eXchange Data)/data serial síncrona.
TXD (Transmission Transmissor da interface serial assíncrona ou saída de clock da interface
P3.1
eXchange Data)/clock serial síncrona.
INT 0 (interruption
P3.2 Entrada de interrupção externa 0 ou sinal de controle para o contador 0.
priority 1)
INT 1 (interruption
P3.3 Entrada de interrupção externa 1 ou sinal de controle para o contador 1.
priority 3)
P3.4 T0 Entrada externa para o contador 0.
P3.5 T1 Entrada externa para o contador 1.
P3.6 WR Write Sinal de escrita na memória externa de dados.
P3.7 RD Read Sinal de leitura na memória externa de dados.
P1.0 T2 Entrada externa para o contador 2.
P1.1 T2EX Sinal de trigger para captura/recarga do contador 2, controle de direção.
MISO I (Master In/
P1.5 Interface SPI - Serial Peripherical Interface (usada para programação).
Slave Out)
MOSI (Master out/
P1.6 Interface SPI - Serial Peripherical Interface (usada para programação).
Slave in)
P1.7 SCK (serial clock) Interface SPI - Serial Peripherical Interface (usada para programação).
Fonte: Adaptado pelo autor

21
21
UNIDADE Microcontroladores para IoT

Figura 13 – Encapsulamento e configuração da pinagem do Microcontrolador 8051


Fonte: Adaptado de Wikimedia Commons

Microcontrolador ATmega328/P da Atmel


O núcleo Atmel AVR® combina um rico conjunto de instruções com 32 regis-
tros de trabalho de uso geral. Embora o microcontrolador seja de 8 bits, todos es-
tes 32 registros são conectados diretamente à Unidade Lógica Aritmética (ALU),
permitindo dois registros independentes para serem acessados em uma única
instrução executada por um ciclo de clock. A arquitetura resultante é um código
mais eficiente ao atingir throughputs (taxa de transferência) até dez vezes mais
rápido que os microcontroladores CISC convencionais.

O ATmega328/P oferece os seguintes recursos: 32Kbytes de Memória Flash


Programável em Sistema com Recursos de leitura ou durante a gravação, 1Kbytes
EEPROM, 2Kbytes SRAM, 23 linhas de E / S para fins gerais, 32 registros de
trabalho de uso geral, contador de tempo real (RTC), três temporizadores / conta-
dores flexíveis com modos e PWM ( Modulação por largura de pulso), 1 USARTs
serial programável, 1 interface serial de 2 fios orientada por byte (I2C), um ADC
(conversor analógico digital) de 10 bits do canal, um temporizador de Watchdog
programável com oscilador interno, uma porta serial SPI e seis modos de econo-
mia de energia selecionáveis por sofware.

22
Figura 14 – Diagrama de Bloco do ATmega328/P da Atmel
Fonte: Divulgação

23
23
UNIDADE Microcontroladores para IoT

O modo para a CPU enquanto permite que a SRAM, Timer / Contadores,


porta SPI e sistema de interrupção continuem funcionando. O modo de Desli-
gamento salva o conteúdo do registro, mas congela o Oscilador, desabilitando
todas as outras funções do chip até a próxima interrupção ou reinicialização do
hardware. No modo de economia de energia, o temporizador assíncrono conti-
nua a ser executado, permitindo que o usuário mantenha uma base temporizada
enquanto o resto do dispositivo está dormindo (stand by). O modo de Redução
de Ruído ADC para a CPU e todos os módulos de E/S, exceto temporizador
assíncrono e ADC que minimizam o ruído de comutação durante conversões de
ADC. No modo de espera, o oscilador de cristal / ressonador está funcionando
enquanto o resto do dispositivo está dormindo (em stand by), figura 15.

Figura 15a – Encapsulamentos e Configurações da pinagem do ATmega328/P da Atmel

Figura 15b – Encapsulamentos e Configurações da pinagem do ATmega328/P da Atmel


Fonte: Divulgação

O ATmega328 é um chip microcontrolador encontrado em placas Arduino


Uno. Os microcontroladores ATmega328 são da família de microcontroladores
AVR de 8 bits. O ATmega328 é conectado a um soquete no Arduino Uno,
como mostra a imagem abaixo. Existem algumas placas Arduino Uno que pos-
suem um chip ATmega328 de montagem em superfície (figura 16).

24
Figura 16 – Atmega 328 AVR em uma placa Arduino
Fonte: Adaptado de iStock/Getty Images

Em um Arduino, o microcontrolador é o principal componente que faz todo o tra-


balho. Quando um programa feito na IDE apropriada é carregado no Arduino, ele é
carregado na memória dentro do chip do microcontrolador. O microcontrolador então
executa o programa quando o Arduino é ligado ou reinicializado após a programação.

Os microcontroladores AVR eram anteriormente fabricados por uma empre-


sa chamada Atmel. A Atmel foi comprada pela Microchip, então os microcon-
troladores da AVR não são mais um produto da Atmel, mas sim um produto da
Microchip. O que era um microcontrolador ATmega328 da Atmel AVR agora é
um microcontrolador Microchip AVR ATmega328.

Microcontrolador ATmega2560 AVR


Um microcontrolador ATmega2560 é o microcontrolador encontrado nas pla-
cas Arduino MEGA 2560. O microcontrolador ATmega2560 também é da família
de microcontroladores AVR de 8 bits. Ele difere do ATmega328 por estar disponí-
vel apenas em um pacote de montagem de superfície, portanto não pode ser inse-
rido e removido de um soquete no Arduino. Ele também tem mais memória, mais
pinos e mais periféricos de hardware integrados do que o ATmega328 (figura 17).

Figura17 – ATmega2560 AVR em uma placa Arduino


Fonte: Adaptado de iStock/Getty Images

25
25
UNIDADE Microcontroladores para IoT

Linguagem de Programação
para Microcontrolador
Em muitos aspectos, a programação de um sistema microcontrolado não é
muito diferente da codificação de um computador desktop, mas existem algumas
diferenças importantes:
• em um sistema embarcado, os recursos - memória e potência da CPU - são
limitados. Por comparação com sistemas desktop, é comumente assumido
que eles não têm limites.
• sistemas embarcados são geralmente em tempo real.
• o número de sistemas operacionais em uso em computadores desktop é
bem pequeno. Existem sistemas operacionais bem específicos para sistemas
embarcados, mas em geral não precisam serem adotados.
• para a primeira aproximação, o hardware de todos os PCs é idêntico. Em com-
paração, cada sistema embarcado é diferente, portanto, programar próximo ao
hardware é mais comum.

As necessidades dos desenvolvedores são suficientemente especiais para que


se possa esperar que linguagens especializadas sejam desenvolvidas para atender
a seus requisitos exclusivos. Há exemplos de linguagens que foram projetadas
desde o início para aplicativos embarcados (por exemplo, PL / M, Forth, Ada),
mas não encontraram aceitação universal.

Linguagem C
A linguagem C foi projetado nos anos 70 por Dennis Ritchie na AT & T Bell
Labs. A linguagem foi baseada em uma tentativa anterior de desenvolver uma
linguagem de alto nível chamada B, que tinha os benefícios da montagem. Este,
por sua vez, começou como BCPL em Cambridge, Inglaterra. O livro de referên-
cia original, The C Programming Language, de Brian W. Kernighan e Dennis
M. Ritchie, foi publicado em 1978. A padronização completa (por ANSI) levou
outros 10 anos e houve várias iterações desde então.

Embora nunca tenha sido projetado ou destinado ao uso embarcado, o C conti-


nua a ser a linguagem de programação embarcada mais usada, com compiladores
disponíveis para quase todos os microprocessadores, microcontroladores e pro-
cessadores do mercado.

Mesmo que C seja uma linguagem estruturada, ela oferece uma grande flexi-
bilidade, permitindo a escrita de código que é bastante legível, mas com ofusca-
ção, uma opção prontamente disponível.

26
Aqui está um exemplo de código C bem definido.

int x, y, z;

for (x = 0; x < 4; x++)

z = strlen (bullets [x]);

for (y = 0; y < z; y++)

blab (bullets [x] [y])

O estilo a seguir é um pouco mais compacto, mas ainda é válido.

for (int x = 0; x < 4; x++) {

for (int y = 0; y < strlen (bullets [x]); y++) {

blab (bullets [x] [y]);

Apesar de seus desafios, a sintaxe C tem sido a base para vários outros idiomas.
Além de precisar de cuidados com o layout, o C tem uma série de outras “flexibi-
lidades” que podem levar a problemas.
• Os ponteiros são poderosos, mas podem facilmente causar confusão.
• A linguagem é fracamente tipada, facilitando conversões acidentais, o que
pode facilmente levar a erros sutis.
• Os recursos de memória dinâmica são bastante primitivos e não são adequa-
dos para sistemas em tempo real.

Usualmente a linguagem C é a mais usada na programação de microcontro-


ladores e exige conhecimento mínimo da estrutura de programação, além de co-
nhecimentos específicos sobre as estruturas internas do microcontrolador que fará
parte do projeto. São necessários os conhecimentos da arquitetura interna do mi-
crocontrolador, o conhecimento do sensor e como o projeto vai funcionar e sua
respectiva lógica.

A estrutura básica de um programa em C para microcontroladores pode ser


descrita de forma resumida como:

27
27
UNIDADE Microcontroladores para IoT

void main ()

//inicializações do hardware/placa e do programa

while (1)

//tarefas a serem executadas pelo microcontrolador durante o funcionamento

Linguagem C++
O uso de C++ para microcontroladores merece algumas observações, uma
vez que é uma linguagem orientada a objeto, por este motivo, a princípio pode
ser que parece inútil sua utilização. As considerações para o uso dessa linguagem
são as seguintes:
• Código bem estruturado em C++ é melhor que código mal estruturado em C;
• Usar classes necessariamente não gera maio número de linhas de código, porém
permite uma melhor organização do código e de sua documentação;
• A maioria dos programas C também é válida em C++, ou seja, pode-se
escrever um programa C++ somente com a linguagem C. Isto nos remete
ao fato de que só porque uma linguagem tem vários recursos, não é obri-
gatório utilizar todos estes recursos. Então pode-se associar um melhor
aprendizado usando o C++.

Considerando que uma das plataformas microcontroladas de maior sucesso é


o Arduino, que é baseado na linguagem Wiring, esta linguagem incorpora o C++
com bibliotecas padronizadas para os periféricos do Atmega, facilitando muito a
programação. Na verdade, o compilador usado no Arduino é o próprio WinAVR.

Java ME
A Plataforma Java, Micro Edition (Java ME) fornece um ambiente robusto e fle-
xível para aplicativos executados em dispositivos embarcados e móveis na Internet
das Coisas: microcontroladores, sensores, gateways, telefones celulares, assistentes
digitais pessoais (PDAs), TV caixas de topo, impressoras e muito mais. O Java ME in-
clui interfaces de usuário flexíveis, segurança robusta, protocolos de rede integrados e
suporte para aplicativos em rede e off-line que podem ser baixados dinamicamente.
Os aplicativos baseados no Java ME são portáteis em vários dispositivos, mas apro-
veitam os recursos nativos de cada dispositivo.

28
Oracle Java ME Embarcado - O Oracle Java ME Embedded é um Java runtime
que aproveita as principais tecnologias Java ME implantadas em bilhões de dispo-
sitivos em todo o mundo na Internet das Coisas. As especificações do Java ME são
projetadas para serem ricas em funcionalidade, portáteis para uma ampla variedade
de dispositivos, flexíveis e seguras, ao mesmo tempo que são muito eficientes em
termos de recursos e mantêm baixas as demandas na plataforma subjacente

Java ME SDK - O SDK (Software Development Kit) do Java ME fornece emu-


lação de dispositivo, um ambiente de desenvolvimento independente e um conjunto
de utilitários para o rápido desenvolvimento de aplicativos Java ME. Ele integra a
configuração de dispositivos limitados conectados (CLDC) e a tecnologia Connected
Device Configuration (CDC) em um ambiente de desenvolvimento simples.

Cliente Incorporado do Oracle Java ME - O Oracle Java ME Embedded


Client permite que você desenvolva aplicativos altamente funcionais, confiáveis
e portáteis para os sistemas embarcados mais poderosos da atualidade. A flexibi-
lidade da plataforma Java, juntamente com a base de desenvolvedores estabele-
cida, permite desenvolver produtos seguros e inovadores, ao mesmo tempo em
que obtém maior economia de custos e maior tempo de comercialização. Uma
plataforma vital que oferece confiabilidade líder de mercado, desempenho, rendi-
mento, segurança e suporte a várias plataformas.

Java para Celular - A Configuração do Dispositivo Limitado Conectado e as


APIs do Java ME são usadas por um grande número de desenvolvedores, ope-
radoras e OEMs de telefones celulares Java para criar produtos de telefone com
recursos em todo o mundo. A Oracle é a líder no fornecimento de tecnologia de
telefonia móvel encontrada em mais de três bilhões de dispositivos e contando.

Oracle Java Platform Integrator - Amplie o alcance do Java na Internet das


Coisas (IoT) com o OJPI. A Oracle introduziu o programa Oracle Java Platform
Integrator para fornecer aos parceiros a capacidade de personalizar os produtos
Oracle Java Embedded, incluindo o Oracle Java SE Embedded, o Oracle Java
ME Embedded e o Oracle Java ME Embedded Client, para alcançar diferentes
tipos de dispositivos e segmentos de mercado. Juntamente com o enorme ecos-
sistema Java de mais de 9 milhões de desenvolvedores Java em todo o mundo,
esse novo programa ajudará a permitir maior flexibilidade de desenvolvimento e
implantação para a IoT.

Linguagem Python
Atualmente, novas oportunidades de linguagens mais fáceis vêm tomando a
atenção dos desenvolvedores de projetos IoT. Olhando para a barra de linguagens
de baixo nível a alto nível da figura 18, mostra a Python como uma das linguagens
que mais aparecem na preferência dos projetistas de IoT.

29
29
UNIDADE Microcontroladores para IoT

Assembly C++ JavaScript Python


BAIXO NÍVEL ALTO NÍVEL

C Java Node Ruby


Figura 18 – Barra de linguagens para IoT

Quando se trata de placas microcontroladoras, esses minúsculos computado-


res que permitem rodar programas para controlar a maioria dos projetos eletrô-
nicos, como robôs, drones e até mesmo servidores web, pode ser difícil escolher
a linguagem de codificação certa para trabalhar. Com dezenas de placas, cada
uma com suas próprias especificações e linguagens de programação, os projetis-
tas podem lidar com certas dificulades nas implementações por software.

Linguagens de programação são de três tipos diferentes: baixo nível, nível médio
e alto nível. As linguagens de baixo nível estão mais próximas de como os compu-
tadores “falam” e são executados diretamente no processador: são difíceis de usar
(leia “impossível ler para humanos”), mas podem ser usados com armazenamento
limitado e são altamente poderosos; eles podem lidar com muito mais instruções por
segundo. Linguagens de programação como Assembly, BASIC, Visual Basic e C
entram nesta categoria.

Em seguida, vem em nível intermediário: mais fácil de codificar, mas ainda re-
quer algum tempo e prática para dominar. As linguagens Java, C # e C ++ são
bons exemplos de linguagens de programação de nível médio.

Finalmente, as linguagens de programação de alto nível estão muito próximas


de como os humanos “falam”, permitindo a redução do tempo necessário para
programar seus projetos de microcontroladores e protótipos mais rapidamente,
mas com desempenhos mais fracos.

O microcontrolador mais famoso do mercado é o Arduino e está codificado


em C / C ++. E essa é a linguagem de programação que a maioria das pessoas
recomendará devido a popularização. Estando por aí por algum tempo e perto da
máquina, a linguagem C ainda é relativamente mais fácil de aprender do que qual-
quer outra linguagem de programação de baixo nível e é bem suportada. É uma das
melhores soluções para recursos limitados, como microcontroladores.

No entanto, enquanto C tem sido tradicionalmente a linguagem “go-to” para


microcontroladores, os novos boards fizeram sua aparição no mercado, permi-
tindo uma maior escolha de linguagens de programação, mantendo performan-
ces com um alto padrão. Portanto, com base em um ambiente Linux, as placas
de alta venda da Intel é a Edisson, suportando a linguagem Python (entre outras)
e até mesmo a tornaram a linguagem principal para o Raspberry Pi.

30
Os evangelistas de Python dizem o seguinte: “Comparado com um Arduino,
a placa Micro Python é mais poderosa, mais fácil de programar e você não
precisa de um compilador no seu PC. Comparado com um Raspberry Pi, o
cartão Micro Python é mais barato, menor, mais simples (você pode fazer um,
ou mesmo modificar o design para atender às suas necessidades) e usa menos
energia. A maioria das outras placas são programadas em C, que é uma lin-
guagem de baixo nível e pode ser difícil de programar corretamente. Por outro
lado, o Python é uma linguagem de alto nível, o que significa que o Python tem
um código menor e mais simples para fazer a mesma coisa que o C”.

No entanto, para aplicação desta linguagem deve usar uma IDE e placa especí-
fica que podem ser limitantes para a aceitação no mercado. A linguagem Python
tem sido utilizada para integrar os dados oriundos das saídas das placas com os
dados resultantes do programa.

Linguagem Javascript
Uma combinação natural em um mundo orientado a eventos é o da IoT e do
Javascript. Seja pelo Pi, Arduino ou placas Bluetooth ou Wifi personalizadas,
mais dispositivos são conectados através do Node.js todos os dias desde 2012.

Existem várias plataformas que auxiliam no desenvolvimento de aplicações


usando microcontroladores. Destacando-se algumas a seguir.

O Johnny-five é provavelmente a plataforma de robótica e Internet das coisas


mais populares para Arduino, Raspberry Pi, Intel Edison Tessel 2 e muito mais.
Este projeto é voltado para a comunidade e está recebendo mais popularidade
todos os dias.

Cylon é um framework Javascript com suporte para mais de 43 plataformas


para robótica, computação física e internet das coisas. O Cylon pode ser executado
diretamente no navegador (por meio de browserify) ou em qualquer aplicativo
conectado ao Chrome e suporta plug-ins http / https, mqtt e socket.io.

Figura 20
Figura 19 Fonte: Divulgação
Fonte: Divulgação

31
31
UNIDADE Microcontroladores para IoT

O Node-Red foi construído com a ideia de criar uma maneira simples e visual
de manipular fluxos de dados nos mundos físico e digital. É uma ferramenta de
programação para conectar dispositivos de hardware, APIs e serviços online de
maneiras interessantes.

O Jerryscript é um mecanismo Javascript leve para a Internet que permite


que ele seja executado em dispositivos e microcontroladores muito restritos com
menos de 64 KB de RAM e menos de 200 KB de memória flash. O mecanismo
suporta compilação, execução no dispositivo e fornece acesso a periféricos a partir
do JavaScript.

Figura 21 Figura 22
Fonte: Divulgação Fonte: Divulgação

O Node-mcu é uma plataforma de IoT simples para prototipagem de hardware


que inclui firmware e placas de desenvolvimento para desenvolver aplicativos IoT
que permitem escrever aplicativos de rede usando a sintaxe Node (seu modelo
de programação é semelhante ao Node.js, mas é baseado em Lua). Ele vem com
um nó sem fio e / ou ponto de acesso fácil de programar com um modelo de
programação assíncrona orientada a eventos e mais de 65 módulos integrados.

O projeto IoT.js é o framework JavaScript da Samsung para a internet das


coisas. Esta biblioteca tem como objetivo fornecer plataforma de serviços interope-
ráveis no mundo da Internet das coisas, com base na tecnologia da Web, durante
a execução em dispositivos com recursos limitados.

Figura 24
Figura 23 Fonte: Divulgação
Fonte: Divulgação

32
Um pacote Node.js para acessar portas seriais - Linux, OSX e Windows. Ele
fornece uma interface de fluxo para o código de porta serial de baixo nível necessário
para controlar diferentes dispositivos IoT, escrevendo código Javascript.

Figura 25
Fonte: Divulgação

Vale ressaltar que embora existam várias ferramentas de programação para rea-
lizar projetos de IoT, é importante considerar as bases de programação. Como por
exemplo tipos de dados que serão usados para definição na programação.

Relembrando algumas premissas comuns que definem as variáveis de qualquer


linguagem de programação.

Tipos de Dados
Toda variável usada em um programa deve ser declarada como de um deter-
minado tipo, que define seu tamanho (em número de bits) e suas características.
As variáveis podem ser vistas na tabela 4.

Tabela 4 – tipos de dados


Tipo Bytes Mínimo Máximo Representa
void Zero Sem valor Sem valor Valores nulos
char 1 -128 127 Caracteres
int 2 -32768 32767 Inteiros
float 4 ±1,5 x 10-45 ±3,4 x 1038 Valores com casas decimais (ponto flutuante)
double 8 ±4,9 x 10-324 ±1,8 x 10308 Valores com casas decimais (ponto flutuante)

A seguir são apresentados os modificadores de tipo de dados na tabela 5.

Tabela 5 – tipos de modificadores


Tipo Modificação
signed Com sinal
unsigned Sem sinal
short Inteiro menor que o padrão
long Inteiro maior que o padrão

33
33
UNIDADE Microcontroladores para IoT

Os dados são do tipo inteiro quando forem como os listados na tabela 6.

Tabela 6 – tipos de dados inteiros


Tipo Bytes Mínimos Máximo
char 1 -128 127
signed char 1 -128 127
unsigned char 1 0 255
short int 2 -128 127
signed short int 2 -128 127
unsigned short int 2 0 255
int 2 -32768 32767
signed int 2 -32768 32767
unsigned int 2 0 65535
short 2 -32768 32767
signed short 2 -32768 32767
unsigned short 2 0 65535
long int 4 -2 31
231-1
signed long int 4 -231 231-1
unsigned long int 4 0 232-1

As constantes servem para criar símbolos de valor constante que auxiliam na


programação. No momento da compilação, o compilador se encarrega de atribuir
os valores corretos aos símbolos criados, que não serão modificados. Por exemplo:

const LIGADO = 1;

const DESLIGADO = 0;

const TMAX = 100;

Após definir as constantes, é possível utilizar as palavras como tendo o mesmo


significado do valor numérico atribuído.

Definições do programa
Algumas definições podem ser incluídas para atribuir outros nomes a símbolos
já existentes no microcontrolador. Supondo que em uma das saídas no microcon-
trolador tenha-se um LED ligado ao bit 0 da porta A. Mas também, um motor DC
ligado ao bit 1 dessa mesma porta.

34
Para facilitar a programação, pode-se fazer:

#define LED PORTA.B0

#define MOTOR PORTA.B1

Observa-se que na Linguagem C os comandos iniciados pelo caractere “#”


são os únicos que não recebem ponto e vírgula no final da sentença. Assim, os
comandos de definição “#define” e “const” servem para tornar o programa mais
compreensível. Além disso, estes comandos são sempre eliminados pelo compila-
dor, ou seja, não consomem memória extra do microcontrolador.

Importante! Importante!

Toda a linguagem de programação é uma ferramenta para desenvolver programas


de forma mais inteligível pelo projetista. As linguagens precisam ser compiladas.
A compilação é uma forma de tradução da linguagem em um código apropriado
para o microcontrolador e suas características técnicas específicas. Quando um có-
digo é compilado, é necessário escolher o tipo de placa ou microcontrolador antes
de executar a compilação. Este procedimento decodificará para uma linguagem de
máquina os códigos interpretados pelo microcontrolador para realizar as tarefas
previamente programadas na ferramenta de programação. Esta ação facilitada por
IDEs (Integrated Development Environment – Ambiente de Desenvolvimento Inte-
grado) que incorporam a linguagem, as bibliotecas e os compiladores.

Figura 26
Fonte: iStock/Getty Images

35
35
UNIDADE Microcontroladores para IoT

Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:

  Sites
Martel Tecnologia
A empresa Martel fornece uma explanação bem didática e ilustrativa sobre mi-
crocontroladores. Explore o portal e acompanhe as informações oferecidas sobre
“O que é Microcontrolador?”.
https://goo.gl/ZDpksk
MikroElektronika
https://goo.gl/kpX22z
Explore Embedded
https://goo.gl/WZkCNB

 Vídeos
Microcontroladores, o que são? Para que servem? Quais os modelos? Internet das Coisas
Assista ao vídeo abaixo, bem interessante, para você observar a evolução dos micro-
controladores, das placas e dos softwares.
https://youtu.be/2ILbTSw6jJA

 Leitura
ATmega48A/PA/88A/PA/168A/PA/328/P
O fabricante de Microcontrolador Atmel disponibiliza em seu portal os DataSheets,
manuais técnicos das famílias dos microcontroladores para implementação em pro-
jetos. A família dos microcontroladores usados em placas Arduino são da linha do
ATMega. A seguir algumas características importantes destacadas que devem ser
sempre consultadas para o desenvolvimento dos projetos em IoT.
https://goo.gl/9apV3a

36
Referências
BONACORSO, Nelso Gauze. Automação eletropneumática. 12. ed. São Paulo:
Érica, 2013. 160 p. ISBN 9788571944251.

CAMARGO, Valter Luís Arlindo de. Elementos de automação. São Paulo: Erica,
2014. ISBN 9788536518411.

DUNN, William C. Fundamentos de instrumentação industrial e controle de


processos. Porto Alegre: Bookman, 2013. 326 p. ISBN 9788582600917.

STEVAN JUNIOR, Sergio Luiz. Automação e instrumentação industrial com


Arduino: teoria e projetos. São Paulo: Erica, 2015. ISBN 9788536518152.

OVERVIEW AND COMPARATIVE STUDY OF DIFFERENT MICROCONTROLLERS.


Rajratna Khadse, Nitin Gawai, Bagwan M. Faruk. International Journal for
Research in Applied Science & Engineering Technology. Volume 2 Issue XII, December
2014 ISSN: 2321-9653. Disponível em: <https://www.ijraset.com/archive-detail.
php?AID=22>.

PROGRAMAÇÃO LINGUAGEM C PARA MICROCONTROLADORES 8051,


da iniciativa u8051. Disponível em: <https://drive.google.com/file/d/0B8hyju-
FlXc9TdHN3MEdSZU1KdkU/view>.

37
37