初心者向けの組み込みプログラミング:ArduinoまたはRaspberry Pi?[閉まっている]


32

私はコンピューターサイエンスの学生で、組み込みプログラミングと電気工学に関する知識を広げたいと思っています。

ここでは、Arduinoマイクロコントローラーなどのツールを使用することから始めるのが良いことを読んいます。

私は主にJavaおよびPythonプログラマーですが、C ++である程度の経験があります。さらに、ArchLinuxをいじくりました。

私がやりたい小さなプロジェクトは、Arduino / PiでWi-Fi経由で電球を制御することです。

私が読んだことから、PiとArduinoの両方は学生向けですが、低レベルでコンピューターがどのように機能するかを理解したい私のような人にどちらが適しているのかわかりません。

初心者として多くの質問にぶつかるので、大きくて役に立つコミュニティ(Piがいると聞きます)は大きなプラスになります。

それでは、どちらが自己学習初心者に適していますか?ArduinoとRaspberry Piのどちらですか?

前もって感謝します。

編集:

あなたの多くの偉大な答えとこれらの価値ある 記事から、私は以下に来ました

結論

  1. Arduinoを組み込みプログラミングのエントリポイントとして選択します。Arduinoは、Piよりもシンプルなシステムであり、金属に近づけることがより簡単にできるためです。

  2. 深化することには価値があります:コンピューティングの低レベルの詳細については、後でAVRまたはmbedマイクロコントローラーを調べてさらに学習することができます。

  3. どちらのデバイスでも、オペレーティングシステムなしでプログラムすることができます(最初は)。

  4. また、1つのPiを使用してArduinoを制御するプロジェクト見つけました 。両方のデバイスが非常に手頃な価格であり、Piで実行できるLinuxのパワーを使用したいので、このことは興味をそそります。

  5. さらに、Arduinoの実験中に電気工学についてさらに学ぶのに役立つこの本を見つけました。

  6. Arduinoで電球プロジェクトを行うのは難しいようです。しかし、それは大丈夫です。他のやる気を起こさせるプロジェクトを考えたり、ここここでインスピレーションを得られると確信しています

回答ありがとうございます。


2
Arduinoはよりシンプルです。これは、「自己学習初心者」にとってより良い出発点であることをお勧めします。Arduinoには現在、「シールド」(プラグインドータボード)などのアドオンメーカーの大きなコミュニティがあります。Piはお金よりも価値がありますが、多くのArduinoバリアントよりも低レベルのインターフェイス(GPIOカウント、I2Cなど)が少ないと思います。低レベルのものにあまり興味がなければ、私はPiを使用します。
RedGrittyBrick

回答:


35

「低レベルでコンピューターがどのように機能するかを理解したい」のであれば、ArduinoもRaspberry Piも適切ではないと主張することができます。これらのプラットフォーム(ハードウェアとソフトウェア)は両方とも、特に低レベルの詳細を隠して、それらの詳細を気にしない人々が組み込みアプリケーションを作成することでより高いレベルの目標を達成できるように設計されています。

代わりに、比較的「クリーン」な命令セットアーキテクチャを持つCPUファミリを選択し、アセンブリ言語でプログラミングする方法を学習することをお勧めします。たとえば、私はPDP-11ミニコンピューターで初期のコーディングの多くを行いました。PDP-11ミニコンピューターは、非常にクリーンな16ビットアーキテクチャを持っています(そうでした)。TI MSP430ファミリーは非常に似ていると言われています。最新の8ビットファミリでは、AVRはPICよりも少しクリーンであると言えます。または、古い学校に行ってM68KまたはZ80を見ることができます。

それで、それは本当にあなたの目標が何であるかに依存します:組み込みアプリケーションを作成したいのですか、それともプロセッサ自体を勉強したいのですか?

前者から始めて後で後者に移行したい場合は、今すぐArduinoから始めて、後で下位レベルのAVRプロセッサのプログラミングに移行する必要があります。

この推奨事項は、提案されたアプリケーションの単純な性質と、移行パスのために作成されました。Piで低レベルのプログラミングに移行するのははるかに困難です。複雑なSoCに基づいており、それを実現するためにかなりのソフトウェア「インフラストラクチャ」が必要です。AVRを使用すると、必要に応じて「ベアメタル」まで簡単にプログラミングできます。


おかげで、私は組み込みアプリケーションの作成から始めて、多分後でプロセッサの研究に入ることにしたいと思います。
マティアスブラウン

1
Piベアメタルは問題なくプログラミングでき、インフラストラクチャを知る必要はありません。ビデオ、オーディオ、ネットワークを無視するだけで、SDカードからロードされたRAMを備えた高速なARMチップを使用できます。または、ブートローダーをSDカードに配置し、シリアルポートを使用してアプリケーションをRAMにダウンロードします。
Wouter van Ooijen

2
バーン&クラッシュベアメタル開発の場合、Arduinoはすぐにブートローダーに移行でき、起動要件が大幅に簡素化されるため、処理がはるかに簡単になります(つまり、ATMEGA開発ボードとして扱う)
Chris Stratton

13

ArduinoはArduino SDEで使用できます。Arduinoは「隠された」方法でいくつかの機能を提供しますが、プレーンアセンブラ、C、またはC ++(およびおそらく他の多くの言語でも使用できますが、あまり一般的ではありません)。シールドと呼ばれる多種多様なアドワンボードが利用可能です。ほとんどの場合、Arduino SDEと統合するサポートソフトウェアがあります。複数のシールドを組み合わせるのは難しい場合があります。イーサネットは可能ですが、機能を拡張しています。USBホストスタックは、その能力を超えたものです。

オリジナルのArduinoにはAVRチップが含まれていますが、PICおよびLPC(ARM)チップに基づいた代替品があります。

Raspberry Piは、縮小Linuxを実行するシングルボードコンピューターとして設計されています。そのため、さまざまな言語(アセンブラーからPython、およびその間のすべて、CおよびC ++を含む)でプログラミングできます。USBホストでも構いませんので、USB WiFiドングルを追加しても問題ありません。Pi PCBにはいくつかのピンが利用可能なIOコネクタがあり、Linuxアプリからそれらのピンにアクセスできますが、少し不器用に感じます。

このように使用するようには設計されていませんが、Raspberry Piベアメタル(= OSなし)をプログラムしても問題ありません。これで、IOピンに直接かつ高速にアクセスできますが、Liunuxドライバーを実行する機能が失われるため、WiFiを追加することは困難です。まだ知りませんが、RaPiのハードウェア拡張(および付属のソフトウェアライブラリ)はArduinoほどではありませんが、私の直感ではこれが変わる可能性があります。

結局のところ、どちらでも問題はありませんが、本当にWiFiが必要な場合は、LinuxでRaPiをお勧めします。


1
Raspberry Piの悪い点の1つは、公式ドキュメントがないことです。それは主に極秘のプロプライエタリなブロードコムのものであり、単なる人間には触れられない。ARMの速度が必要な場合は、ベアメタル作業に関するより優れたドキュメントがあり、Raspberry Piと比較して安価で入手しやすい他のプラットフォームがあります。一方、Raspberry Piは、Texas Instruments、STmicro、またはFreescaleのさまざまな安価なARMキットよりも「実際のコンピューター」にはるかに近いものです。
AndrejaKo

3
文書の欠如はビデオとおそらくオーディオ部分にあります(ただし、それらの部分のドライバーは現在オープンソースであると読みました。したがって、それらの部分を使用したい場合、少なくとも何らかの形式の文書があります。)これらの部品はそこにはないので、予算に見合うだけの量(RAMとCPUパワー)が残っています。通常のマイクロコントローラーアプリケーションでは、とにかく使用したくない追加のものがあることを誰が気にしますか?本格的なグラフィックエンジンは必要ありません。ピクセルレベルのインターフェイスが必要な場合は、そこにあります。
Wouter van Ooijen

オーディオとビデオだけでなく、piのGPIOドキュメントは通常の組み込みデバイスに比べて非常にまばらです。
クリスストラットン

1
利用可能なドキュメントを使用してGPIOを使用しても問題はありませんでした。問題はありましたか?
Wouter van Ooijen

4

私の意見では、これに帰着します:あなたはOSまたはハードウェア自体(あなた自身のOSを作ることの一種)でプログラムしたいですか?

RaspberryPiを使用すると、Debian Linuxを使用することになります。それは問題なく、Linuxは本当に便利です。それを学べば、他のPCやサーバーなどに成長することができます。Piで簡単に行えるので、使い慣れていれば、おそらく再びPythonでプログラミングできます。

一方、本当に小さく、安価で低電力のプログラムを作成するのがどのようなものかを知りたい場合は、Arduinoを試してください。すべてのコードはその小さなチップで実行されます。ボードからそれを削除して(DIPの場合)、ブレッドボードに置いて、基本的な小さなコンピューターを動作させるのに必要なハードウェアがどれだけあるかを自分で確認できます。少なくとも私にとってはすごいことでした。作成するものはすべてそのチップ自体で実行されるため、「OS」全体が小さな実行ループになります。Arduino IDE /言語は使い始めるのに便利ですが、後でC / C ++に慣れるのは知っておくと非常に便利です。その時点で本当に理解できたら、ARM Cortex MチップやTIのMSP430のような他のマイクロでCスキルを簡単に使用して、非常に低消費電力にすることができます。

主にEE部分の独自の回路を作成するのがいかに簡単であるかを理由に、EEと組み込み言語をもっと学習したい場合は、Arduinoに向かうことをお勧めします。Raspberry Piのチップを自分のボードに簡単に取り外したり、ハードウェアをいじったりすることはあまりできません。また、ほとんどLinuxシステムです。その時点でVMを起動し、そこでLinuxを学習するだけです。


3

適切なものは、タスクの詳細に依存します。

Wi-Fiが必要な場合は、安価なWi-Fiドングルを使用できるため、Raspberry Piがよりコスト効率の高いソリューションであることがわかります。

ただし、piには多少の複雑さがあります-ソフトウェア側では、Linux構成の経験がありますが、電源の制限もあります-いくつかのwifiドングルが直接動作します。ポリヒューズの周り。

Arduinoパスでは、完全なネットワークスタックを実装し、シリアルチャネルをシミュレートするwifiアダプターを取得しない限り、ネットワーク実装に使用可能なメモリの大部分を使用することになります。人々はそれをしますが、それはぴったりフィットすることができます。

意見の問題として、どちらのプラットフォームもこのタスクには本当に理想的ではありません-piは、組み込みのビルディングブロックとして理想的であるよりも、電力制限、SDカードマウントのオーバーハング、および文書化の制限により、もう少しおもちゃになります。そして、Arduinoには、その価格で搭載できるリソースがほとんどありません。とはいえ、LinuxベースのWi-FiルーターにデジタルI / Oをハッキングした長い歴史がありますが、現在、競争力のある安価でコンパクトなものもありますが、広く普及している優れた選択肢はあまりありません。


3

私はmbedプロセッサをお勧めします。C ++で高レベルの抽象化(開始するため)のバランスが取れているので、Cにドロップダウンして、低レベルで作業を開始できます。

割り込み、タイミング、および読み取り情報(アナログとデジタルの両方)に慣れて快適になったら、単純なPICに進みます。16F886が気に入っています。これにより、レジスタレベルで実際に何が行われているのかがよりわかりやすくなります。開始点としてHi-Tech Cコンパイラを使用します。本当に必要な場合を除き、アセンブリに行く必要はありません。

PICを使用すると、消費電力、プログラムサイズ、メモリ、タイミング遅延について心配することができます。

そこから、mbedやarduinoなどのより大きなプロセッサに戻ることができます。これは、内部で何が起こっているかをよりよく理解していることを知っています。


2

私はArduinoを使い始め、どのように機能するかを理解すると、Picに移行し、成功したと言えます。Arduinoを使用して派手なプロジェクトをいくつか作成しましたが、Webには多くのコード例があるので簡単です。Raspberry piはまだ成長を続けており、Arduinoほどの助けはありません。だから、私の意見では、Arduinoから始めて、ある程度のレベルに達したら、マイクロコントローラーに移行することをお勧めします。


2
投稿された時間は見ていませんでしたが、提案されたトピックで表示されただけで、私は助けたいだけでした。
マヌエルホアキン14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.