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.
fonte
Depende do que você está tentando fazer.
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.
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.
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:
Se nada disso for importante, o uso do Raspberry Pi definitivamente faz mais sentido.
fonte
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.
fonte
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 ...
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.
fonte
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.
fonte
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,
far
enear
palavras - 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.
...
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.
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.
fonte