Adattare RaspberryPI ad Arduino per prestazioni migliori

Salve, vorrei una vostra opinione:
ho fatto alcuni progetti con Arduino ed ho sempre notato che dopo un po' vi sono problemi di memoria a causa della grande mole di codice (e soprattutto dell'utilizzo della libreria String.h).. reset improvvisi etc..
ho pensato allora che potrei usare una RaspberryPI al posto di Arduino come base ed una di quelle shield che permettono di adattare la piedinatura della Raspberry con quella delle altre shield per Arduino; in questo modo usufruirei del processore migliore della Raspberry e continuare ad utilizzare tutti i progetti che ho già fatto fin'ora, no?

Pensate sia giusto questo ragionamento o mi sfugge qualcosa? Non vorrei comprare la PI e la shield per adattare Arduino e poi non fanno a caso mio

I programmi scritti con l'ide arduino non sono compatibili con il raspberry, credo ci sia qualcosa in sviluppo ma si parla di due piattaforme molto diverse, arduino è un avr, un semplice microcontrollore con risorse limitate, adatto a svolgere operazioni relativamente semplici, mentre raspberry è un arm, che è un SOC, con risorse decisamente superiori, in grado di svolgere operazioni più complesse, in multithread, e con ottime capacità grafiche.
In sostanza il raspberry è paragonabile ad un computer, e monta linux, quindi devi programmare per quel sistema operativo, l'adattatore di cui parli permette di comunicare le due piattaforme ma la programmazione è diversa per ognuno, per arduino è semplificata, per raspberry è come programmare su pc, credo che tu debba decidere quale piattaforma usare in base alle esigenze che hai...

Se poi parli di Arduino Uno, tieni conto che i pin sono in I/O a 5V mentre quelli di raspberry sono a 3V3 come Arduino Due.

Ed evitare gli oggetti String su Arduino ed imparare ad usare le stringhe (vettori di char) ? Alleggeriresti un pò gli sketch.

... e passare semplicemente ad Arduino Mega 2560 (... mantenendo così compatibilità ed ambiente di sviluppo) ? Flash Memory 256 KB (of which 8 KB used by bootloader), SRAM 8 KB, EEPROM 4 KB ... o stai stretto anche su questo ??? :astonished:

Guglielmo

credo che tu debba decidere quale piattaforma usare in base alle esigenze che hai

per ora sto sperimentando con Arduino, ma credo che qualche cosa con la Raspberry la proverò a fare, grazie :wink:

Ed evitare gli oggetti String su Arduino ed imparare ad usare le stringhe (vettori di char) ? Alleggeriresti un pò gli sketch.

si, mi sa che farò sempre così

e passare semplicemente ad Arduino Mega 2560 ..?

a dirla tutta già sono passato dall'Uno alla Mega ed ogni tanto anche questa non mi bastava.. Mi può convenire passare alla Due?

Passare alla Arduino Due risolve pienamente i problemi di memoria che capitano con la Uno o con la Mega? Oppure è meglio se comincio a mettere mano alla RaspberryPI?
I progetti che intendo fare implicano tante shield aggiuntive (GPRS, GPS, XBEE...) e quindi tanto bel codice pesante messo sopra.

Che mi suggerite?

Sono 2 prodotti differenti. La DUE è una scheda di prototipazione basata su un microcontrollore con core ARM. A parte la diversa velocità, la maggior memoria, l'architettura a 32 bit, i livelli a 3,3V, la usi quasi come una Mega.
La Raspberry Pi è un microcomputer: è un sistema embedded con Linux montato sopra, c'è un sistema operativo quindi che sovrintende alla gestione di tutta la scheda. Non scrivi uno sketch come nel caso di Arduino ma devi scrivere un programma da far girare sulla scheda. I pin e tutto il resto lo controlli come se fossero periferiche di un computer.

leo72:
La Raspberry Pi è un microcomputer: è un sistema embedded con Linux montato sopra, c'è un sistema operativo quindi che sovrintende alla gestione di tutta la scheda. Non scrivi uno sketch come nel caso di Arduino ma devi scrivere un programma da far girare sulla scheda. I pin e tutto il resto lo controlli come se fossero periferiche di un computer.

Cè da dire che usando la libreria WiringPi (Raspberry Pi | Wiring | Gordons Projects) usi la stessa sintassi di arduino per controllare le periferiche di raspberry, certo è che se anzichè usare questa lib lavori in python hai tra le mani un linguaggio ad alto livello con annessi e connessi in più il sistema è multitask con relativi vantaggi, il discorso del voltaggio è un discorso a parte, bisogna vedere che shield usi e cercare una soluzione...

ratto93:
... certo è che se anzichè usare questa lib lavori in python hai tra le mani un linguaggio ad alto livello con annessi e connessi

ovviamente posso usare anche altri linguaggi oltre python sulla Raspberry oppure lo sconsigliate?

ratto93:
in più il sistema è multitask con relativi vantaggi

questa cosa è molto importante infatti..

ma per quanto riguarda le prestazioni della Due rispetto alla Mega è risaputo che è migliore contro i reset improvvisi e malfunzionamenti vari dovuti a codice troppo pesante?

C'è anche il porting di freertos per raspberry

solo che è un po acerbo e ci sono dei grossi problemi con il chip di rete della B, è proprietario e non si trovano informazioni per scrivere i driver.

ovviamente posso usare anche altri linguaggi oltre python sulla Raspberry oppure lo sconsigliate?

Certo che si.. Ho fatto solo un esempio di linguaggio ad altro livello in cui ti trovi però molte librerie già fatte come ad esempio la wiringPi o la libreria per la gestione di I2C,SPI etc...Nulla vieta di programmarla in C,C++,Java, scratch e altri linguaggi :slight_smile:

ma per quanto riguarda le prestazioni della Due rispetto alla Mega è risaputo che è migliore contro i reset improvvisi e malfunzionamenti vari dovuti a codice troppo pesante?

Sono due schede con processori molto differenti, essendo la Due molto più performante della mega dovrebbe essere un poco più sicura sotto quet'aspetto ma ricorda che tutto stà nella bontà e nell'ottimizzazione del codice, perchè un codice ingarbugliato per quanto hai una macchina potente non funzionerà mai bene come un listato ottimizzato al 200% :wink:

nichis:
...
ma per quanto riguarda le prestazioni della Due rispetto alla Mega è risaputo che è migliore contro i reset improvvisi e malfunzionamenti vari dovuti a codice troppo pesante?

Perdona ma ... questa domanda NON ha senso ...

Non esiste "codice troppo pesante", esiste "codice scritto male" !!!

Se il codice è mal scritto, non c'è Arduino Mega, DUE, RaspBerry, e chi più ne ha più ne metta, che tenga ... prima o poi andrà in crash !!!

Quindi, domandati se il tuo codice è scritto bene, calcolati la reale occupazione di RAM, le risorse che ti occorrono, la velocità, le tensioni in gioco, le compatibilità, ecc. ecc. e, SOLO DOPO, scegli la scheda che ... sicuramente, se le valutazioni sono corrette ed il codice pure, non ti darà "problemi paranormali" ... ]:smiley:

Guglielmo

gpb01:
Non esiste "codice troppo pesante", esiste "codice scritto male" !!!

Si ok, intendo questo :sweat_smile:

dato che a questo punto ho deciso di comprarmi una Arduino Due ci possono essere cose importanti a riguardo che devo sapere (a parte che la tensione è 3,3V al posto di 5V)?

nichis:
...
dato che a questo punto ho deciso di comprarmi una Arduino Due ci possono essere cose importanti a riguardo che devo sapere (a parte che la tensione è 3,3V al posto di 5V)?

Si, che una buona parte delle librerie che trovi ... NON funzionano sulla DUE (senza modifiche che TI devi fare) ... e che attualmente il supporto ufficiale è ... piuttosto scarno ... :frowning:

Guglielmo

nichis:

gpb01:
Non esiste "codice troppo pesante", esiste "codice scritto male" !!!

Si ok, intendo questo :sweat_smile:

dato che a questo punto ho deciso di comprarmi una Arduino Due ci possono essere cose importanti a riguardo che devo sapere (a parte che la tensione è 3,3V al posto di 5V)?

consepevole di qualìèil problema allora inizia a risolverlo è inutile aggirarlo :grin:
ciò che stai facendo è questo, prendi il mottore di una Ferrari e lo metti in una Panda (modello vecchio) pretendendo di correre come una vera auto da corsa, devi prima vedere l'assetto l'aerodinamica etc... è un esempio stupido ma il concetto è quello...

ratto93:
consepevole di qualìèil problema allora inizia a risolverlo è inutile aggirarlo :grin:
ciò che stai facendo è questo, prendi il mottore di una Ferrari e lo metti in una Panda (modello vecchio) pretendendo di correre come una vera auto da corsa, devi prima vedere l'assetto l'aerodinamica etc... è un esempio stupido ma il concetto è quello...

Questo si, ma dato che la Mega (2560) su cui ho lavorato fin'ora non è mia e la dovrò restituire pensavo di prendermi una Due..

gpb01:
Si, che una buona parte delle librerie che trovi ... NON funzionano sulla DUE (senza modifiche che TI devi fare) ... e che attualmente il supporto ufficiale è ... piuttosto scarno ... :frowning:

Guglielmo

Proprio belle notizie di questo tipo intendevo :~
e allora adesso ci penso un po' su, rivaluto l'opzione Mega2560

Un port di FreeRTOS per la Rasp?