web-dev-qa-db-ja.com

「コンパイル」する方法はありますかPythonコードをArduino(Uno)に変換しますか?

Arduino Uno を使用したロボティクスタイプのプロジェクトがあり、簡単に言うと、AIアルゴリズムをいくつか試しています。ただし、 NumPy / SciPy を使用して非常に簡単な高レベルのマトリックスアルゴリズムを実装する必要がありますが、CまたはC++ではまったくの悪夢です。そこにライブラリがあるとしても、これはばかげている。

このプロジェクトをPythonで行う方法はありますか? Mega がこの機能を持っていることについて何か聞いたことがあると思いますが、私にはUnoがあり、この時点でそれを置き換えることはオプションではありません(プロジェクトをかなり元に戻すでしょう)。また、 Pythonを使用してUSB経由でArduinoと通信することについて聞いたことがあるが、実行中はUSBケーブルを接続できない。プログラムをアップロードして完了できる必要がある。

そこにオプションはありますか、それとも行き止まりになりましたか?

54
Alex Eftimiades

Pythonロボット工学でのこの年の使用についての話がありました PyConA と呼ばれる ああ! 「BING」になるマシン! Dr. Graeme Cross.

マイクロコントローラボードでPythonを使用するために彼が推奨した唯一のオプションは PyMite でした。これは Python-On-A-Chip

さまざまなボードに移植されました-具体的に彼は、あなたがオプションではないと言ったArduino Megaについて言及していますが、他のArduinoボードでサポートされている可能性があります。

ただし、これはPythonの「バッテリーは含まれていません」バージョンであるため、numpy/scipyなどの実行に問題が発生する可能性が高くなります。

他のポスターが示唆しているように、Cでの実装は抵抗が最も少ない道かもしれません。

Update:、特にArduino用ではありませんが、 pyMC はpython on十分な関心があれば、著者はpyMCUのArduinoバージョンの開発を検討するかもしれないと述べています。

21

私は「リトルPython」からC++への作業を開始しました( Pyxie -Py CC- Pyc-Cでのプレイ)コンパイラー。 pythonをC++に追加して、arduinoで実行できるようにします。

これは執筆時点(0.0.16)では完全にはほど遠いですが、現在のところpythonの非常に小さなサブセットをコンパイルできます-arduinoの "blink"サンプルを実行するには十分です。これをサポートするために、コンパイルプロファイルがあります-これは、本質的に「arduinoツールチェーンを使用してコンパイルする」ことを意味します。

コンパイルできるプログラムは次のようになります。

led = 13

pinMode(led, OUTPUT)

while True:
  digitalWrite(led, HIGH)
  delay(1000)
  digitalWrite(led, LOW)
  delay(1000)

これにより、解析(型推論など)が実行され、C++にコンパイルされます。C++は、デバイスにロードできる16進ファイルにコンパイルされます。

役に立つになるまでには長い道のりがありますが、進行中であり、ロードマップなどがあります。

特に、Micropython(およびPyMite)との主な違いは、どちらの実装も実行するには小さすぎるデバイスにコンパイルするように設計されていることです。 (これは、ShedSkinのようにPython to C++コンパイラがより大きな実行環境を対象とするものとは非常に異なることも意味します)

5
Michael Sparks

Arduino unoで直接実行するスクリプトをPythonにすることは困難です。理由は、インタープリター言語であるため、オンボードのインタープリターが必要です。プレーンテキストスクリプト。arduino unoのすべてに十分なメモリがない可能性があります。

最善の方法は、Pythonスクリプトをネイティブマシンコードにコンパイルする方法を見つけることです(これがC/C++の動作です)。他のプロジェクトでそのようなことをするプロジェクトを見てきました。プラットフォーム、しかし(私が知る限り)Arduino unoでまだ成功しているものはありません。

http://www.toptechboy.com/using-python-with-arduino-lessons/ をご覧ください。

これがあなたのお役に立てば幸いです。ありがとう!

1
shubham kumar