C'è un grande salto tra la prototipazione su un Pi e l'uso di un microcontrollore?


25

Questa domanda pone, tra l'altro, se esiste una grande curva di apprendimento tra l'uso di Python su un Raspberry Pi per prototipare un endpoint e l'uso di un microcontrollore.

Chiaramente c'è un grande miglioramento nel consumo di energia (a scapito della riduzione della produttività del processore), quindi ci sono buone ragioni per adottare l'approccio MCU per un prodotto che deve essere alimentato a batteria.

Uno dei potenziali motivi per rimanere con un computer a scheda singola che esegue Linux è che non esiste un nuovo software da imparare (sopra Python o simili) supponendo che l'applicazione possa essere scritta in un linguaggio di alto livello (dove dovrebbero esserci molti standard biblioteche).

Su una piattaforma di sviluppo integrata, le possibili scelte sono C ++ (mbed o arduino) o micropython. La mia impressione è che questi non siano significativamente diversi o più complessi della scrittura di codice per l'esecuzione su Linux, sebbene le piattaforme presentino vantaggi individuali. Ho perso qualcosa di rilevante per uno sviluppatore di software?

In particolare, sto chiedendo informazioni sugli endpoint IoT, quindi non è essenziale disporre delle risorse complete di un sistema Linux per le applicazioni che mi interessano qui. Vale anche la pena sottolineare che le considerazioni sulla potenza e sulla latenza rendono l'implementazione di MCU un duro requisito in questo tipo di applicazione.

Risposte:


12

Aggiungendo alla risposta completa di George e al punto 2) supporto hardware. Anche se l'hardware desiderato (ad es. Ethernet, WiFi, scheda SD) viene aggiunto al microcontrollore / Arduino tramite schermature o schede di estensione simili, le librerie per gestirle mettono a dura prova la piccola memoria (ovvero ATMEGA328 (un tipico controller Arduino) ha 32Kb di FLASH e 2Kb di RAM). Soprattutto quando si combinano più funzionalità (rete, display, scheda SD) questo può essere un grave limite.

Alcuni esempi dal mondo Arduino:

Supporto di una scheda SD e un semplice filesystem (FAT):

  • Schede SD (la dimensione del codice è sconosciuta ma probabilmente non è un grosso problema se si utilizza SPI hardware), almeno 512 byte di buffer RAM
  • Petit FAT FS richiede ~ 2..4 kB FLASH e ~ 44 byte di RAM

Utilizzando un display a matrice:

Ethernet con stack di protocollo TCP / IP:

  • uIP : requisiti di RAM nell'intervallo di una dimensione di pacchetto tipica (> 1 kB), tuttavia, i controller Ethernet a chip singolo in genere sono dotati di buffer su chip che può contenere alcuni frame Ethernet di dimensioni massime.

    È possibile eseguire l'implementazione uIP con un minimo di 200 byte di RAM, ma tale configurazione fornirà un throughput estremamente basso e consentirà solo un numero limitato di connessioni simultanee. ( Fonte. )

  • Stack IP con protocolli TCP e UDP per Arduino : minimo 128 kB di memoria esterna

  • Interfaccia IP su seriale: SerialIP ~ 9 kB FLASH e RAM "sufficiente"

Tutto sommato, la programmazione con tali limiti richiede un approccio alquanto diverso e richiede l'ottimizzazione rispetto allo spazio del programma e alla dimensione del codice (FLASH), ai dati di runtime (RAM) e alla velocità di esecuzione. Questa risposta è stata ben definita.

Dato che la domanda si pone specificamente sulla piattaforma mbed, è ovviamente degno di nota il fatto che includa le funzionalità più rilevanti per l'IoT, vale a dire la connettività con crittografia, autenticazione e autorizzazione. Presumibilmente offre il supporto hardware di Bluetooth Low Energy e IPv6 su Wireless Personal Area Network. Sebbene queste funzionalità di connettività siano disponibili solo sulle schede di sviluppo elencate con in genere> = 128 kB FLASH e> = 16 kB RAM. Le schede di sviluppo più piccole d'altra parte includono sistemi con microcontrollori piccoli come ARM Cortex-M0 + Core con 16KB Flash, 4KB RAM (ovvero non molto più degli Arduinos di medie dimensioni) senza connettività dedicata.


I vincoli delle risorse sono stati il ​​più grande divario nelle mie ipotesi: facile dimenticare che la maggior parte delle persone si sviluppa senza questi problemi per la maggior parte del tempo.
Sean Houlihane,

20

Dipende da cosa stai cercando di fare.

  1. Il divario più grande è che un microcontrollore che hai citato (come Arduino) non esegue un sistema operativo multitasking come Linux. Ciò significa che se l'applicazione dipende dal multitasking o dal multithreading, questo potrebbe essere molto più difficile o addirittura impossibile da eseguire su Arduino.

  2. Il secondo gap è il supporto hardware. Ad esempio, Raspberry Pi supporta immediatamente fotocamere, audio USB, Ethernet, WiFi. Niente di tutto ciò è supportato direttamente da Arduino e, sebbene sia possibile utilizzare vari shield (come USB Host, Ethernet o WiFi), utilizzarli non è così semplice come utilizzare la rete su Raspberry Pi.

  3. Il terzo gap è costituito dalle risorse disponibili. La maggior parte dei microcontrollori non si avvicina nemmeno alle risorse offerte da Raspberry Pi. Ad esempio, anche il primo Raspberry Pi offriva una CPU a 700 MHz con 256 Mb di RAM e poteva essere utilizzata con 32 GB di memoria. Un tipico Arduino Uno basato su ATMEGA328 funziona a 16MHz e ha 32Kb di memoria e 2Kb di RAM.

Quindi l'utilizzo di Raspberry Pi è sicuramente molto più semplice per gli sviluppatori provenienti da PC. I principali vantaggi dell'utilizzo di microcontrollori sono:

  • costi (un clone cinese di Arduino Nano costa meno di $ 2 al pezzo con spedizione)
  • consumo di energia (i microcontrollori potrebbero essere ottimizzati davvero bene per un basso consumo di energia - importante se si deve far funzionare le batterie);
  • disponibilità in tempo reale, ovvero capacità di reagire al cambio di segnale in tempo reale;
  • dimensioni (Arduino Mini è due volte più stretto di Raspberry Pi Zero e, se non hai bisogno di molti pin, la dimensione ATTINY85 è inferiore a un centesimo e funziona senza un cristallo).

Se nessuno di questi è importante, l'uso di Raspberry Pi ha sicuramente più senso.


3
La carica della batteria e nessun grande fabbisogno di risorse sono i driver per l'utilizzo di un mcu, quindi suppongo che un processore da 10-100 MHz sia sufficiente. Punto valido sull'uso delle periferiche, sebbene SPI sia probabilmente l'equivalente MCU dell'USB.
Sean Houlihane,

2
Basta avere un autobus non è abbastanza. Considera l'utilizzo del WiFi su Linux, la tua app non ha bisogno di alcuna conoscenza specifica al riguardo, lo stesso codice che funziona con Ethernet funzionerà con l'interfaccia WiFi. Questo non è il caso dei microcontrollori, dovresti usare diverse librerie, imparare come usarle e cambiare il codice.
George Y.

1
OK, non avevo capito che l'uso di una libreria diversa sarebbe stato un grosso ostacolo.
Sean Houlihane,

2
Se non hai bisogno di molti spilli, puoi ottenere un ATtiny4 delle dimensioni di un chicco di riso: P
Nick T

1
apparentemente non è molto più piccolo di Attiny85 :) ma hai ragione, se stiamo pensando di non DIP, anche 85 è una punta di dito.
George Y.

9

Sì, è un grande salto dalla programmazione in Python alla programmazione utilizzando i tipici strumenti di linguaggio basati su C su micro-controller. In effetti, in molti casi potrebbe essere necessario scrivere alcune, se non tutte, le applicazioni in linguaggio assembly.

Come già sottolineato nelle altre risposte, i microcontrollori sono fortemente limitati dalle risorse e quindi perdi tutte le comodità di un sistema operativo Linux e tutti gli strumenti che puoi eseguire localmente. L'iterazione con l'IDE di Arduino è molto lenta rispetto all'esecuzione di script locali.

Anche se ho una grande esperienza professionale con microcontroller e microprocessori, preferisco eseguire i miei progetti personali usando l'hardware RPi con alcuni Arduinos per cose critiche in tempo reale. Mi sono anche dilettato con Beagle Bone Black e in qualche modo è più conveniente che usare un RPi con uno o più Arduinos.


9

Sì, grande differenza

La differenza è come il giorno e la notte, sia per quanto riguarda l'hardware che il software. Nessun confronto valido affatto.

Quando usare quale

Usa un Arduino, se ...

  • I vincoli di spazio rendono un Pi impossibile.
  • L'uso di energia di un Pi sarebbe troppo.
  • Il denaro è un problema (specialmente se hai bisogno di più o molti controller individuali nel tuo progetto, ognuno con una logica molto semplice).
  • Vuoi diventare intelligente e grintoso e lavorare a un livello molto più basso per divertimento o per acquisire conoscenze.
  • Hai bisogno di estrema semplicità e / o comportamento definito in tempo reale al 100% e zero possibilità che qualcosa fuori dal tuo controllo uccida il tuo programma.
  • Non hai bisogno di ethernet, funzionalità USB host difficili (ad es., Accedere a dischi rigidi; usarlo sul lato client, ad es. Come dispositivo HID, va bene) e così via. La maggior parte di questi può essere montata su un Arduino (verrry slooowly), ma ad un costo elevato in termini di RAM / EPROM e anche funzionalità. Poiché non esiste un multitasking preventivo, le attività di sblocco diventano piuttosto complicate molto rapidamente.
  • Stai bene con l'IDE di sviluppo Arduino semplicistico, o con lo scavare molto più in profondità (ad esempio, costruendo i programmi da solo) e - se non stai cercando un dispositivo di caricamento USB come Pro Micro - un kit di sviluppo acquistato o fatto da te /bruciatore.

In tutti gli altri casi, un Pi è di gran lunga più facile da usare. Il Pi è semplicemente un altro (lento) computer.

Non fraintendetemi. Possiedo un Pi e lo uso per diversi servizi Linux nella mia rete. Inoltre programma spesso Arduinos (principalmente Pro Micros). Entrambi sono fantastici, mi piacciono allo stesso modo, ma hanno scenari di utilizzo molto diversi.

Sulla tua domanda sulla difficoltà - è relativa. L'unica volta che Arduino è diventato difficile per me sono stati difficili da eseguire il debug dei problemi di temporizzazione, specialmente se combinati con l'elettronica discutibile (ad esempio, interferenze EM, cavi troppo lunghi ecc.). Se sei sicuro della tua lingua preferita (ad esempio, C per l'IDE di Arduino), allora dovresti essere in grado di hackerare qualsiasi libreria che stai impiegando. Tuttavia, sarà sempre più complesso di un Pi, dove ad esempio puoi usare un linguaggio di scripting di tua scelta per cose non critiche dal punto di vista temporale - quelle saranno sempre più facili da sviluppare ed eseguire il debug.


Non sto chiedendo quale sia la migliore piattaforma di sviluppo - il mio caso d'uso richiede un mcu, principalmente a causa dei limiti di potenza. Vedo che la domanda non era troppo chiara su questo punto però.
Sean Houlihane,

Va bene, allora la prima parte della risposta sarebbe sufficiente. Lascerò il resto come "addendum" se vuoi.
AnoE

7

Credo che ci siano alcuni punti che non sono stati ancora specificati in modo esplicito.

L'ambiente di sviluppo è completamente diverso. Puoi effettivamente sviluppare software Pi sul Pi — puoi anche usare una GUI se vuoi. Esistono anche strumenti avanzati di debug, oltre a una gran quantità di ciò che è disponibile per qualsiasi sistema informatico.

I controller dovranno essere sviluppati / emulati su un computer separato, quindi inviati al controller per i test finali.

Il Pi può eseguire praticamente qualsiasi lingua con cui vuoi programmarlo, i microcontrollori in genere ne hanno uno o due.

Il Pi può eseguire parecchi sistemi operativi (compresi Windows IoT e un sacco di sistemi speciali), i controller integrati tendono a non eseguire affatto un "Sistema operativo".

Inoltre, per quanto riguarda il runtime / sistema operativo — il Pi impiega alcuni secondi per l'avvio — se vuoi effettivamente fare qualcosa in quei primi secondi, allora il pi non funzionerà per te. Inoltre, a meno che tu non abbia adottato misure estreme per impedire qualsiasi scrittura sull'archiviazione, non dovresti semplicemente rimuovere l'alimentazione, devi eseguire uno "Shutdown" e attendere un po '. Questo può anche limitare alcuni usi.

Un altro punto post-distribuzione che non ho visto menzionato. Non sono sicuro di come sarei assolutamente sicuro di aver correttamente protetto un Pi - che nessuna agenzia ha bloccato un piccolo pezzo di codice da qualche parte che consente l'accesso non autorizzato in determinate circostanze - senza rimuoverlo da tutte le reti e disabilitare tutti i meccanismi di accesso wireless . I micro controller sono abbastanza facili da proteggere poiché stai scrivendo quasi tutto il codice in esecuzione sull'oggetto.

Ovviamente, puoi sempre sviluppare la tua immagine Pi senza un vero sistema operativo e assumere l'intera scheda / CPU che lo farebbe praticamente diventare un micro controller estremamente potente / costoso con tutti i vantaggi / svantaggi associati. Qualcuno probabilmente lo ha già fatto, ma ultimamente non ho cercato nulla del genere.


SCRIVI il tuo ultimo paragrafo, sì, si chiama bare metal e poche persone lo fanno, ma tecnicamente è possibile ... benvenuto nel sito!
Ghanima,

3

La differenza tra lo sviluppo di un'applicazione con un Pi può essere molto diversa o in qualche modo simile allo sviluppo di un'applicazione con un microcontrollore a causa delle differenze hardware e delle differenze nella toolchain di sviluppo software.

È disponibile una vasta gamma di microcontrollori che vanno da processori da 8 bit a 64 bit e hanno ovunque da pochi K di RAM a pochi gigabyte di RAM. I microcontrollori più capaci offrono un'esperienza più simile al Pi. I microcontrollori meno capaci no.

E anche con il Pi ci sono grandi differenze tra lo sviluppo per il sistema operativo IoT di Windows 10 e lo sviluppo per Raspian, Mate o altri sistemi operativi basati su Linux. Windows 10 IoT richiede un PC di sviluppo che utilizza una toolchain di Visual Studio con debugger remoto destinato all'ambiente UWP (Universal Windows Program). Lo sviluppo per Raspian o Mate può effettivamente essere fatto su un Pi con gli strumenti disponibili sul Pi.

Il protocollo di applicazione vincolata viene utilizzato per dispositivi piccoli e vincolati utilizzati con l'ambiente Internet of Things. Per avere un'idea della varietà di hardware e software del microcontrollore, questa pagina sull'implementazione del protocollo CoAP fornisce un'idea dell'ambiente a cui si rivolge. Menziona il sistema operativo Contiki di cui ho vagamente sentito parlare insieme a sistemi operativi più noti come iOS, OSX e Android. I linguaggi di programmazione menzionati sono Java, JavaScript, C, C #, Ruby, Go, Erlang, Rust e Python.

La catena di strumenti utilizzata per lo sviluppo con microcontrollore varia a seconda del produttore e dei tipi di risorse disponibili dalle comunità di sviluppo e dalle iniziative open source. In alcuni casi si ottiene un assemblatore incrociato, in altri casi si ottiene un compilatore a croce C, e in altri casi si ottiene una bella catena di strumenti con tutte le campane, i fischietti e gli emulatori e simili alla toolchain di Visual Studio per Windows 10 IoT.

L'ambiente di sviluppo effettivo per un microcontrollore può comportare l'utilizzo di un programmatore EEPROM e gli strumenti software per creare una nuova immagine e inviarla al dispositivo o il dispositivo potrebbe disporre della connettività necessaria per consentire il download di una nuova immagine tramite una connessione seriale o tramite una connessione di rete.

La mia impressione è che la maggior parte dei microcontrollori abbia un compilatore incrociato C sebbene il compilatore possa supportare solo standard più vecchi come K&R o forse C98. I compilatori incrociati C hanno spesso parole chiave non standard per caratteristiche specifiche del microprocessore, ad esempio le parole chiave fare e nearper i puntatori con i vecchi processori 8080 e 8086 con la loro memoria segmentata.

Esistono anche linguaggi speciali destinati ai microcontrollori come il linguaggio di programmazione FORTH . Queste lingue hanno spesso un design di runtime che si rivolge al bare metal in modo che non vi sia alcun sistema operativo diverso dal runtime di lingua.

Il sistema operativo può variare da Linux praticamente inesistente a un bare bones a un sistema operativo speciale come freeRTOS o Windows Embedded o un completo Linux o Microsoft Windows. Guarda questo progetto di SourceForge MINIBIAN per Raspberry Pi . Vedi anche questo eBook, Baking Pi: Sviluppo di sistemi operativi che descrive lo sviluppo di un sistema operativo rudimentale per Raspberry Pi in assemblatore.

Questo articolo di Visual Studio Magazine, Programmazione dell'Internet of Things con Visual Studio , offre una panoramica dei numerosi dispositivi disponibili, seguita da una panoramica dell'utilizzo dell'IDE di Visual Studio per lo sviluppo per Linux e Windows.

C'è un universo enorme e in crescita di dispositivi di microcontrollore programmabili e programmabili disponibili subito. A un livello molto basso hai una varietà di semplici dispositivi a 16 e 32 bit di una varietà di produttori di chip tradizionali come Texas Instruments. (Ho giocato un po 'con il kit di sviluppo SensorTag ed è molto divertente, facendomi pensare che Watch DevPack potrebbe anche essere un ottimo set di strumenti di apprendimento.)

Alcuni dispositivi di microcontrollore più noti includono Arduino, BeagleBoard e Raspberry Pi. Tutti questi ambienti dispongono di un ampio supporto da parte della community e sono pronti per essere collegati a un numero enorme di sensori, motori, servi esterni già pronti e qualsiasi altra cosa tu possa immaginare. Adafruit, il superstore per l'apprendimento dell'elettronica fondato da Limor "Ladyada" Fried, fornisce tutti i tipi di periferiche per queste schede, insieme alla propria linea di schede di sviluppo Feather leggere.

...

L'universo più interessante di dispositivi per sviluppatori che hanno familiarità con Microsoft .NET Framework e Visual Studio potrebbero essere ambienti compatibili con Windows 10 IoT Core. Si tratta di dispositivi x86 e basati su ARM che supportano app UWP (Universal Windows Platform) scritte in una varietà di lingue tra cui C #, Visual Basic, Python e Node.js / JavaScript. Il core IoT di Windows 10 supporta dispositivi tra cui Raspberry Pi, Arrow DragonBoard 410C, Intel Joule e Compute Stick e MinnowBoard. Esistono anche piattaforme di prodotti interessanti come Askey TurboMate E1 da indossare.

Un esempio specifico di un'applicazione a microcontrollore

Questa è l'immagine di una scheda microcontrollore di una caffettiera automatizzata. Questo sembra essere un componente standard per le macchine da caffè automatiche prodotte in Cina. Il sito Web per il produttore è stampato sul PCB.

L'immagine è composta da due viste. La vista a sinistra è il retro della scheda contenente il microcontrollore e i circuiti di supporto. La vista a destra è la parte anteriore della scheda con lo schermo LCD e una serie di pulsanti che vengono utilizzati per impostare l'ora corrente e per eseguire azioni come la programmazione di un'ora di inizio, ecc.

La vista a destra si inserisce in un supporto che si inserisce in un'apertura nella parte anteriore della caffettiera. Gli interruttori sul PCB inferiore sono azionati con interruttori a bilanciere. Il display LCD, che sembra essere uno scopo speciale, viene utilizzato per visualizzare l'ora e lo stato correnti, nonché per visualizzare l'interfaccia utente quando si modificano le impostazioni della caffettiera. Il LED rosso viene utilizzato per indicare quando la caffettiera sta effettivamente preparando il caffè e per indicare quando fatto spegnendo l'illuminazione.

inserisci qui la descrizione dell'immagine

Il microcontrollore è un ELAN Microelectronics Corp EM78P447NAM (scheda tecnica) che è un microcontrollore a 8 bit. Alcune delle statistiche di base mostrano che dispositivo piccolo e minimale sia, tuttavia, funziona perfettamente per lo scopo previsto. L'intento è quello di sviluppare un software che viene quindi scaricato nella ROM di scrittura una volta come parte della produzione.

• Basso consumo energetico:

* Less then 2.2 mA at 5V/4MHz

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

* Typically 2 µA, during sleep mode

• 4K × 13 bit su chip ROM

• Tre bit di protezione per impedire l'intrusione di codici di memoria OTP

• Un registro di configurazione per soddisfare le esigenze dell'utente

• 148 × 8 bit sui registri dei chip (SRAM, registro generale)


2
Non penso che questo affronti la domanda. Certo, alcuni prodotti non sono ben confezionati, ma questo vale anche per un SBC.
Sean Houlihane,

1
@SeanHoulihane quello che ho provato a fare con questa risposta è fornire un punto di vista del microcontrollore sulla domanda, in particolare che ci sono una vasta gamma di dispositivi che soddisfano l'etichetta del microcontrollore. C'è di più nel panorama del sistema operativo rispetto a Linux e c'è di più nel linguaggio di programmazione di Python o C.
Richard Chambers,

1
Per me, stai solo dicendo che il mondo MCU è un casino. Ciò che ritengo fuorviante.
Sean Houlihane,

1
@SeanHoulihane Mi dispiace che la tua impressione dal mio post sia che il mondo MCU sia un casino. Un'altra interpretazione è che il mondo MCU è una delle tante meravigliose alternative e opportunità, tuttavia il lettore porta i propri pregiudizi e pregiudizi a qualsiasi narrativa.
Richard Chambers,
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.