Programmazione integrata per principianti: Arduino o Raspberry Pi? [chiuso]


32

Sono uno studente di informatica e non vedo l'ora di ampliare le mie conoscenze sulla programmazione integrata e sull'ingegneria elettrica.

Ho letto qui che l'uso di strumenti come il microcontrollore Arduino è un buon modo per iniziare.

Sono principalmente un programmatore Java e Python ma ho una certa esperienza in C ++. Inoltre ho giocato con ArchLinux.

Un piccolo progetto che mi piacerebbe fare è controllare alcune lampadine tramite Wi-Fi sul mio Arduino / Pi.

Da quello che ho letto sia Pi che Arduino sono destinati agli studenti, ma non riesco a capire quale sia più adatto a qualcuno come me che vuole capire come funzionano i computer a basso livello.

Come principiante incontrerò molte domande, quindi una grande e utile comunità (che ho sentito dire dal Pi) è un grande vantaggio.

Quindi quale è più adatto per un principiante autodidatta: Arduino o Raspberry Pi?

Grazie in anticipo.

Modificare:

Dalle tue molte ottime risposte e anche da questi articoli degni di nota sono arrivato a quanto segue

conclusioni

  1. Scelgo Arduino come punto di accesso alla programmazione integrata perché è un sistema più semplice del Pi e mi permette di lavorare più vicino al metallo più facilmente.

  2. È utile approfondire: potrei studiare AVR o microcontrollori mbed in un secondo momento per saperne di più sui dettagli di basso livello dell'informatica.

  3. Entrambi i dispositivi mi consentono di programmare senza un sistema operativo, che è quello che voglio (all'inizio).

  4. Ho anche trovato progetti che usano un Pi per controllare un Arduino. Lo trovo intrigante in quanto entrambi i dispositivi sono abbastanza convenienti e mi piace usare la potenza di Linux che può essere eseguita sul Pi.

  5. Inoltre ho trovato questo libro che dovrebbe aiutarmi a saperne di più sull'ingegneria elettrica mentre sperimentavo Arduino.

  6. Sembra difficile realizzare il mio progetto di lampadina con Arduino. Ma va bene. Sono sicuro di poter pensare ad altri progetti motivanti o trarre ispirazione qui o qui .

Grazie a tutti per le risposte.


2
Arduino è più semplice. Suggerisco che sia un punto di partenza migliore per un "principiante autodidatta". Arduino attualmente ha una più grande comunità di produttori di componenti aggiuntivi, ad esempio per "shields" (schede madri plug-in). Il Pi ha un miglior rapporto qualità-prezzo, ma penso che abbia meno interfacce di basso livello (conteggio GPIO, I2C ecc.) Rispetto a molte varianti di Arduino. Ne ho uno di ciascuno, se sei meno interessato alle cose di basso livello, userei il Pi.
RedGrittyBrick il

Risposte:


35

Se vuoi davvero "capire come funzionano i computer a basso livello", allora si potrebbe sostenere che né Arduino né Raspberry Pi sono adatti. Entrambe queste piattaforme (il loro hardware e software) sono progettate specificamente per nascondere i dettagli di basso livello al fine di facilitare alle persone che non si preoccupano di tali dettagli il raggiungimento dei loro obiettivi di livello superiore creando applicazioni integrate.

Invece, consiglierei di scegliere una famiglia di CPU che abbia un'architettura di set di istruzioni relativamente "pulita" e di imparare a programmarla nel linguaggio assembly. Ad esempio, ho fatto molte delle mie prime codifiche su un minicomputer PDP-11, che ha (beh, aveva) un'architettura a 16 bit molto pulita. Mi è stato detto che la famiglia TI MSP430 è molto simile. Sulle moderne famiglie a 8 bit, si potrebbe sostenere che AVR è un po 'più pulito di PIC. Oppure potresti andare alla vecchia scuola e guardare la M68K o persino la Z80.

Quindi, dipende davvero da quali sono i tuoi obiettivi: vuoi creare applicazioni integrate o studiare i processori stessi?

Se vuoi iniziare con il primo e poi passare più al secondo in seguito, forse dovresti iniziare con Arduino ora e quindi migrare alla programmazione del processore AVR sottostante a un livello inferiore in seguito.

Faccio questa raccomandazione in parte a causa della natura semplice dell'applicazione che hai suggerito e in parte a causa del percorso di migrazione. È molto più difficile migrare alla programmazione di basso livello sul Pi. È basato su un SoC complesso che richiede un po 'di "infrastruttura" software solo per farlo funzionare. Con l'AVR, puoi facilmente programmare fino al "bare metal" se sei così incline.


Grazie, vorrei iniziare con la creazione di applicazioni integrate e forse in seguito inizierò a studiare i processori.
Matthias Braun,

1
Puoi programmare un Pi bare metal senza alcun problema, senza bisogno di conoscere alcuna infrastruttura. Basta ignorare il video, l'audio e la rete e si dispone di un veloce chip ARM con molta RAM, che viene caricato per te dalla scheda SD. In alternativa, inserire un bootloader sulla scheda SD e scaricare l'applicazione nella RAM utilizzando una porta seriale.
Wouter van Ooijen,

2
Per lo sviluppo bare metal di burn & crash, Arduino con il suo caricatore di avvio pronto all'uso e requisiti di avvio drasticamente più semplici sarà molto più semplice andare avanti (cioè trattandolo come una scheda di sviluppo ATMEGA)
Chris Stratton,

13

Un Arduino può essere usato con Arduino SDE, che fornisce alcune funzionalità in modo "nascosto", ma può anche essere usato con un semplice assemblatore, C o C ++ (e probabilmente con molti altri linguaggi, ma quelli sembrano essere meno comune). C'è una grande varietà di schede aggiuntive disponibili chiamate shield, nella maggior parte dei casi con software di supporto che si integra con Arduino SDE. Combinare più scudi può essere complicato. Ethernet è possibile, ma questo sta ampliando le capacità. Lo stack host USB è AFAIK oltre le sue capacità.

L'arduino originale contiene un chip AVR, ma ci sono alternative basate su chip PIC e LPC (ARM).

Raspberry Pi è progettato per essere un computer a scheda singola che esegue un Linux ridimensionato. Come tale, può essere programmato in un'ampia varietà di linguaggi (dall'assemblatore a Python e tutto ciò che sta in mezzo, incluso C e C ++). Può essere un host USB, quindi non dovrebbe essere un problema aggiungere un dongle WiFi USB. Il PCB Pi ha un connettore IO su cui sono disponibili alcuni pin e puoi accedere a quei pin dalla tua app Linux, ma sembra un po 'goffo.

Sebbene non sia stato progettato per essere utilizzato in questo modo, non è un problema programmare il bare metal Raspberry Pi (= senza alcun sistema operativo). Ora hai accesso diretto e veloce ai pin IO, ma perdi la possibilità di eseguire i driver Liunux, quindi aggiungere WiFi sarà difficile. AFAIK non ci sono ancora tante estensioni hardware (con librerie software di accompagnamento) per RaPi come lo sono per Arduino, ma la mia sensazione è che questo potrebbe cambiare.

Tutto sommato, direi che non puoi sbagliare con entrambi, ma se vuoi davvero il WiFi, consiglierei RaPi con Linux.


1
Un aspetto negativo di Raspberry Pi è la mancanza di documentazione ufficiale. È per lo più roba proprietaria Broad-secret di proprietà segreta che i semplici mortali non riescono a toccare. Se è necessaria la velocità ARM, ci sono altre piattaforme che hanno una documentazione molto migliore per il lavoro bare metal che sono economiche e più facili da ottenere rispetto a Raspberry Pi. D'altra parte, Raspberry Pi è molto più vicino a un "computer reale" rispetto a vari kit ARM economici di Texas Instruments, STmicro o Freescale.
Andreja,

3
AFAIK la mancanza di documentazione è nel video e forse nelle parti audio (ma ho letto che i driver per quelle parti sono ora di provenienza aperta - quindi c'è almeno qualche forma di documentazione se si desidera utilizzare quelle parti.) Se si finge quelle parti non ci sono che ti rimangono un sacco di botti (RAM e potenza della CPU) per i tuoi soldi. A chi importa che ci siano cose aggiuntive che non vuoi usare comunque in una tipica applicazione di microcontrollore? Non ho bisogno di un motore grafico completo. E se ho bisogno di un'interfaccia a livello di pixel, è lì.
Wouter van Ooijen,

Non è solo l'audio e il video, la documentazione GPIO del pi è molto scarsa rispetto ai normali dispositivi embedded.
Chris Stratton,

1
Non ho avuto problemi ad usare i GPIO usando la documentazione disponibile. Hai riscontrato qualche problema?
Wouter van Ooijen, l'

4

Secondo me dipende da questo: vuoi programmare in un sistema operativo o sull'hardware stesso (una specie di creazione del tuo sistema operativo)?

Con un RaspberryPi utilizzerai praticamente Debian Linux. Va bene e Linux è davvero utile. Se lo impari, potresti crescere su altri PC, server, ecc. Probabilmente programmerai di nuovo in Python se ne hai familiarità perché è bello e facile da fare sul Pi.

Se invece vuoi vedere com'è programmare qualcosa di veramente piccolo, economico e di bassa potenza, prova Arduino. Tutto il tuo codice viene eseguito su quel piccolo chip lì, potresti persino rimuoverlo dalla scheda (se è un DIP) e metterlo su una breadboard e vedere di persona quanto hardware è necessario per far funzionare un piccolo computer di base. Almeno per me è stato fantastico. Tutto ciò che scrivi verrà eseguito su quel chip stesso, quindi l'intero "OS" sarà il tuo piccolo ciclo di esecuzione. L'IDE / linguaggio Arduino è bello per iniziare, ma in seguito passare al C / C ++ sarà abbastanza utile da sapere. Se a questo punto ci provi davvero, potresti usare facilmente le tue abilità C su altri micro come i chip ARM Cortex M o MSP430 di TI per una potenza davvero bassa.

Ti suggerirei di andare verso Arduino se ti interessa di più imparare EE e le lingue incorporate, principalmente a causa di quanto sia facile creare i tuoi circuiti per la parte EE. Non è possibile rimuovere facilmente il chip di Raspberry Pi sulla propria scheda o rovinare molto l'hardware; inoltre è praticamente un sistema Linux. A quel punto, avvia una VM e impara Linux lì.


3

Ciò che è appropriato dipende in realtà dai dettagli dell'attività.

Se hai bisogno del wifi, probabilmente troverai un Raspberry Pi una soluzione più economica, dal momento che puoi usare un dongle wifi economico.

Tuttavia, il pi ha una certa complessità - sul lato software, sebbene tu abbia una certa esperienza con la configurazione di Linux, e anche nelle sue limitazioni di alimentazione - alcuni dongle wifi funzioneranno direttamente, per altri avrai bisogno di un hub alimentato o di bypass di saldatura intorno ai polifusi.

Sul percorso di Arduino, a meno che non si ottenga un adattatore wifi che implementa uno stack di rete completo e simuli un canale seriale, si finirà per utilizzare gran parte della memoria disponibile per l'implementazione della rete; la gente lo fa, ma può adattarsi perfettamente.

A dire il vero, nessuna delle due piattaforme è davvero l'ideale per questo compito: il pi risulta essere un po 'più un giocattolo con i suoi limiti di potenza, il montaggio sporgente della scheda SD e la documentazione trattenuta di quanto sarebbe l'ideale come blocco incorporato, e Arduino ha poche risorse a bordo per il suo prezzo. Detto questo, non ci sono molte alternative molto popolari che sono superiori, anche se c'è una lunga storia di hacking di I / O digitali su router wifi basati su Linux, e alcune di queste sono competitive / compatte in questo momento.


3

Consiglierei il processore mbed. Ha un buon equilibrio di astrazione di alto livello (per iniziare) in C ++ e quindi puoi scendere a C e iniziare a lavorare a un livello inferiore.

Una volta che sei pronto e a tuo agio con interruzioni, tempi e informazioni di lettura (sia analogiche che digitali), passa a un semplice PIC. Mi piace il 16F886, questo ti darà un'idea molto migliore di ciò che sta realmente accadendo a livello di registro. Usa il compilatore Hi-Tech C come punto di partenza, non è necessario andare all'assemblaggio a meno che tu non voglia davvero.

Con il PIC puoi iniziare a preoccuparti di consumo di energia, dimensioni del programma, memoria, ritardi di temporizzazione.

Da lì puoi tornare a un processore più grande come mbed o arduino sapendo che hai un'idea migliore di ciò che sta accadendo all'interno.


2

Ho iniziato con Arduino e quando ho capito come funziona, sono passato a Pic e potremmo dire che è riuscito. Ho realizzato alcuni progetti appariscenti con Arduino, ed è facile perché nel web hai molti esempi di codice. Raspberry Pi è ancora in crescita e non c'è molto aiuto come Arduino. Quindi, a mio avviso, ti consiglio di iniziare con Arduino e quando raggiungi un certo livello, passa a un microcontrollore.


2
Non ho guardato l'ora pubblicata, mi è appena apparsa negli argomenti suggeriti e volevo solo aiutare.
Manuel Joaquín,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.