Programação incorporada para iniciantes: Arduino ou Raspberry Pi? [fechadas]

32

Sou estudante de ciência da computação e estou ansioso para expandir meus conhecimentos em programação embarcada e engenharia elétrica.

Eu li aqui que usar ferramentas como o microcontrolador Arduino é uma boa maneira de começar.

Sou principalmente um programador Java e Python, mas tenho alguma experiência em C ++. Além disso, eu brinquei com o ArchLinux.

Um pequeno projeto que eu gostaria de fazer é controlar algumas lâmpadas via Wi-Fi no meu Arduino / Pi.

Pelo que li, o Pi e o Arduino são destinados a estudantes, mas não consigo descobrir o que é mais adequado para alguém como eu, que quer entender como os computadores funcionam em nível baixo.

Como iniciante, vou me deparar com muitas perguntas, então uma comunidade grande e útil (que eu ouvi dizer que o Pi tem) é uma grande vantagem.

Então, qual é o mais adequado para um iniciante autodidata: Arduino ou Raspberry Pi?

Desde já, obrigado.

Editar:

De suas muitas ótimas respostas e também desses artigos valiosos , cheguei ao seguinte

Conclusões

  1. Eu escolhi o Arduino como um ponto de entrada para a programação incorporada, porque é um sistema mais simples que o Pi e me permite trabalhar mais perto do metal com mais facilidade.

  2. Há um valor em aprofundar: eu poderia estudar o AVR ou microcontroladores mbed posteriormente para aprender mais sobre os detalhes de baixo nível da computação.

  3. Ambos os dispositivos me permitem programar sem um sistema operacional, que é o que eu quero (a princípio).

  4. Eu também encontrei projetos que usam um Pi para controlar um Arduino. Acho isso intrigante, pois os dois dispositivos são bastante acessíveis e eu gosto de usar o poder do Linux que pode rodar no Pi.

  5. Além disso, encontrei este livro que deve me ajudar a aprender mais sobre engenharia elétrica enquanto experimentava o Arduino.

  6. Parece difícil fazer meu projeto de lâmpada com o Arduino. Mas tudo bem. Tenho certeza de que consigo pensar em outros projetos motivadores ou obter inspiração aqui ou aqui .

Obrigado a todos por suas respostas.

Matthias Braun
fonte
2
O Arduino é mais simples. Eu sugiro que seja um melhor ponto de partida para um "iniciante autodidata". O Arduino atualmente possui uma comunidade maior de fabricantes de complementos, por exemplo, para "escudos" (placas-filha plug-in). O Pi tem uma melhor relação custo / benefício, mas acho que possui menos interfaces de baixo nível (contagem de GPIO, I2C etc.) do que muitas variantes do Arduino. Eu tenho um de cada, se você estiver menos interessado em coisas de baixo nível, eu usaria o Pi.
RedGrittyBrick

Respostas:

35

Se você realmente deseja "entender como os computadores funcionam em um nível baixo", pode-se argumentar que nem o Arduino nem o Raspberry Pi são adequados. Ambas as plataformas (hardware e software) são projetadas especificamente para ocultar os detalhes de baixo nível, a fim de facilitar para as pessoas que não se importam com esses detalhes atingirem seus objetivos de mais alto nível criando aplicativos incorporados.

Em vez disso, eu recomendaria escolher uma família de CPU que possua uma arquitetura de conjunto de instruções relativamente "limpa" e aprender como programá-la na linguagem assembly. Por exemplo, eu fiz muito da minha codificação inicial em um minicomputador PDP-11, que possui (bem, tinha) uma arquitetura de 16 bits muito limpa. Disseram-me que a família TI MSP430 é muito semelhante. Nas famílias modernas de 8 bits, pode-se argumentar que o AVR é ​​um pouco mais limpo que o PIC. Ou você pode ir à velha escola e olhar para o M68K ou mesmo o Z80.

Portanto, depende realmente de quais são seus objetivos: Deseja criar aplicativos incorporados ou estudar os próprios processadores?

Se você deseja iniciar com o primeiro e depois mudar para o último mais tarde, talvez você deva começar com o Arduino agora e migrar para a programação do processador AVR subjacente em um nível mais baixo posteriormente.

Faço essa recomendação em parte por causa da natureza simples do aplicativo que você sugeriu e em parte por causa do caminho da migração. É muito mais difícil migrar para a programação de baixo nível no Pi. Baseia-se em um SoC complexo que requer um pouco de "infraestrutura" de software apenas para funcionar. Com o AVR, você pode programar facilmente até o "bare metal", se quiser.

Dave Tweed
fonte
Obrigado, gostaria de começar com a criação de aplicativos incorporados e, talvez, mais tarde, estudar os processadores.
Matthias Braun
1
Você pode programar um Pi bare metal sem nenhum problema, sem necessidade de conhecer nenhuma infraestrutura. Apenas ignore o vídeo, o áudio e a rede, e você terá um chip ARM veloz, com bastante RAM, carregado do cartão SD. Como alternativa, coloque um carregador de inicialização no cartão SD e faça o download do seu aplicativo para a RAM usando uma porta serial.
Wouter van Ooijen
2
Para o desenvolvimento de bare metal de burn & crash, o Arduino com ele está pronto para usar o carregador de inicialização e requisitos de inicialização drasticamente mais simples serão muito mais simples de começar (por exemplo, tratá-lo como uma placa de desenvolvimento ATMEGA)
Chris Stratton
13

Um Arduino pode ser usado com o Arduino SDE, que fornece algumas funcionalidades de maneira "oculta", mas também pode ser usado com assembler simples, C ou C ++ (e provavelmente com muitas outras linguagens, mas essas parecem ser menos comum). Existe uma grande variedade de placas add-one disponíveis, chamadas shields, na maioria dos casos com software de suporte que se integra ao Arduino SDE. Combinar vários escudos pode ser complicado. A Ethernet é possível, mas isso está ampliando os recursos. A pilha de host USB é AFAIK além de seus recursos.

O Arduino original contém um chip AVR, mas existem alternativas baseadas em PICs e LPC (ARM).

O Raspberry Pi foi projetado para ser um computador de placa única executando um Linux em escala reduzida. Como tal, pode ser programado em uma ampla variedade de linguagens (do assembler ao Python, e tudo mais, incluindo a inclusão de C e C ++). Pode ser um host USB, por isso não deve ser problema adicionar um dongle USB WiFi. O PCB do Pi possui um conector de E / S no qual alguns pinos estão disponíveis e você pode acessá-los no seu aplicativo Linux, mas parece um pouco desajeitado.

Embora não tenha sido projetado para ser usado dessa maneira, não há problema em programar o bare metal do Raspberry Pi (= sem nenhum sistema operacional). Agora você tem acesso direto e rápido aos pinos de E / S, mas perde a capacidade de executar drivers Liunux, portanto, será difícil adicionar WiFi. No AFAIK, ainda não existem tantas extensões de hardware (com as bibliotecas de software que acompanham) quanto o RaPi para o Arduino, mas meu pressentimento é que isso pode mudar.

Apesar de tudo, eu diria que você também não pode dar errado, mas se você realmente quer WiFi, eu recomendaria o RaPi com Linux.

Wouter van Ooijen
fonte
1
Um ponto ruim do Raspberry Pi é a falta de documentação oficial. Na maioria das vezes, é um material confidencial da Broadcom, que meros mortais não conseguem tocar. Se for necessária a velocidade do ARM, existem outras plataformas que possuem uma documentação muito melhor para o trabalho bare metal, que são baratas e mais fáceis de obter em comparação com o Raspberry Pi. Por outro lado, o Raspberry Pi está muito mais próximo de um "computador real" do que vários kits ARM baratos da Texas Instruments, STmicro ou Freescale.
AndrejaKo
3
AFAIK, a falta de documentação está no vídeo e talvez nas partes de áudio (mas eu li que os drivers para essas partes agora são de código aberto - então há pelo menos alguma forma de documentação se você quiser usá-las.) Se você apenas fingir essas partes não estão lá, você fica com uma enorme quantidade de dinheiro (RAM e CPU) por seus dólares. Quem se importa com o fato de haver outras coisas que você não deseja usar em um aplicativo típico de microcontrolador? Não preciso de um mecanismo gráfico completo. E se eu precisar de uma interface em nível de pixel, ela estará lá.
Wouter van Ooijen
Não é apenas o áudio e o vídeo, a documentação GPIO do pi é muito escassa em comparação com os dispositivos embarcados comuns.
Chris Stratton
1
Não tive problemas para usar os GPIOs usando a documentação disponível. Você encontrou algum problema?
Wouter van Ooijen
4

Na minha opinião, tudo se resume a isso: você deseja programar em um sistema operacional ou no próprio hardware (meio que criando seu próprio sistema operacional)?

Com um RaspberryPi, você estará usando o Debian Linux. Tudo bem e o Linux é realmente útil. Se você aprender isso, poderá expandir-se para outros PCs, servidores, etc. Você provavelmente estará programando novamente em Python se estiver familiarizado com isso, porque é agradável e fácil de fazer no Pi.

Se, por outro lado, você quiser ver como é programar algo realmente minúsculo, barato e de baixa potência, experimente o Arduino. Todo o seu código é executado nesse pequeno chip, você pode até removê-lo da placa (se for um DIP) e colocá-lo em uma placa de ensaio e ver por si mesmo o pouco de hardware necessário para que um pequeno computador básico funcione. Isso foi incrível para mim, pelo menos. Tudo o que você escreve será executado no próprio chip, de modo que todo o seu "SO" será seu pequeno loop de execução. É bom começar com a linguagem / IDE do Arduino, mas mais tarde descer para C / C ++ será bastante útil. Se você realmente se interessar nesse ponto, poderá usar suas habilidades de C facilmente em outros micro como chips ARM Cortex M ou MSP430 da TI para uma potência realmente baixa.

Eu sugiro que você vá para o Arduino se você se interessa mais em aprender EE e linguagens incorporadas, principalmente por causa de quão fácil é criar seus próprios circuitos para a parte EE. Você não pode remover facilmente o chip do Raspberry Pi para sua própria placa ou mexer muito com o hardware; também é praticamente um sistema Linux. Basta girar uma VM nesse ponto e aprender Linux lá.

nemik
fonte
3

O que é apropriado realmente depende dos detalhes da tarefa.

Se você precisar de wifi, provavelmente encontrará um Raspberry Pi como uma solução mais econômica, pois você pode usar um dongle wifi barato.

No entanto, o pi tem alguma complexidade - no lado do software, embora você tenha alguma experiência com a configuração do linux, e também em suas limitações de fonte de alimentação - alguns dongles wifi funcionarão diretamente, para outros, você precisará de um hub alimentado ou ignorar a solda ao redor dos fusíveis.

No caminho do Arduino, a menos que você obtenha um adaptador wifi que implemente uma pilha de rede completa e simule um canal serial, você acabará usando uma grande fração da memória disponível para a implementação da rede; as pessoas fazem isso, mas pode ser um ajuste apertado.

Por uma questão de opinião, nenhuma plataforma é realmente ideal para esta tarefa - o pi acaba sendo um pouco mais um brinquedo com suas limitações de energia, superando a montagem do cartão SD e retendo a documentação do que seria ideal como um bloco de construção incorporado, e o Arduino tem poucos recursos a bordo por seu preço. Dito isso, não há muitas alternativas amplamente populares que sejam superiores, embora exista uma longa história de invasão de E / S digital em roteadores Wi-Fi baseados em Linux, e algumas delas sejam competitivamente baratas / compactas agora.

Chris Stratton
fonte
3

Eu recomendaria o processador mbed. Ele possui um bom equilíbrio de abstração de alto nível (para você começar) em C ++ e, em seguida, você pode descer para C e começar a trabalhar em um nível mais baixo.

Quando você estiver atualizado e confortável com interrupções, horários e informações de leitura (analógicas e digitais), vá para um PIC simples. Eu gosto do 16F886, isso lhe dará uma idéia muito melhor do que realmente está acontecendo no nível do registro. Use o compilador Hi-Tech C como ponto de partida, não há necessidade de ir para a montagem, a menos que você realmente queira.

Com o PIC, você pode começar a se preocupar com consumo de energia, tamanho do programa, memória, atrasos de tempo.

A partir daí, você pode voltar para um processador maior como mbed ou arduino, sabendo que tem uma idéia melhor do que está acontecendo lá dentro.

SimonBarker
fonte
2

Comecei com o Arduino e, quando entendi como funciona, mudei para o Pic e poderíamos dizer que foi bem-sucedido. Fiz alguns projetos chamativos com o Arduino, e é fácil porque na web você tem muitos exemplos de código. O Raspberry Pi ainda está crescendo e não há muita ajuda como o Arduino. Então, na minha opinião, recomendo que você comece com o Arduino e, quando chegar a um nível, mude para um microcontrolador.

Manuel Joaquín
fonte
2
Eu não assisti ao horário publicado, apenas me apareceu nos tópicos sugeridos e só queria ajudar.
Manuel Joaquín