Programmation intégrée pour les débutants: Arduino ou Raspberry Pi? [fermé]

32

Je suis un étudiant en informatique et je suis désireux d'étendre mes connaissances sur la programmation intégrée et le génie électrique.

J'ai lu ici que l'utilisation d'outils comme le microcontrôleur Arduino est un bon moyen de commencer.

Je suis principalement un programmeur Java et Python, mais j'ai de l'expérience en C ++. De plus, j'ai joué avec ArchLinux.

Un petit projet que je voudrais faire est de contrôler certaines ampoules via Wi-Fi sur mon Arduino / Pi.

D'après ce que j'ai lu, le Pi et l'Arduino sont destinés aux étudiants, mais je ne vois pas ce qui convient le mieux à quelqu'un comme moi qui veut comprendre le fonctionnement des ordinateurs au bas niveau.

En tant que débutant, je vais rencontrer de nombreuses questions, donc une communauté importante et utile (dont j’entends dire que le Pi a été doté) est un avantage considérable.

Alors lequel est le plus approprié pour un débutant autodidacte: Arduino ou Raspberry Pi?

Merci d'avance.

Modifier:

De vos nombreuses bonnes réponses et de ces articles intéressants, je suis venu à la suivante

Conclusions

  1. Je choisis Arduino comme point d’entrée dans la programmation intégrée car c’est un système plus simple que le Pi et qui me permet de travailler plus près du métal.

  2. Il est utile d’approfondir les choses: j’étudierai peut-être plus tard les microcontrôleurs AVR ou mbed pour en apprendre davantage sur les détails de bas niveau de l’informatique.

  3. Les deux appareils me permettent de programmer sans système d'exploitation, ce que je veux (au début).

  4. J'ai également trouvé des projets qui utilisent un Pi pour contrôler un Arduino. Je trouve cela intriguant car les deux appareils sont assez abordables et j'aime utiliser la puissance de Linux qui peut fonctionner sur le Pi.

  5. De plus, j'ai trouvé ce livre qui devrait m'aider à en apprendre plus sur le génie électrique lors de mes expériences avec Arduino.

  6. Il semble difficile de faire mon projet d'ampoule avec l'Arduino. Mais ça va. Je suis sûr que je peux penser à d’autres projets motivants ou trouver de l’inspiration ici ou ici .

Merci à tous pour vos réponses.

Matthias Braun
la source
2
L'Arduino est plus simple. Je suggère que ce soit un meilleur point de départ pour un "débutant autodidacte". L’Arduino possède actuellement une plus grande communauté de fabricants d’add-on, par exemple pour les «boucliers» (cartes filles plug-in). Le Pi offre un meilleur rapport qualité-prix, mais je pense qu’il a moins d’interfaces de bas niveau (nombre de GPIO, I2C, etc.) que de nombreuses variantes d’Arduino. J'en ai un de chaque, si vous êtes moins intéressé par les choses de bas niveau, j'utiliserais le Pi.
RedGrittyBrick

Réponses:

35

Si vous voulez vraiment "comprendre le fonctionnement des ordinateurs à bas niveau", alors on pourrait dire que ni Arduino ni Raspberry Pi ne conviennent. Ces deux plates-formes (leur matériel et leurs logiciels) sont spécifiquement conçues pour masquer les détails de bas niveau afin de faciliter la tâche des personnes ne se souciant pas de ces détails pour atteindre leurs objectifs de niveau supérieur en créant des applications incorporées.

Au lieu de cela, je vous recommanderais de choisir une famille de CPU ayant une architecture de jeu d'instructions relativement "propre" et d'apprendre à la programmer en langage assembleur. Par exemple, j'ai beaucoup codé au début sur un mini-ordinateur PDP-11, qui possède (enfin, avait) une architecture 16 bits très propre. On me dit que la famille TI MSP430 est très similaire. Sur les familles 8 bits modernes, on pourrait affirmer qu'AVR est un peu plus propre que PIC. Ou vous pouvez aller à la vieille école et regarder le M68K ou même le Z80.

Cela dépend donc vraiment de vos objectifs: voulez-vous créer des applications intégrées ou voulez-vous étudier les processeurs eux-mêmes?

Si vous souhaitez commencer par le premier, puis passer plus tard au dernier, vous devriez peut-être commencer par Arduino maintenant, puis migrer vers la programmation du processeur AVR sous-jacent à un niveau inférieur plus tard.

Je fais cette recommandation en partie à cause de la nature simple de l'application que vous avez suggérée et en partie à cause de la voie de migration. Il est beaucoup plus difficile de migrer vers la programmation de bas niveau sur le Pi. Il est basé sur un SoC complexe qui nécessite pas mal "d'infrastructure" logicielle juste pour le mettre en route. Avec l'AVR, vous pouvez facilement programmer jusqu'au "métal nu" si vous le souhaitez.

Dave Tweed
la source
Merci, j'aimerais commencer par créer des applications intégrées et peut-être plus tard étudier les processeurs.
Matthias Braun
1
Vous pouvez programmer un nu metal Pi sans aucun problème, sans avoir besoin de connaître aucune infrastructure. Ignorez simplement la vidéo, l’audio et les réseaux, et vous avez une puce ARM rapide avec beaucoup de RAM, qui est chargée pour vous depuis la carte SD. Vous pouvez également placer un chargeur de démarrage sur la carte SD et télécharger votre application dans la RAM à l'aide d'un port série.
Wouter van Ooijen
2
Pour le développement métal nu burn & crash, l'Arduino, avec son chargeur de démarrage prêt à l'emploi et ses exigences de démarrage radicalement plus simples, sera beaucoup plus simple à remplir (à savoir, le traiter comme une carte de développement ATMEGA)
Chris Stratton
13

Un Arduino peut être utilisé avec le Arduino SDE, qui fournit certaines fonctionnalités de manière "cachée", mais il peut également être utilisé avec un assembleur ordinaire, C ou C ++ (et probablement avec beaucoup d’autres langages, mais cela semble être le cas). moins fréquent). Il existe une grande variété de cartes add-one disponibles appelées boucliers. La plupart des logiciels de support technique s'intègrent à l'Arduino SDE. La combinaison de plusieurs boucliers peut être délicate. Ethernet est possible, mais cela étend les capacités. La pile hôte USB est AFAIK au-delà de ses capacités.

L’Arduino original contient une puce AVR, mais il existe des alternatives basées sur les puces PIC et LPC (ARM).

Le Raspberry Pi est conçu pour être un ordinateur à carte unique fonctionnant sous Linux réduit. En tant que tel, il peut être programmé dans une grande variété de langages (de l'assembleur à Python, et tout le reste, en C et C ++). Il peut s'agir d'un hôte USB, il ne devrait donc pas y avoir de problème pour ajouter une clé USB WiFi. Le Pi PCB possède un connecteur IO sur lequel certaines broches sont disponibles et vous pouvez accéder à ces broches depuis votre application Linux, mais cela semble un peu maladroit.

Bien qu'il n'ait pas été conçu pour être utilisé de cette manière, la programmation du nu metal Raspberry Pi (= sans système d'exploitation) ne pose aucun problème. Vous avez maintenant un accès direct et rapide aux broches d'E / S, mais vous ne pouvez plus exécuter les pilotes Liunux. Il sera donc difficile d'ajouter du WiFi. Pour autant que je sache, il n’existe pas encore autant d’extensions matérielles (avec les bibliothèques de logiciels correspondantes) pour le RaPi que pour l’Arduino, mais j’ai le sentiment que cela pourrait changer.

Dans l'ensemble, je dirais que vous ne pouvez pas vous tromper, mais si vous voulez vraiment le WiFi, je recommanderais RaPi avec Linux.

Wouter van Ooijen
la source
1
L'absence de documentation officielle est un inconvénient de Raspberry Pi. Il s’agit principalement de produits exclusifs top-secrets appartenant à Broadcom, auxquels de simples mortels ne peuvent rien toucher. Si la vitesse ARM est nécessaire, il existe d'autres plates-formes disposant d'une documentation bien meilleure pour le travail à chaud, qui sont économiques et faciles à obtenir par rapport à Raspberry Pi. D'autre part, Raspberry Pi est beaucoup plus proche d'un "véritable ordinateur" que divers kits ARM bon marché de Texas Instruments, STmicro ou Freescale.
AndrejaKo
3
Autant que je sache, il manque une documentation sur la vidéo et peut-être sur les parties audio (mais j’ai lu que les pilotes de ces parties sont maintenant de sources ouvertes. Il existe donc au moins une forme de documentation si vous souhaitez utiliser ces parties.) ces pièces ne sont pas là, il ne vous reste plus beaucoup d'argent (RAM et CPU) pour votre argent. Qui se soucie du fait qu'il y a des choses supplémentaires que vous ne voulez pas utiliser de toute façon dans une application typique de microcontrôleur? Je n'ai pas besoin d'un moteur graphique complet. Et si j’ai besoin d’une interface de niveau pixel, c’est là.
Wouter van Ooijen
Il ne s’agit pas que de l’audio et de la vidéo, la documentation GPIO du pi est très réduite par rapport aux périphériques embarqués habituels.
Chris Stratton
1
Je n'ai eu aucun problème à utiliser les GPIO à l'aide de la documentation disponible. Avez-vous trouvé des problèmes?
Wouter van Ooijen
4

À mon avis, cela revient à ceci: voulez-vous programmer dans un système d'exploitation ou sur le matériel lui-même (en quelque sorte, créer votre propre système d'exploitation)?

Avec un RaspberryPi, vous utiliserez quasiment Debian Linux. C'est bien et Linux est vraiment utile. Si vous apprenez cela, vous pourrez passer à d'autres ordinateurs, serveurs, etc. Vous programmerez probablement à nouveau en Python si vous le connaissez bien, car il est agréable et facile à faire sur le Pi.

Si, par contre, vous voulez savoir ce que ça fait de programmer quelque chose de vraiment minuscule, bon marché et à faible consommation d'énergie, essayez l'Arduino. Tout votre code fonctionne sur cette petite puce, vous pouvez même le retirer du tableau (s'il s'agit d'un DIP) et le placer sur une planche à pain et constater par vous-même à quel point le matériel nécessaire au bon fonctionnement d'un petit ordinateur de base est insuffisant. C'était assez incroyable pour moi au moins. Tout ce que vous écrivez fonctionnera sur cette puce, de sorte que l'ensemble de son "système d'exploitation" sera votre petite boucle d'exécution. Il est bon de commencer à utiliser l'IDE / langage Arduino, mais il sera très utile de connaître plus tard le C / C ++. Si vous vous y intéressez vraiment à ce moment-là, vous pourrez facilement utiliser vos compétences C sur d'autres micros tels que les puces ARM Cortex M ou les MSP430 de TI pour une consommation d'énergie vraiment faible.

Je vous suggérerais d'aller vers Arduino si vous vous souciez davantage d'apprendre l'EE et les langages intégrés, principalement en raison de la facilité avec laquelle vous créez vos propres circuits pour la partie EE. Vous ne pouvez pas très facilement retirer la puce du Raspberry Pi de votre propre carte ou endommager le matériel beaucoup; c'est aussi à peu près un système Linux. Il suffit de lancer une machine virtuelle à ce stade et d’apprendre Linux là-bas.

Nemik
la source
3

Ce qui est approprié dépend vraiment des détails de la tâche.

Si vous avez besoin du wifi, vous constaterez probablement que le Raspberry Pi est une solution plus rentable, car vous pouvez utiliser un dongle wifi bon marché.

Cependant, le pi a une certaine complexité - du côté logiciel, bien que vous ayez une certaine expérience de la configuration sous Linux et de ses limitations d’alimentation électrique - quelques dongles wifi fonctionneront directement; autour des polyfuses.

Sur le chemin Arduino, à moins d’obtenir un adaptateur wifi implémentant une pile réseau complète et simulant un canal série, vous allez finir par utiliser une grande partie de votre mémoire disponible pour la mise en réseau. les gens le font, mais cela peut être difficile.

D’avis, aucune des deux plates-formes n’est vraiment idéale pour cette tâche - le pi s’avère être un peu plus jouet avec ses limitations en puissance, son support de carte SD en surplomb et sa documentation dissimulée qu’il serait idéal comme bloc de construction intégré, et l'Arduino a peu de ressources embarquées pour son prix. Cela dit, il n’ya pas beaucoup d’alternatives très populaires qui soient supérieures, bien qu’il existe une longue histoire de piratage des E / S numériques sur des routeurs wifi basés sur Linux, et certaines d’entre elles sont compétitives et bon marché à l’heure actuelle.

Chris Stratton
la source
3

Je recommanderais le processeur mbed. Il a un bon équilibre d'abstraction de haut niveau (pour commencer) en C ++ et vous pouvez ensuite descendre en C et commencer à travailler avec un niveau inférieur.

Une fois que vous avez maîtrisé les interruptions, la synchronisation et la lecture des informations (analogiques et numériques), vous pouvez passer à un simple PIC. J'aime le 16F886, cela vous donnera une bien meilleure idée de ce qui se passe réellement au niveau du registre. Utilisez le compilateur Hi-Tech C comme point de départ. Il n'est pas nécessaire de passer à l'assemblage à moins que vous ne le souhaitiez vraiment.

Avec le PIC, vous pouvez vous préoccuper de la consommation d’énergie, de la taille du programme, de la mémoire et des délais.

De là, vous pouvez revenir à un processeur plus gros, comme mbed ou arduino, en sachant que vous avez une meilleure idée de ce qui se passe à l'intérieur.

SimonBarker
la source
2

J'ai commencé avec Arduino et quand j'ai compris comment ça marche, je suis passé à Pic et on peut dire que ça a réussi. J'ai fait des projets flashy avec Arduino, et c'est facile parce que sur le Web, vous avez beaucoup d'exemples de code. Raspberry Pi est encore en croissance et il n’ya pas beaucoup d’aide comme Arduino. Donc, à mon avis, je vous recommande de commencer par Arduino et, lorsque vous atteignez un niveau, passez à un microcontrôleur.

Manuel Joaquín
la source
2
Je n'ai pas regardé l'heure affichée, elle m'est simplement apparue dans les sujets suggérés et je voulais seulement vous aider.
Manuel Joaquín