マルツTOP > APPLICATION LAB TOPページ おすすめ技術記事アーカイブス > ラピッドマイクロコントローラベースのプロトタイピングと開発のためのCircuitPythonの基礎

ラピッドマイクロコントローラベースのプロトタイピングと開発のためのCircuitPythonの基礎

著者 Steve Leibson 氏
Digi-Keyの北米担当編集者 提供
2019-03-14
マルツ掲載日:2019-06-24


 Python言語はプログラミングをより身近にしましたが、たくさんのメモリや周辺リソースを持っているPCなどのマシン上で実行するように設計されています。そのため、リソースとインターフェースの制約が厳しい組み込みシステムでは、MicroPythonと呼ばれるマイクロコントローラ用に最適化されたバージョンが普及しています。オープンソースコミュニティが、MicroPythonを特定のマイクロコントローラや開発ボードに適応させて、マイクロコントローラの開発をサポートしています。

 この記事ではそのような適応策の一つである、AdafruitのCircuitPythonを紹介します。この記事では、Pythonについて簡単に説明した後、古典的な組み込み開発言語C++と比較しながら、PythonがどのようにMicroPython、そしてCircuitPythonに進化したかを説明します。それから、CircuitPython環境をサポートするAdafruitと他のベンダーからのいくつかの開発ボードを紹介する前に、CircuitPythonを使ってソフトウェアを書くプロセスを説明します。

Pythonの理由

 オリジナルのArduino開発ボードとその多くの後継モデルは、メイカー、趣味、学生プロジェクト、そして組み込みプロトタイプのための非常に人気のあるマイクロコントローラ開発ボードです。しかし、Arduino IDEとプログラミング言語はC++に基づいています。C++は、奇妙に見える構文と厳格な句読規則を使用した強力で複雑なコンパイル言語で、初心者のプログラマには不自然に思われます。

 Pythonは新しいプログラミング言語です。優れたプログラミング機能と非常に明確な構文を組み合わせた、インタープリタ型の対話型オブジェクト指向言語です。Pythonは、より簡単な構文と合わせて、その書きやすさと読みやすさで知られています。これらの特性が組み合わさってプログラミングエラーの数が減り、コードの再利用が容易になり、ソフトウェア開発がスピードアップします。

 言語の解釈的な性質は、実験と迅速な学習を促進するプログラマからのフィードバックを即座に提供します。これらの理由から、Pythonは現在多くの学生やメーカーが学ぶ最初のプログラミング言語となっています。

 一つの欠点は、Pythonが十分なRAMと大容量記憶装置、およびキーボード、大型ディスプレイ、マウスを持ち、総合的なユーザーインターフェースを備えたPCや大型マシン上で動作するように設計されていることです。組み込みプログラミング言語としては設計されていませんでした。しかし、MicroPythonと呼ばれるPython 3プログラミング言語の無駄のない効率的な実装は、マイクロコントローラの制約のあるリソース内で動作するように特別に作成され最適化されています。

 MicroPythonが組み込みプログラミング言語として期待されていることを認識して、オープンソースコミュニティは重大なマイクロコントローラ開発をサポートするために特定のマイクロコントローラと開発ボードに適応させてきました。たとえば、AdafruitはCircuitPythonと呼ばれる独自のMicroPythonフレーバーを開発しました。実験を簡素化し、低コストのマイクロコントローラボード上でプログラミングする方法を学ぶように設計されており、Adafruitの開発ボードで利用可能なマイクロコントローラおよびハードウェアリソースに合わせて調整されています。CircuitPythonは、いくつかのAdafruitの開発ボードにプレインストールされており、他のボードにもインストール可能です。

C++とPythonの違い

 Arduino IDEと現在入手可能な多数のArduino開発ボードの勢いと存在感を考えると、なぜ組み込み開発にPythonのバージョンが必要なのかと思われるでしょう。言語を比較すると答えがわかります。

 C++は、古いC言語にオブジェクト指向の機能を持たせて拡張したものです。これらの拡張機能を使用しても、1960年代後半から1970年代初期にかけてベル研究所でKerniganとRitchieによって作成されたC言語の構文を保持しているため、C++コードはやや謎めいています。C言語は、ターゲットプロセッサの機械語命令に簡単にマッピングできるように意図的に設計されています。プログラマの要求よりもマシンの要求の方への偏りは、言語の構文でも明らかです。

 市販のマイクロプロセッサは1971年まで登場しなかったので、C言語はもともとミニコンピュータ用に開発されました。マイクロプロセッサ用のCコンパイラは、1980年代に徐々に有用なツールに進化しました。C++と同様に、Cは常にコンパイル言語です。

 デンマークのコンピュータ科学者であるBjarne Stroustrupは、1979年にC++の開発を始めました。1985年に、彼のこの言語の最初のテキストブックが登場しました。C++は、1998年まで標準プログラミング言語にはなりませんでした。Cと同様に、StroustrupのC++言語はもともと大型のコンピュータを対象としていました。2003年に開発されたArduino IDE(統合開発環境)は、C++をマイクロコントローラにとって有用なものにしました。

 Pythonもオブジェクト指向言語です。Pythonはオランダのプログラマ、Guido van Rossuminによって開発され、1991年に最初にリリースされました。Pythonの構文設計は、コードの読みやすさを重視しています。これは、PythonとC++の大きな違いの1つです。

 書きやすさは、読みやすさと密接に関係していますが、Pythonが好まれるもう1つの特性です。書きやすさは、一般的にPythonがプログラマがより速くアプリケーションを書くことを可能にすると信じられていることを意味します。これにより実験を促進し、プロトタイピングと開発サイクルを短縮することができます。

 2つ目の大きな違いは、Pythonはインタープリタ言語であるということです。これは、1960年代にミニコンピュータ用に初めて登場し、1970年代にマイクロコンピュータの登場で真に開花したBasicプログラミング言語によく似ています。Basicのように、Pythonの解釈的な性質は実験を奨励し、それゆえコンパイルされたプログラミング言語に使用される編集/コンパイル/ダウンロード/実行開発サイクルを省いて学習できます。ただし、Basicとは異なり、Pythonは、Basicが最初に開発されてから登場してきた半世紀にも及ぶコンピュータサイエンスの進歩を取り入れた、最新の高レベルのオブジェクト指向言語です。

 たとえば、Pythonの変数は使用する前に宣言または型指定をする必要はありません。プログラマは、変数が整数か浮動小数点数かを心配する必要もありません。Pythonインタープリタはそれをすべて把握し、実行時に適切な選択をします。

 C++とPythonのもう2つの違いは、文字列処理と句読点です。多くのプログラマは、C++での文字列処理が曖昧でわかりにくいと感じています。Pythonの文字列処理ははるかに単純で、長くBasicの長所と考えられていたBasicの単純でよく知られた文字列処理機能を連想させます。

 同様に、CおよびC++の句読点、特に波括弧({ })は、熟練したばかりのプログラマでも経験豊富なプログラマでさえも頻繁に遭遇する障害の1つです。プログラムには、常に奇数の波括弧があるように感じます。つまり、プログラマは、欠けている波括弧をどこに入れるべきかを見つけるためにコードを詳しく調べなければなりません。Pythonはそのような気難しい句読点を持っておらず、Pythonコードに読みやすさを与えるインデントを使います。

MicroPythonの起源

 CやC++のように、Pythonはもともと大型のコンピュータ上で動作するように設計されていました。その結果、この言語はマイクロコントローラのプログラミングで使用するには多すぎるリソースを必要としました。そのため、オーストラリアのプログラマ兼物理学者のDamien Georgeは、マイクロコントローラのより限られたリソースで実行できるMicroPythonと呼ばれるバージョンのPythonを開発しました。Arduino開発ボードはMicroPythonの初期のハードウェアターゲットでした。

 MicroPythonのインタラクティブな機能は、正式にはREPL(read-eval-print-loop)ウィンドウと呼ばれるコマンドインターフェースに集中しています。REPLインターフェースは1970年代と1980年代の基本的なコマンドラインインターフェースに非常に良く似ています。ユーザー入力(単一の式またはステートメント)を受け取り、それらを評価してから、REPLウィンドウを介して結果をユーザーに返すか、ステートメントに埋め込まれたコマンドを実行します。

 REPLインターフェースを使用すると、変数のクエリ、I/Oラインの切り替え、または接続されている周辺機器への文字列の送信を行うことができます。その行は解釈され、エンターキーが押されるとすぐに実行されます。それがインタープリタ言語の本質です。

 このMicroPythonの機能は予備的なプログラミングとデバッグを容易にし、初心者と経験豊富なプログラマの両方にとって言語を使いやすくするMicroPythonの側面の1つです。REPLユーザーインターフェースは、Arduino IDEの古典的な編集 - コンパイル - 実行 - デバッグサイクルと比較して、より速い開発サイクルをサポートします。経験豊富なプログラマでも、MicroPythonのREPLユーザーインターフェースを使用してインタラクティブに新しい周辺機器タイプを試すことができるというメリットがあります。

開発ボード向けCircuitPythonサポート

 各マイクロコントローラには固有の周辺機器セットが用意され、開発ボードもそのリストに追加されています。これらの周辺機器はサポートライブラリを必要とします。これはArduino IDEとMicroPythonの両方に当てはまります。さらに、Adafruitの1655 NeoPixelアドレス指定可能なRGB LEDなどのように、ライブラリのサポートを必要とする多くの周辺機器があります。

 高度なサポートを提供するために、AdafruitはCircuitPythonと呼ばれる独自バージョンのMicroPythonを開発し、同社のいくつかの安価なマイクロコントローラ開発ボードの特定の要件を満たしました。同社はまた、数多くの周辺ライブラリをその膨大なArduinoコレクションからCircuitPythonライブラリに変換し、CircuitPython用の多数の周辺サポートライブラリを備え、その数は益々増え続けています。

 Adafruitは、CircuitPythonを具体的にサポートするために一連のマイクロコントローラ開発ボードを設計しました。これらには次のものが含まれます。

3333:アドレス指定が可能で制御可能な10個のRGB LEDを備えたCircuit Playground Express(図1)


図1:Adafruitの3333 Circuit Playground Expressには、アドレス指定、制御可能な10個のRGB LEDがあります。(画像提供:Adafruit)

3500:わずか27mm×15.3mm×2.75mmのTrinket M0開発ボード(図2)


図2:Adafruitの3500 Trinket M0開発ボードは、わずか27mm×15.3mm×2mmです。(画像提供:Adafruit)

3501:Gemma M0は、およそ25セント硬貨の大きさで、USBポートまたは別のバッテリポートから電力を供給することが可能(図3)


図3:Adafruitの3501 Gemma M0は、およそ25セント硬貨の大きさで、USBポートまたは別のバッテリーポートから電源を供給できます。(画像提供:Adafruit)

3403:Feather M0 Expressは、カスタム回路用の小さなブレッドボード領域を備えた開発ボード(図4)


図4:Adafruitの3403 Feather M0 Express開発ボードには、カスタム回路用の小さなブレッドボード領域があります。(画像提供:Adafruit)

 これら4つのAdafruitマイクロコントローラ開発ボードは、すべてネイティブUSBサポートを備えたMicrochip Technology(旧Atmel)のSAMD21マイクロコントローラに基づいています。ただし、CircuitPythonは、Adafruitの開発ボードとSAMD21マイクロコントローラ以上のものをサポートしています。

 Adafruitの3406 Feather NRF52およびNordic SemiconductorのnRF52-DK開発ボード(これらは両方ともNordic SemiconductorのnRF52832に基づく)を含む他の開発ボード用のCircuitPythonのバージョンも登場し始めています。さらに、Nordic SemiconductorのnRF52840マイクロコントローラをベースにしたnRF52840-DK開発ボード(図5)もCircuitPythonによってサポートされています。これら3つのボードの基になっている両方のマイクロコントローラは、適切なソフトウェアサポートと共に、Bluetooth Low Energy(BLE)をチップ上に統合しています。


図5:Nordic SemiconductorのnRF52840-DK開発ボードは、BLEサポートを統合しました。(画像提供:Nordic Semiconductor)

CircuitPythonでの開発

 Adafruitは、言語をサポートするように設計された開発ボードにCircuitPythonを直接搭載するという独自のアプローチを取っています。これらのボードの1つをホストPCのUSBポートに接続すると、ボードはPCのディスクドライブとして表示されます。このディスクドライブのルートディレクトリには、インタープリタ、ユーザープログラム、およびライブラリファイルのフォルダを含む重要なCircuitPythonファイルが表示されます。この配置により、ホストPCが既存のファイルシステムとドライバを使用して開発ボードにアクセスすることが容易になります。

 ホストPCのCircuitPythonユーザーインターフェースには、無料でダウンロード可能なオープンソースのエディタとREPLインターフェースが必要です。Adafruitは、図6に示すMuというオープンソースアプリケーションをお勧めします。Mu画面は、編集が行われるコードウィンドウと、プログラマが開発ボードのCircuitPythonインタープリタを制御するREPLコントロールおよびモニタウィンドウに分割されています。


図6:AdafruitはMuと呼ばれるオープンソースプログラミングインターフェースの使用を推奨します。Mu画面は、編集が行われるコードウィンドウと、プログラマが開発ボードのCircuitPythonインタープリタを制御するREPLコントロールおよびモニタウィンドウに分割されています。
(画像提供:codewith.mu/en/tutorials/1.0/adafruit)

 プログラムをコードウィンドウに入力してMuの「Save」ボタンをクリックすると、コードはAdafruitのCircuitPython開発ボードのSAMD21マイクロコントローラの大容量オンチップフラッシュメモリに保存されます。CircuitPythonのコードはすべてマイクロコントローラのフラッシュメモリ内の開発ボード上にあります。CircuitPythonボードはPCにとってディスクドライブのように見えるので、これはオペレーティングシステムの観点から不自然な行為ではないことを忘れないでください。

結論

 Python言語は、対話型プログラミング、実験、およびデバッグを含む多くの利点をプログラマに提供します。変数の宣言や型付けの必要がなく、そして巧妙な句読点もなく、単純化された、より人間的な言語構文を持っています。MicroPythonはPython 3の変形で、Pythonでのマイクロコントローラプログラミングを可能にします。

 ここに示されているように、Adafruitは直接のハードウェアサポートのためにMicroPythonからCircuitPythonを派生させ、実験と学習をさらに単純化し、ソフトウェア開発を加速するようにしました。CircuitPythonは、MicrochipのSAMD21マイクロコントローラをベースにしたいくつかの低コストマイクロコントローラ開発ボード、およびNordic SemiconductorのBLE対応nRFマイクロコントローラをベースにした他の開発ボードをすでにサポートしています。


免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、Digi-Key Electronicsの意見、信念および視点またはDigi-Key Electronicsの公式な方針を必ずしも反映するものではありません。

このページのコンテンツはDigi-Key社より提供されています。
英文でのオリジナルのコンテンツはDigi-Keyサイトでご確認いただけます。
   


Digi-Key社の全製品は 1個からマルツオンラインで購入できます


※製品カテゴリー総一覧はこちら



ODM、OEM、EMSで定期購入や量産をご検討のお客様へ【価格交渉OK】

毎月一定額をご購入予定のお客様や量産部品としてご検討されているお客様には、マルツ特別価格にてDigi-Key社製品を供給いたします。
条件に応じて、マルツオンライン表示価格よりもお安い価格をご提示できる場合がございます。
是非一度、マルツエレックにお見積もりをご用命ください。


ページトップへ