Existe um grande salto entre a prototipagem em um Pi e o uso de um microcontrolador?


25

Essa pergunta pergunta, entre outras coisas, se existe uma grande curva de aprendizado entre o uso de Python em um Raspberry Pi para protótipo de um endpoint e o uso de um microcontrolador.

Claramente, há uma grande melhoria no consumo de energia (ao custo da taxa de transferência reduzida do processador), portanto existem boas razões para adotar a abordagem MCU para um produto que precisa ser alimentado por bateria.

Um dos possíveis motivos para ficar com um computador de placa única que executa o Linux é que não há software novo para aprender (acima de python ou similar), supondo que o aplicativo possa ser escrito em uma linguagem de alto nível (onde deve haver muitos padrões bibliotecas).

Em uma plataforma de desenvolvimento incorporada, as escolhas prováveis ​​são C ++ (mbed ou arduino) ou micropython. Minha impressão é que elas não são significativamente diferentes ou mais complexas do que escrever código para rodar no Linux - embora as plataformas tenham vantagens individuais. Perdi alguma coisa relevante para um desenvolvedor de software?

Especificamente, estou perguntando sobre os pontos de extremidade da IoT - portanto, não é essencial ter todos os recursos de um sistema Linux para os aplicativos nos quais estou interessado. Também é importante enfatizar que considerações de potência e latência tornam a implementação da mcu um requisito difícil nesse tipo de aplicativo.

Respostas:


12

Adicionando à resposta abrangente de George e ao ponto 2) suporte de hardware. Mesmo que o hardware desejado (por exemplo, Ethernet, WiFi, cartão SD) seja adicionado ao microcontrolador / Arduino por meio de blindagens ou placas de extensão semelhantes, as bibliotecas para operá-las estão sobrecarregando bastante a memória pequena (por exemplo, ATMEGA328 (um controlador típico do Arduino) possui 32 KB de FLASH e 2 KB de RAM). Especialmente ao combinar vários recursos (rede, tela, cartão SD), essa pode ser uma limitação grave.

Alguns exemplos do mundo Arduino:

Suportando um cartão SD e um sistema de arquivos simples (FAT):

  • Cartões SD (tamanho do código desconhecido, mas provavelmente não tão grande se o hardware SPI for usado), pelo menos 512 bytes de buffer RAM
  • O Petit FAT FS requer ~ 2..4 kB FLASH e ~ 44 bytes de RAM

Usando uma exibição de matriz:

Ethernet com pilha de protocolos TCP / IP:

  • uIP : requisitos de RAM na faixa de um tamanho de pacote típico (> 1 kB), no entanto, os controladores Ethernet de chip único geralmente vêm com buffer no chip que pode conter alguns quadros Ethernet de tamanho máximo.

    É possível executar a implementação do uIP com apenas 200 bytes de RAM, mas essa configuração fornecerá uma taxa de transferência extremamente baixa e permitirá apenas um pequeno número de conexões simultâneas. ( Fonte. )

  • Pilha de IPs com protocolos TCP e UDP para Arduino : mínimo de 128 kB de memória externa

  • IP sobre interface serial: SerialIP ~ 9 kB FLASH e "suficiente" RAM

Em suma, a programação com essas limitações requer uma abordagem bem diferente e exige otimização em relação ao espaço do programa e tamanho do código (FLASH), dados de tempo de execução (RAM) e velocidade de execução. Essa resposta foi bem desenvolvida.

Como a pergunta pergunta especificamente sobre a plataforma mbed, é claro que vale a pena incluir os recursos mais relevantes para a IoT, nomeadamente conectividade, juntamente com criptografia, autenticação e autorização. Ele supostamente oferece suporte de hardware para Bluetooth Low Energy e IPv6 através de rede pessoal sem fio de baixa potência. Embora esses recursos de conectividade estejam disponíveis apenas nas placas de desenvolvimento listadas com tipicamente> = 128 kB FLASH e> = 16 kB RAM. As placas de desenvolvimento menores, por outro lado, incluem sistemas com microcontroladores tão pequenos quanto o ARM Cortex-M0 + Core com 16KB de Flash, 4KB de RAM (ou seja, não muito mais que os Arduinos de tamanho médio) sem conectividade dedicada.


As restrições de recursos foram a maior lacuna em minhas suposições - fácil de esquecer que a maioria das pessoas se desenvolve sem esses problemas na maioria das vezes.
Sean Houlihane

20

Depende do que você está tentando fazer.

  1. A maior lacuna é que um microcontrolador que você mencionou (como o Arduino) não executa um sistema operacional multitarefa como o Linux. Isso significa que, se seu aplicativo depende de multitarefa ou multithreading, isso pode ser muito mais difícil ou até impossível de executar no Arduino.

  2. A segunda lacuna é o suporte de hardware. Por exemplo, o Raspberry Pi suporta câmeras, áudio USB, ethernet, Wi-Fi pronto para uso. Nada disso é suportado diretamente pelo Arduino e, embora você possa usar vários escudos (como host USB, Ethernet ou WiFi), usá-los não é tão simples quanto usar redes no Raspberry Pi.

  3. A terceira lacuna são os recursos disponíveis. A maioria dos microcontroladores não chega nem perto dos recursos que o Raspberry Pi oferece. Por exemplo, até o primeiro Raspberry Pi ofereceu uma CPU rodando a 700MHz com 256Mb de RAM e poderia ser usado com 32Gb de armazenamento. Um típico Arduino Uno baseado no ATMEGA328 está sendo executado em 16MHz e possui 32Kb de armazenamento e 2Kb de RAM.

Portanto, o uso do Raspberry Pi é definitivamente muito mais fácil para desenvolvedores vindos do PC. As principais vantagens do uso de microcontroladores são:

  • custos (um clone chinês do Arduino Nano custa menos de US $ 2 por peça com frete)
  • consumo de energia (os microcontroladores podem ser otimizados muito bem para baixo consumo de energia - importante se você precisar usar baterias);
  • disponibilidade em tempo real, ou seja, capacidade de reagir à alteração do sinal em tempo real;
  • tamanho (o Arduino Mini é duas vezes mais estreito que o Raspberry Pi Zero e, se você não precisar de tantos pinos, o tamanho do ATTINY85 é menor que um centavo e funciona sem cristal).

Se nada disso for importante, o uso do Raspberry Pi definitivamente faz mais sentido.


3
A energia da bateria e nenhum grande requisito de recursos são os drivers para o uso de uma mcu - portanto, estou assumindo que um processador de 10 a 100 MHz é suficiente. Ponto válido no uso de periféricos, embora SPI seja provavelmente o equivalente em mcu do USB.
21717 Sean Houlihane

2
Apenas ter um ônibus não é suficiente. Considere usar o WiFi no Linux, seu aplicativo não precisa de nenhum conhecimento específico sobre ele, o mesmo código que funciona com Ethernet funcionará com a interface WiFi. Este não é o caso dos microcontroladores, você precisaria usar bibliotecas diferentes, aprender a usá-las e alterar o código.
George Y.

11
OK, não sabia que usar uma biblioteca diferente seria uma grande barreira.
Sean Houlihane

2
Se você não precisa de muitos pinos, você pode ter uma ATtiny4 que é do tamanho de um grão de arroz: P
Nick T

11
aparentemente não é muito menor que o Attiny85 :), mas você está certo, se estivermos pensando em não mergulhar, até 85 é a ponta do dedo.
George Y.

9

SIM, é um grande salto da programação em Python para a programação usando as típicas ferramentas de linguagem baseadas em C no microcontrolador. De fato, em muitos casos, você pode precisar escrever alguns, se não todos, seu aplicativo em linguagem assembly.

Como já indicado nas outras respostas, os microcontroladores são muito limitados por recursos e, portanto, você perde todas as conveniências de um sistema operacional Linux e todas as ferramentas que podem ser executadas localmente. A iteração com o Arduino IDE é muito lenta se comparada à execução de scripts locais.

Embora eu tenha muita experiência profissional com microcontroladores e microprocessadores, prefiro executar meus projetos pessoais usando o hardware RPi com alguns Arduinos para itens críticos em tempo real. Também me diverti com o Beagle Bone Black e, de certa forma, é mais conveniente do que usar um RPi com um ou mais Arduinos.


9

Sim, grande diferença

A diferença é como dia e noite, tanto em relação ao hardware quanto ao software. Nenhuma comparação válida.

Quando usar qual

Use um Arduino, se ...

  • As restrições de espaço tornam um Pi inviável.
  • O uso de energia de um Pi seria demais.
  • O dinheiro é um problema (especialmente se você precisar de vários ou muitos controladores individuais em seu projeto, cada um executando apenas uma lógica muito simples).
  • Você deseja obter detalhes e trabalhar em um nível muito mais baixo por diversão ou por adquirir conhecimento.
  • Você precisa de extrema simplicidade e / ou comportamento 100% definido em tempo real e chance zero de que algo fora de seu controle mate o seu programa.
  • Você não precisa de Ethernet, funcionalidade difícil de host USB (ou seja, acessar discos rígidos; usá-lo no lado do cliente, por exemplo, como um dispositivo HID, está OK) e assim por diante. A maioria deles pode ser instalada em um Arduino (muito lento), mas a um custo alto em termos de RAM / EPROM e também de funcionalidade. Como não há multitarefa preemptiva, as tarefas de desbloqueio ficam bastante complicadas muito rapidamente.
  • Você concorda com o IDE simplista de desenvolvimento do Arduino ou com uma escavação muito mais profunda (por exemplo, construindo os programas por conta própria) e - se você não deseja um dispositivo de upload USB como o Pro Micro - um kit de desenvolvimento adquirido ou feito por conta própria /queimador.

Em todos os outros casos, um Pi é muito mais fácil de usar. O Pi é simplesmente outro computador (lento).

Não me interpretem mal. Eu possuo um Pi e o uso para vários serviços Linux na minha rede. Também programa frequentemente Arduinos (principalmente o Pro Micros). Ambos são ótimos, eu gosto deles da mesma forma, mas eles têm cenários de uso muito diferentes.

Na sua pergunta sobre dificuldade - é relativa. A única vez que o Arduino ficou difícil para mim foi difícil depurar problemas de temporização, especialmente se combinados com eletrônicos questionáveis ​​(ou seja, interferência EM, cabos muito longos etc.). Se você for firme no idioma de sua escolha (ou seja, C para o Arduino IDE), poderá invadir as bibliotecas que estiver empregando. Ainda assim, sempre será mais complexo que um Pi, onde você pode, por exemplo, usar uma linguagem de script de sua escolha para coisas que não são críticas ao tempo - essas sempre serão mais fáceis de desenvolver e depurar.


Não estou perguntando qual é a melhor plataforma de desenvolvimento - meu caso de uso requer um mcu, principalmente por causa de restrições de energia. Eu vejo que a pergunta não estava muito clara neste ponto.
Sean Houlihane

Tudo bem, então a primeira parte da resposta seria suficiente. Vou deixar o resto como "adendo", se quiser.
AnoE

7

Acredito que existem alguns pontos que ainda não foram especificados explicitamente.

O ambiente de desenvolvimento é completamente diferente. Você pode realmente desenvolver o software Pi no Pi - você pode até usar uma GUI, se quiser. Existem ferramentas avançadas de depuração integradas e também muito do que está disponível para qualquer sistema de computador.

Os controladores precisarão ser desenvolvidos / emulados em um computador separado e depois enviados ao controlador para teste final.

O Pi pode executar praticamente qualquer idioma com o qual você deseja programá-lo; os microcontroladores normalmente terão um ou dois.

O Pi pode executar muitos sistemas operacionais (incluindo o Windows IoT e vários sistemas especiais), os controladores incorporados tendem a não executar um "Sistema Operacional".

Também no que diz respeito ao tempo de execução / sistema operacional - o Pi leva alguns segundos para inicializar - se você realmente quiser fazer algo nesses primeiros segundos, o pi não funcionará para você. Além disso, a menos que você tenha adotado medidas extremas para impedir qualquer gravação no armazenamento, você realmente não deve apenas remover a energia, você deve executar um "Desligamento" e esperar um pouco. Isso também pode limitar alguns usos.

Outro ponto pós-implantação que eu não vi mencionado. Não tenho certeza de como teria certeza absoluta de ter protegido adequadamente um Pi - de que nenhuma agência colou um pequeno pedaço de código em algum lugar que permita acesso não autorizado em determinadas circunstâncias - sem removê-lo de todas as redes e desativar todos os mecanismos de acesso sem fio . Os microcontroladores são bastante fáceis de proteger, pois você está escrevendo quase todo o código em execução.

Obviamente, você sempre pode desenvolver sua própria imagem Pi sem um sistema operacional real e assumir toda a placa / CPU, o que a transformaria em um microcontrolador hella-poderoso / caro, com todas as vantagens / desvantagens. Alguém provavelmente já fez isso, mas eu não tenho procurado nada parecido ultimamente.


Escreva seu último parágrafo, sim, isso é chamado de bare-metal e poucas pessoas o fazem, mas tecnicamente é possível ... bem-vindo ao site!
Ghanima

3

A diferença entre o desenvolvimento de um aplicativo com um Pi pode ser muito diferente ou um pouco semelhante ao desenvolvimento de um aplicativo com um microcontrolador devido a diferenças de hardware e diferenças na cadeia de ferramentas de desenvolvimento de software.

Existe uma grande variedade de microcontroladores disponíveis, que variam de processadores de 8 a 64 bits, com alguns K de RAM a alguns gigabytes de RAM. Microcontroladores mais capazes fornecem uma experiência mais semelhante ao Pi. Microcontroladores menos capazes não.

E mesmo com o Pi, existem grandes diferenças entre o desenvolvimento para o sistema operacional Windows 10 IoT e o desenvolvimento para Raspian, Mate ou outro SO baseado em Linux. A IoT do Windows 10 requer um PC de desenvolvimento usando uma cadeia de ferramentas do Visual Studio com depurador remoto visando o ambiente do Universal Windows Program (UWP). O desenvolvimento para Raspian ou Mate pode realmente ser feito em um Pi com as ferramentas disponíveis no Pi.

O Protocolo de Aplicativo Restrito é usado para dispositivos pequenos e restritos usados ​​no ambiente Internet das Coisas. Para ter uma idéia da variedade de hardware e software do microcontrolador, esta página na implementação do protocolo CoAP fornece uma idéia do ambiente que está sendo direcionado. Ele menciona o sistema operacional Contiki, do qual ouvi vagamente, além de sistemas operacionais mais conhecidos, como iOS, OSX e Android. As linguagens de programação mencionadas são Java, JavaScript, C, C #, Ruby, Go, Erlang, Rust e Python.

A cadeia de ferramentas usada para o desenvolvimento com microcontrolador varia dependendo do fabricante, bem como que tipos de recursos estão disponíveis nas comunidades de desenvolvimento e nas iniciativas de código aberto. Em alguns casos, você obtém um assembler cruzado, em outros casos, um compilador cruzado C e, em outros casos, obtém uma boa cadeia de ferramentas com todos os sinos, assobios e emuladores e semelhante à cadeia de ferramentas do Visual Studio para Windows 10 IoT.

O ambiente de desenvolvimento real de um microcontrolador pode envolver o uso de um programador EEPROM e das ferramentas de software para criar uma nova imagem e enviá-la ao dispositivo ou o dispositivo pode ter a conectividade necessária para permitir que uma nova imagem seja baixada por uma conexão serial ou mais. uma conexão de rede.

Minha impressão é que a maioria dos microcontroladores possui um compilador cruzado C, embora o compilador possa suportar apenas padrões mais antigos, como K&R ou talvez C98. Os compiladores cruzados C geralmente têm palavras-chave não-padrão para recursos específicos do microprocessador, por exemplo, fare nearpalavras - chave para ponteiros com os antigos processadores 8080 e 8086 com sua memória segmentada.

Também existem linguagens especializadas que visam microcontroladores, como a linguagem de programação FORTH . Esses idiomas geralmente têm um design de tempo de execução que visa o bare metal, para que não haja outro sistema operacional além do tempo de execução do idioma.

O sistema operacional pode variar de praticamente inexistente a um Linux básico, a um SO especializado, como freeRTOS ou Windows Embedded ou um Linux ou Microsoft Windows completo. Veja este projeto SourceIBorge MINIBIAN para Raspberry Pi . Veja também este eBook, Baking Pi: Desenvolvimento de Sistemas Operacionais, que descreve o desenvolvimento de um sistema operacional rudimentar para Raspberry Pi em assembler.

Este artigo da Visual Studio Magazine, Programando a Internet das coisas com o Visual Studio , fornece uma visão geral dos diversos dispositivos disponíveis, seguida de uma visão geral do uso do Visual Studio IDE para desenvolvimento em Linux e Windows.

Existe um universo enorme e crescente de dispositivos de microcontroladores programáveis ​​e programáveis ​​em rede disponíveis agora. Em um nível muito baixo, você tem uma variedade de dispositivos simples de 16 e 32 bits de vários fabricantes tradicionais de chips, como a Texas Instruments. (Joguei um pouco com o kit de desenvolvimento SensorTag e é muito divertido, fazendo-me pensar que o Watch DevPack também pode ser um ótimo conjunto de ferramentas de aprendizado.)

Alguns dispositivos de microcontroladores mais conhecidos incluem Arduino, BeagleBoard e Raspberry Pi. Todos esses ambientes têm amplo suporte da comunidade e estão prontos para conectar-se a um grande número de sensores externos, motores, servos e qualquer outra coisa que você possa imaginar. A Adafruit, a superstore de aprendizado de eletrônicos fundada por Limor "Ladyada" Fried, fornece todos os tipos de periféricos para essas placas, juntamente com sua própria linha de placas leves de desenvolvimento Feather.

...

O universo mais interessante de dispositivos para desenvolvedores familiarizados com o Microsoft .NET Framework e o Visual Studio podem ser ambientes compatíveis com o Windows 10 IoT Core. Esses são dispositivos compatíveis com x86 e ARM que oferecem suporte a aplicativos da Plataforma Universal do Windows (UWP) escritos em uma variedade de idiomas, incluindo C #, Visual Basic, Python e Node.js./ JavaScript. O núcleo da IoT do Windows 10 suporta dispositivos como Raspberry Pi, Arrow DragonBoard 410C, Intel Joule e Compute Stick e MinnowBoard. Existem também plataformas de produtos interessantes, como o Askey TurboMate E1.

Um exemplo específico de um aplicativo de microcontrolador

Esta é uma imagem de uma placa de microcontrolador de uma cafeteira automatizada. Este parece ser um componente padrão para cafeteiras automatizadas fabricadas na China. O site do fabricante está impresso no PCB.

A imagem é composta por duas vistas. A vista à esquerda é a parte de trás da placa que contém o microcontrolador e o circuito de suporte. A vista à direita é a frente do quadro com a tela LCD e um conjunto de botões que são usados ​​para definir a hora atual e executar ações como programar uma hora de início etc.

A vista à direita se encaixa em uma transportadora que se encaixa em uma abertura na frente da cafeteira. Os interruptores na placa de circuito impresso inferior são acionados com interruptores do balancim. O LCD, que parece ter uma finalidade especial, é usado para exibir a hora e o status atuais, bem como para exibir a interface do usuário ao alterar as configurações da cafeteira. O LED vermelho é usado para indicar quando a cafeteira está realmente fazendo café e para indicar quando terminar, desligando a iluminação novamente.

insira a descrição da imagem aqui

O microcontrolador é um ELAN Microelectronics Corp EM78P447NAM (datasheet) que é um microcontrolador de 8 bits. Algumas das estatísticas básicas mostram o que é um dispositivo pequeno e mínimo, mas funciona bem para o objetivo a que se destina. A intenção é desenvolver um software que é baixado na ROM de gravação única como parte da fabricação.

• Baixo consumo de energia:

* Less then 2.2 mA at 5V/4MHz

* Typically 35 µA, at 3V/32KHz

* Typically 2 µA, during sleep mode

• 4K × 13 bits na ROM do chip

• Três bits de proteção para impedir a intrusão de códigos de memória OTP

• Um registro de configuração para acomodar os requisitos do usuário

• 148 × 8 bits em registradores de chips (SRAM, registrador de uso geral)


2
Eu não acho que isso resolva a questão. Certamente, alguns produtos não são bem embalados, mas isso também vale para uma SBC.
Sean Houlihane 15/10

11
@SeanHoulihane, o que tentei fazer com esta resposta é fornecer um ponto de vista do microcontrolador sobre a questão, especificamente que há uma ampla gama de dispositivos que atendem à etiqueta do microcontrolador. Há mais para a paisagem OS de Linux e não há mais para a linguagem de programação do que python ou C.
Richard Chambers

11
Para mim, você está dizendo que o mundo do MCU está uma bagunça. O que eu sinto é enganoso.
Sean Houlihane 15/10

11
@SeanHoulihane Lamento que sua impressão do meu post seja que o mundo do MCU está uma bagunça. Outra interpretação é que o mundo do MCU é uma das muitas alternativas e oportunidades maravilhosas, mas o leitor traz seus próprios preconceitos e preconceitos a qualquer narrativa.
Richard Chambers
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.