気の向くままに辿るIT/ICT/IoT
webzoit.net
IoT・電子工作

PythonとArduinoでLチカ

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
Arduinoって?

PythonとArduinoでLチカ

PythonとArduinoでLチカ

2018/02/27

 PythonとArduinoでLチカを実行してみるページ。

 Arduino IDEは、C/C++ベースだが、このIDEには、ArduinoとPCやRaspberry Piなどとの間をシリアル通信で接続して操作できるFirmataプロトコルを使ったサンプルスケッチ群があり、例えば、これをArduinoボードに書き込んでおけば、PythonProcessingRubyPerl、JavaScript...などのスクリプトやC/C#などのプログラミング言語からでもArduinoを操作・制御することができるようになる模様。

 ここでは、この中からPythonとpyFirmataライブラリを使わせて頂き、Arduino界のHello World!であるLチカ(blink)を実行するまでの手順を書く。

ArduinoボードにStandardFirmataをアップロード

 もちろん、後でもよいが、今回は、まず、ArduinoボードにArduino IDEのサンプルスケッチStandardFirmataをアップロードしておくものとする。

 サンプルスケッチStandardFirmataは、Arduino IDEの[ファイル/File] => [スケッチ例/Examples] => [Firmata]にある。

Pythonのインストール

 公式サイトのDownload the latest source releaseから使用中のOS用のPythonを、もしくは、リポジトリにあるならそれをインストールする。

pipのインストール

$ pip -V
$ ...
$ curl -kL https://bootstrap.pypa.io/get-pip.py | sudo python

 Pythonのパッケージ管理ツールであるpipがあるとpyFirmataも簡単にインストールできるので存在を確認、なければインストールしておく。

 端末からpip -Vなどとして存在しない場合には、pip のインストール方法などを参考にインストール。

 curlがなければ、wgetなどでも良いが、何れにしても自身のDebian(Linux)環境では、ユーザー権限で済まいない処理があったため、パイプ経由で受け取るpythonにsudoを付けるか、予めsuしておく必要があった。

pyFirmataのインストール

$ sudo pip install pyfirmata
$ ...
$

 pyFirmataをインストール。

 ちなみにpyMataというライブラリも存在する模様。

スクリプトを書く

// example.py
from pyfirmata import Arduino, util
from time import sleep
 
board=Arduino('/dev/ttyUSB0') # device address
ledpin = board.get_pin('d:13:o') # d=digital 13=pin number o=output
time = 1
 
while True:
 ledpin.write(1)
 print ("ON")
 sleep(time)
 ledpin.write(0)
 print ("OFF")
 sleep(time)

 意外なほどに、何事もなく正常に動作する情報がなく、合わせ技で...と思ってやっている内に、ほぼドンピシャな情報をようやく発見。

 というわけでソースコードは、ほぼ、stackoverflowの投稿通りだが、若干ながら不要と思われる行を省いてみた。

 print文は要らなかったが、とりあえず。

スクリプトの実行と終了

 Arduino IDEのサンプルスケッチStandardFirmataをアップロードしたArduinoボードをPCにUSB接続しておく。

 シリアルポートは、固定なのでArduinoボードで使っているものを予め確認して必要ならソースコードを編集しておく。

$ python example.py
ON
OFF
ON
...
[Ctrl+C]
$

 pythonにファイル名を引数として渡せば、実行権限がなくても実行できる。

 実行中、端末上では、ON、OFFが繰り返され、今回はUno互換機を使ったが、少なくともNanoやPro Miniなどなら、Arduinoボード上のLEDが点滅しているはず。

 breakさせておらず、無限ループ状態なので終了するには、キーボードの[Ctrl]+[C]ボタン同時押しで強制終了させる。

EasyWordMall Arduino UNO R3互換ボード(USBケーブル付属)

EasyWordMall Arduino Pro Mini互換ボード Atmega328 5V 16MHz

Rasbeeオリジナル FT232RL互換 3.3V/5V FTDI/USB/TTL変換アダプタ

KKHMF Arduino Nano Ver 3.0互換ボード ATmega328P CH340G 5V 16MHz

ArduinoとPython

 シリアル通信越しであるため、高速通信は厳しいにしてもPython/Perl/Rubyなどのインタプリタのスクリプト言語やNode.jsなど今時のJavaScriptフレームワークなどでArduinoを操作可能になると電子工作からIoTへの架け橋の役割もあり、できることの幅が広がるだろう。

備考

 Python/Perl/Ruby/JavaScriptだと自身は、それほど詳しいわけでもないがPerlが最も身近、続いて(昔のクライアントサイドの)JavaScript、PythonはJavaと共に超初心者レベル、Rubyについては門外漢。

 ただ、JavaScriptはさておき、Arduinoを楽しむ上でPython/Perl/Rubyの内、何れかは使っていくことになるだろうということで今更ながら基本中の基本Lチカのやりやすさで決めようかと比較検討中。

 ここでは、Pythonを使ってみたが、コピペしただけなので難しいことはなかったし、多少、見慣れていたこともあってか、それほど抵抗もない。

ウェブ造ホーム前へ次へ