Piでのプロトタイピングとマイクロコントローラーの使用との間に大きなジャンプはありますか?


25

この質問は、特に、Raspberry PiでPythonを使用してエンドポイントをプロトタイプ化することと、マイクロコントローラーを使用することの間に大きな学習曲線があるかどうかを尋ねます。

明らかに、消費電力が大幅に改善されています(プロセッサのスループットが低下します)。そのため、バッテリ駆動が必要な製品にMCUアプローチを採用するのには十分な理由があります。

Linuxを実行するシングルボードコンピューターに固執する潜在的な理由の1つは、アプリケーションを高水準言語(多くの標準があるはず)で作成できると仮定すると、学ぶべき新しいソフトウェア(Pythonなど)がないことです。ライブラリ)。

組み込み開発プラットフォームでは、可能性のある選択肢はC ++(mbedまたはarduino)またはmicropythonです。私の印象では、これらはLinuxで実行するコードを書くこととそれほど変わらず、複雑でもありませんが、プラットフォームには個々の利点があります。ソフトウェア開発者に関連するものを見逃していませんか?

具体的には、IoTエンドポイントについて質問しているので、ここで関心のあるアプリケーションのためにLinuxシステムの完全なリソースを用意することは必須ではありません。また、このタイプのアプリケーションでは、消費電力とレイテンシーを考慮すると、mcu実装が厳しい要件になることを強調する価値があります。

回答:


12

ジョージの包括的な答えとポイント2)ハードウェアサポートに追加します。必要なハードウェア(イーサネット、WiFi、SDカードなど)がシールドまたは同様の拡張ボードを介してマイクロコントローラー/ Arduinoに追加されたとしても、それらを操作するライブラリーは小さなメモリ(つまりATMEGA328(典型的なArduinoコントローラー) 32KBのフラッシュと2KBのRAMがあります)。特に、複数の機能(ネットワーク、ディスプレイ、SDカード)を組み合わせる場合、これは重大な制限になる可能性があります。

Arduinoの世界からのいくつかの例:

SDカードとシンプルファイルシステム(FAT)のサポート:

  • SDカード(コードサイズは不明ですが、ハードウェアSPIを使用する場合はそれほど大きな問題ではない可能性があります)、少なくとも512バイトのRAMバッファー
  • Petit FAT FSには、約2..4 kBのフラッシュと最大44バイトのRAMが必要です

マトリックス表示の使用:

TCP / IPプロトコルスタックを使用するイーサネット:

  • uIP:通常のパケットサイズ(> 1 kB)の範囲のRAM要件ですが、シングルチップイーサネットコントローラーには、通常、最大サイズのイーサネットフレームをいくつか保持できるオンチップバッファーが付属しています。

    わずか200バイトのRAMでuIP実装を実行することは可能ですが、このような構成ではスループットが非常に低くなり、同時接続数が少なくなります。(ソース。

  • Arduino用のTCPおよびUDPプロトコルを使用したIPスタック:最小128 kBの外部メモリ

  • IP overシリアルインターフェイス:SerialIP〜9 kBフラッシュおよび「十分な」 RAM

全体として、これらの制限があるプログラミングでは、プログラム空間とコードサイズ(FLASH)、ランタイムデータ(RAM)、および実行速度に関して、まったく異なるアプローチと最適化が必要です。この答えは、きちんと肉付けされています。

mbedプラットフォームについて具体的に質問されるので、当然ながら、IoTに最も関連する機能、つまり、暗号化、認証、承認に加えて接続性が含まれることは注目に値します。Bluetooth Low EnergyおよびIPv6 over low power Wireless Personal Area Networkのハードウェアサポートを提供すると思われます。これらの接続機能は、通常128 KB以上のフラッシュと16 KB以上のRAMを搭載したリストされた開発ボードでのみ使用できます。一方、より小さな開発ボードには、専用の接続性を持たない16KBフラッシュ、4KB RAM(つまり、中規模Arduinosほどではない)を備えたARM Cortex-M0 +コアと同じくらい小さなマイクロコントローラーを備えたシステムが含まれます。


リソースの制約は、私の仮定における最大のギャップでした。ほとんどの場合、ほとんどの人はこれらの問題なしに成長します。
ショーンフーリハネ

20

それはあなたが何をしようとしているかに依存します。

  1. 最大のギャップは、言及したマイクロコントローラー(Arduinoなど)がLinuxなどのマルチタスクオペレーティングシステムを実行しないことです。これは、アプリケーションがマルチタスクまたはマルチスレッドに依存している場合、Arduinoで実行するのがはるかに困難または不可能になることを意味します。

  2. 2番目のギャップはハードウェアサポートです。たとえば、Raspberry Piは、カメラ、USBオーディオ、イーサネット、WiFiをそのままサポートしています。Arduinoによって直接サポートされるものはなく、さまざまなシールド(USBホスト、イーサネット、WiFiなど)を使用できますが、それらの使用はRaspberry Piでネットワークを使用するほど簡単ではありません。

  3. 3番目のギャップは利用可能なリソースです。ほとんどのマイクロコントローラーは、Raspberry Piが提供するリソースにさえ近づきません。たとえば、最初のRaspberry Piでさえ、256MbのRAMで700MHzで動作するCPUを提供し、32Gbのストレージで使用できました。ATMEGA328に基づく典型的なArduino Unoは16MHzで動作し、32Kbのストレージと2KbのRAMを備えています。

したがって、Raspberry Piを使用することは、PCから来ている開発者にとって間違いなく簡単です。マイクロコントローラーを使用する主な利点は次のとおりです。

  • 費用(Arduino Nanoの中国のクローンの費用は1枚につき2ドル未満です)
  • 消費電力(マイクロコントローラーは低消費電力のために非常に最適化できます-バッテリーで実行する必要がある場合は重要です);
  • リアルタイムの可用性。つまり、リアルタイムで信号の変化に対応する機能。
  • サイズ(Arduino MiniはRaspberry Pi Zeroの2倍の幅があります。多くのピンが必要ない場合、ATTINY85サイズは1ペニー未満であり、クリスタルなしで動作します)。

これらのどれも重要でない場合、Raspberry Piを使用することは間違いなくより理にかなっています。


3
バッテリー電源、およびmcuを使用するための大きなリソース要件はありません。したがって、10〜100 MHzのプロセッサで十分であると想定しています。SPIはおそらくUSBと同等のmcuですが、周辺機器の使用に関する有効なポイントです。
ショーンフーリハネ

2
バスを持っているだけでは十分ではありません。LinuxでWiFiを使用することを検討してください。アプリは特定の知識を必要としません。イーサネットで機能する同じコードがWiFiインターフェースでも機能します。これはマイクロコントローラーの場合ではありません。異なるライブラリを使用し、それらの使用方法を学び、コードを変更する必要があります。
ジョージY.

1
OK、別のライブラリを使用することは大きな障壁になることを理解していませんでした。
ショーンフーリハネ

2
P:あなたは多くのピンを必要としない場合は、お米の粒の大きさであるATtiny4得ることができます
ニック・T

1
明らかにAttiny85よりも小さいわけではありません:)でも、DIP以外を考えているなら、85でさえ指先です。
ジョージY.

9

はい、Pythonでのプログラミングからマイクロコントローラーでの典型的なCベースの言語ツールを使用したプログラミングへの大きなジャンプです。実際、多くの場合、すべてではないにしても、アプリケーションの一部をアセンブリ言語で記述する必要があります。

他の回答ですでに指摘したように、マイクロコントローラーはリソースに非常に制約されているため、Linuxオペレーティングシステムのすべての便利さと、ローカルで実行できるすべてのツールを失います。Arduino IDEでの反復は、ローカルスクリプトの実行と比較して非常に遅いです。

私はマイクロコントローラーとマイクロプロセッサーの専門的な経験をたくさん持っていますが、リアルタイムの重要なもののためにいくつかのArduinosでRPiハードウェアを使用して個人的なプロジェクトを実行することを好みます。また、Beagle Bone Blackを使用してみましたが、RPiを1つ以上のArduinoで使用するよりも便利な点があります。


9

はい、大きな違い

違いは、ハードウェアとソフトウェアの両方に関して、昼と夜のようなものです。有効な比較はまったくありません。

どちらを使用するか

次の場合は、Arduinoを使用します...

  • スペースの制約により、Piは実行不可能になります。
  • Piの電力使用量が多すぎます。
  • お金が問題になります(特に、プロジェクトで複数のまたは多くの個別のコントローラーが必要な場合、各コントローラーは非常に単純なロジックのみを実行します)。
  • 楽しみや知識を得るために、気を引き締めて、はるかに低いレベルで作業する必要があります。
  • 極端なシンプルさと100%定義されたリアルタイムの動作が必要であり、制御不能な何かがプログラムを殺す可能性はゼロです。
  • イーサネット、難しいUSBホスト機能(ハードドライブへのアクセス、HIDデバイスとしてクライアント側で使用するなど)は必要ありません。これらのほとんどはArduinoに取り付けることができます(非常に遅くなります)が、RAM / EPROMおよび機能の点でも高コストです。プリエンプティブなマルチタスキングがないため、タスクのブロック解除は非常に迅速に複雑になります。
  • 単純なArduino開発IDE、またはより深く掘り下げる(つまり、プログラムを自分で構築する)ことで問題ありません。また、Pro MicroなどのUSBアップロードデバイスを使用しない場合は、購入済みまたは自作の開発キットです。 /バーナー。

他のすべての場合、Piはユーザーフレンドリーです。Piは、単なる別の(遅い)コンピューターです。

誤解しないでください。私はPiを所有しており、ネットワーク内のいくつかのLinuxサービスに使用しています。私も頻繁にArduinosをプログラムします(主にPro Micros)。どちらも素晴らしいです、私はそれらが同じように好きですが、彼らは非常に異なる使用シナリオを持っています。

難易度についての質問-それは相対的です。Arduinoが私にとって困難になったのは、特に疑わしい電子機器(EM干渉、長すぎるケーブルなど)と組み合わせた場合、タイミングの問題をデバッグするのが難しかったからです。選択した言語(つまり、Arduino IDEのC)に自信がある場合は、使用しているライブラリをハッキングできるはずです。それでも、Piよりも常に複雑になります。たとえば、タイミングが重要ではないものに選択したスクリプト言語を使用することができます-それらは常に開発とデバッグがより簡単になります


私はどちらが最良の開発プラットフォームであるかを尋ねていません-私のユースケース、主に電力の制約のため、mcuを必要とします。しかし、この点については質問があまり明確ではなかったようです。
ショーンフーリハネ

それでは、答えの最初の部分で十分です。必要に応じて、残りを「補遺」として扱います。
AnoE

7

まだ明示的に指定されていない点がいくつかあると思います。

開発環境はまったく異なります。実際にPi上でPiソフトウェアを開発できます。必要に応じてGUIを使用することもできます。高度なデバッグツールも組み込まれています。コンピューターシステムで利用できるものは非常に多くあります。

コントローラーは、別のコンピューターで開発/エミュレートし、最終テストのためにコントローラーに送信する必要があります。

Piは、プログラムしたいほぼすべての言語を実行できます。通常、マイクロコントローラーには1つまたは2つがあります。

Piはかなりの数のオペレーティングシステムを実行できます(Windows IoTおよび一連の特殊システムを含む)。組み込みコントローラーは「オペレーティングシステム」をまったく実行しない傾向があります。

また、ランタイム/ OSに関する限り(Piの起動には数秒かかります)、最初の数秒で実際に何かを実行したい場合、Piは機能しません。また、ストレージへの書き込みを防ぐために極端な対策を講じない限り、電源を切るだけではなく、「シャットダウン」を実行して少し待つ必要があります。これにより、一部の使用が制限される場合もあります。

私が見たことのないもう1つの展開後のポイント。Piを適切に保護したかどうか、つまり、特定の状況下で不正アクセスを許可するコードの一部を貼り付けた代理店がいないことを、すべてのネットワークから削除し、すべてのワイヤレスアクセスメカニズムを無効にすることなく絶対に確信できるかどうかはわかりません。モノで実行されるほとんどすべてのコードを書いているので、マイクロコントローラーはかなり簡単に保護できます。

もちろん、実際のOSを使用せずに独自のPiイメージを常に開発し、ボード/ CPU全体を引き継ぐと、関連するすべての利点/欠点を備えた非常に強力で高価なマイクロコントローラーになります。おそらく誰かがすでにこれを行っているかもしれませんが、私は最近そのようなものを探していません。


あなたの最後の段落をWRT、ええ、それはベアメタルと呼ばれ、ほとんどの人はそれをしませんが、技術的には可能です...サイトへようこそ!
ガニマ

3

Piを使用したアプリケーションの開発の違いは、ハードウェアの違いとソフトウェア開発ツールチェーンの違いにより、マイクロコントローラーを使用したアプリケーションの開発とは非常に異なる場合があります。

8ビットから64ビットのプロセッサーで、数Kから数ギガバイトのRAMを搭載した幅広いマイクロコントローラーが利用可能です。より高性能なマイクロコントローラーは、より多くのPiのような体験を提供します。性能の低いマイクロコントローラーにはありません。

また、Piを使用しても、Windows 10 IoTオペレーティングシステム向けの開発とRaspian、Mate、またはその他のLinuxベースのOS向けの開発には大きな違いがあります。Windows 10 IoTには、ユニバーサルWindowsプログラム(UWP)環境を対象とするリモートデバッガーを備えたVisual Studioツールチェーンを使用した開発PCが必要です。RaspianまたはMateの開発は、Piで使用可能なツールを使用して、実際にPiで実行できます。

制約アプリケーションプロトコルは、物事の環境のインターネットで使用されている小型、拘束されたデバイスのために使用されています。マイクロコントローラのさまざまなハードウェアおよびソフトウェアのアイデアを得るために、CoAPプロトコルの実装に関するこのページでは、対象となる環境のアイデアを提供します。iOS、OSX、Androidなどのよく知られているOSとともに漠然と聞いたことがあるContikiオペレーティングシステムに言及しています。言及されているプログラミング言語は、Java、JavaScript、C、C#、Ruby、Go、Erlang、Rust、およびPythonです。

マイクロコントローラを使用した開発に使用されるツールチェーンは、製造業者や、開発コミュニティやオープンソースイニシアチブから利用可能なリソースの種類によって異なります。クロスアセンブラーを取得する場合もあれば、Cクロスコンパイラーを取得する場合もあります。また、Windows 10 IoT向けのVisual Studioツールチェーンに類似した、すべての機能を備えた素晴らしいツールチェーンを取得する場合もあります。

マイクロコントローラーの実際の開発環境では、EEPROMプログラマーとソフトウェアツールを使用して新しいイメージを作成し、デバイスにプッシュするか、デバイスにシリアル接続または経由で新しいイメージをダウンロードできるように必要な接続性がありますネットワーク接続。

私の印象では、ほとんどのマイクロコントローラーにはCクロスコンパイラーがありますが、コンパイラーはK&RやC98などの古い標準のみをサポートします。マイクロプロセッサの特定は、例えば機能のためのCクロスコンパイラは、多くの場合、非標準のキーワードを持っているfarし、nearそのセグメント化されたメモリと、古い8080および8086プロセッサを搭載したポインタのキーワードを。

FORTHプログラミング言語など、マイクロコントローラーをターゲットとする特殊言語もあります。多くの場合、これらの言語には、言語のランタイム以外のオペレーティングシステムがないように、ベアメタルを対象とするランタイムデザインがあります。

オペレーティングシステムは、実質的に存在しないものから、必要最低限​​の Linuxから、freeRTOSやWindows Embedded、本格的なLinuxやMicrosoft Windows などの特殊なOSにまで及びます。Raspberry PiのSourceForgeプロジェクトMINIBIANを参照してください。アセンブラーでのRaspberry Pi用の初歩的なOSの開発について説明しているこのeBook、Baking Pi:Operating Systems Developmentも参照してください。

Visual Studio Magazineの「Visual Studioでモノのインターネットをプログラミングする」のこの記事では、利用可能なさまざまなデバイスの概要に続いて、LinuxおよびWindowsの開発にVisual Studio IDEを使用する概要を説明します。

現在、利用可能な既製のプログラム可能なネットワーク対応マイクロコントローラーデバイスの巨大で成長している世界があります。非常に低いレベルでは、Texas Instrumentsなどのさまざまな従来のチップメーカーのさまざまな単純な16ビットおよび32ビットデバイスがあります。(SensorTag開発キットで少し遊んだのですが、とても楽しいので、Watch DevPackも素晴らしい学習ツールセットかもしれません。)

よく知られているマイクロコントローラーデバイスには、Arduino、BeagleBoard、Raspberry Piなどがあります。これらの環境はすべて、広範なコミュニティサポートを備えており、膨大な数の既成の外部センサー、モーター、サーボ、その他のあらゆるものにプラグインできます。Limor "Ladyada" Friedによって設立された電子学習スーパーストアであるAdafruitは、軽量フェザー開発ボードの独自のラインとともに、これらのボードのあらゆる種類の周辺機器を提供しています。

...

Microsoft .NET FrameworkとVisual Studioに精通している開発者にとって最も興味深いデバイスの世界は、Windows 10 IoT Core互換環境かもしれません。これらは、C#、Visual Basic、Python、Node.js / JavaScriptなどのさまざまな言語で記述されたユニバーサルWindowsプラットフォーム(UWP)アプリをサポートするx86およびARM搭載のデバイスです。Windows 10 IoTコアは、Raspberry Pi、Arrow DragonBoard 410C、Intel Joule、Compute Stick、MinnowBoardなどのデバイスをサポートしています。Askey TurboMate E1ウェアラブルなどの興味深い製品プラットフォームもあります。

マイクロコントローラーアプリケーションの具体例

これは、自動コーヒーメーカーのマイクロコントローラーボードの画像です。これは、中国で製造された自動コーヒーメーカーの標準コンポーネントのようです。メーカーのWebサイトはPCBに印刷されています。

画像は2つのビューで構成されています。左側の図は、マイクロコントローラーとサポート回路を含むボードの背面です。右側のビューは、LCDスクリーンと現在の時刻を設定したり、開始時刻のプログラミングなどのアクションを実行するために使用されるボタンのセットがあるボードの前面です。

右側のビューは、コーヒーメーカーの前面の開口部に収まるキャリアに収まります。下部PCBのスイッチは、ロッカーアームスイッチで作動します。特別な目的のように見えるLCDは、コーヒーメーカーの設定を変更するときに、現在の時間とステータスを表示したり、ユーザーインターフェイスを表示したりするために使用されます。赤いLEDは、コーヒーメーカーが実際にコーヒーを作っているときを示し、照明をオフに戻すことで完了したことを示します。

ここに画像の説明を入力してください

マイクロコントローラーは、8ビットマイクロコントローラーであるELAN Microelectronics Corp EM78P447NAM(データシート)です。基本的な統計のいくつかは、これがどんな小型で最小のデバイスであるかを示しますが、意図された目的にはうまく機能します。その目的は、ソフトウェアを開発し、製造の一環として1回だけ書き込み可能なROMにダウンロードすることです。

•低消費電力:

* Less then 2.2 mA at 5V/4MHz

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

* Typically 2 µA, during sleep mode

•チップROM上の4K×13ビット

•OTPメモリコードの侵入を防ぐための3つの保護ビット

•ユーザーの要件に対応する1つの構成レジスタ

•148×8ビットオンチップレジスタ(SRAM、汎用レジスタ)


2
これで問題が解決するとは思わない。確かに、いくつかの製品はうまくパッケージされていませんが、それはSBCにも当てはまります。
ショーンフーリハネ

1
@SeanHoulihaneは、この答えで私がやろうとしたことは、マイクロコントローラのラベルに適合するデバイスが広範囲に存在するという、質問に対するマイクロコントローラの視点を提供することです。Linux以外のOSの風景によりがあり、PythonやCよりプログラミング言語にもっとあり
リチャード・チェンバース

1
私にとって、あなたはMCUの世界は混乱だと言っているだけです。私は誤解を招くと感じています。
ショーンフーリハネ

1
@SeanHoulihane私の投稿からの印象は、MCUの世界が混乱しているということです。別の解釈は、MCUの世界は多くの素晴らしい選択肢と機会の1つであるが、読者が物語に独自の偏見と偏見をもたらすということです。
リチャードチェンバーズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.