PythonとArduinoでLチカを実行してみるページ。
Arduino IDEは、C/C++ベースですが、このIDEには、ArduinoとPCやRaspberry Piなどとの間をシリアル通信で接続して操作できるFirmataプロトコルを使ったサンプルスケッチ群があり、例えば、これをArduinoボードに書き込んでおけば、PythonやProcessing、Ruby、Perl、JavaScript...などのスクリプトやC/C#などのプログラミング言語からでもArduinoを操作・制御することができるようになる模様。
ここでは、この中からPythonとpyFirmataライブラリを使わせて頂き、Arduino界のHello World!であるLチカ(blink)を実行するまでの手順を書きます。
もちろん、後でもよいですが、今回は、まず、ArduinoボードにArduino IDEのサンプルスケッチStandardFirmataをアップロードしておくものとします。
サンプルスケッチStandardFirmataは、Arduino IDEの[ファイル/File] => [スケッチ例/Examples] => [Firmata]にあります。
公式サイトのDownload the latest source releaseから使用中のOS用のPythonを、もしくは、リポジトリにあるならそれをインストールします。
Pythonのパッケージ管理ツールであるpipがあるとpyFirmataも簡単にインストールできるので存在を確認、なければインストールしておきます。
端末からpip -Vなどとして存在しない場合には、pip のインストール方法などを参考にインストール。
curlがなければ、wgetなどでも良いですが、何れにしても自身のDebian(Linux)環境では、ユーザー権限で済まいない処理があったため、パイプ経由で受け取るpythonにsudoを付けるか、予めsuしておく必要がありました。
pyFirmataをインストール。
ちなみにpyMataというライブラリも存在する模様。
意外なほどに、何事もなく正常に動作する情報がなく、合わせ技で...と思ってやっている内に、ほぼドンピシャな情報をようやく発見。
というわけでソースコードは、ほぼ、stackoverflowの投稿通りですが、若干ながら不要と思われる行を省いてみました。
print文は要らなかったのですが、とりあえず。
Arduino IDEのサンプルスケッチStandardFirmataをアップロードしたArduinoボードをPCにUSB接続しておきます。
シリアルポートは、固定なのでArduinoボードで使っているものを予め確認して必要ならソースコードを編集しておきます。
pythonにファイル名を引数として渡せば、実行権限がなくても実行できます。
実行中、端末上では、ON、OFFが繰り返され、今回はUno互換機を使いましたが、少なくともNanoやPro Miniなどなら、Arduinoボード上のLEDが点滅しているはず。
breakさせておらず、無限ループ状態なので終了するには、キーボードの[Ctrl]+[C]ボタン同時押しで強制終了させます。
シリアル通信越しであるため、高速通信は厳しいにしてもPython/Perl/Rubyなどのインタプリタのスクリプト言語やNode.jsなど今時のJavaScriptフレームワークなどでArduinoを操作可能になると電子工作からIoTへの架け橋の役割もあり、できることの幅が広がるでしょう。
Python/Perl/Ruby/JavaScriptだと自身は、それほど詳しいわけでもないですがPerlが最も身近、続いて(昔のクライアントサイドの)JavaScript、PythonはJavaと共に超初心者レベル、Rubyについては門外漢。
ただ、JavaScriptはさておき、Arduinoを楽しむ上でPython/Perl/Rubyの内、何れかは使っていくことになるだろうということで今更ながら基本中の基本Lチカのやりやすさで決めようかと比較検討中。
ここでは、Pythonを使ってみましたが、コピペしただけなので難しいことはなかったし、多少、見慣れていたこともあってか、それほど抵抗もありませんでした。