AdafruitのCircuitPythonとFeather M0 Expressの組み合わせ、使って見たらちょっと驚くと思います。
例えば、micro:bitやMBEDはパソコンとつなぐとUSBフラッシュメモリみたいにストレージとかドライブに見えますよね。だからわかりやすいなと思うわけですが、そこはFeather M0 Expressも同じ。PCと繋ぐとドライブに見えます。
プログラムするには、例えばMBEDならブラウザでオンライン開発環境を開いてプログラムを書いて、コンパイルされたファイルをダウンードし、そのドライブに書き込みます。
それに対してCircuitPythonの場合、メモ帳で書いたPythonファイルをドライブにドラッグドロップするだけ。開発環境が要らないし、コンパイルも必要ないからとても手軽です。
それにCircuitPythonはREPLモード(対話型でプログラムを実行できるモード)があるので簡単にプログラムを試すことができます。
この手軽なCircuitPythonとFeather M0 Expressの組み合わせ、もしよければ試してみてはいかがでしょうか。ここでざっとやり方を説明します。
ちなみに、CircuitPythonはAdafruit社の様々なボードに対応していますが、その中でもCircuit Playground Expressや今回使ったFeather M0 Expressのように名前にExpressと入っている製品は、PCと接続するとドライブとして認識されるため、CircuitPythonを試すのに最適だと思います。
この記事で使ったもの
- Feather M0 Express(←入荷したばかり)
- MacOSXまたはWindows 10
CircuitPythonを試すには、まずCircuitPythonをGithubからダウンロードしてボードに書き込む必要があります。
今回使うボードはFeather M0 Expressですのでadafruit-circuitpython-feather_m0_express-1.0.0.uf2をダウンロードします。(GithubのページにVersion 2.0.0より1.0.0の方が安定していると書かれていたので1.0.0の方を使うことにしました。)
USBケーブルでパソコンとボードを接続すると、FEATHERBOOTのような名前のついたドライブとして認識されると思います。
ダウンロードしたファイルを書き込むには、基板のUSB端子の近くにあるリセットボタンを連続して2回押し、ブートローダーモードに入ってからFEATHERBOOTにドラッグドロップで書き込みます。
※ ブートローダーモードに入ると、大きなLEDが緑色に光り、小さな赤いLEDが微妙にフェードイン、アウトを繰り返す状態になります。
ファイルが書き込まれたらドライブの名前がCIRCUITPYに変わると思います。これでPythonのプログラムを動かす準備ができました。
Pythonを動かす方法としてREPLモードとプログラムファイルの実行という2つの方法があります。
REPLモードの場合
ここではCoolTermを使うことにします。
※ CoolTermではなく、WindowsのPuttyや、Macのscreenコマンドでも良いです。
CoolTermのOptionsボタンを押して、接続されたボードのシリアルポートを選び、Connectボタンで接続し、入力画面で1回リターンキーを叩くとREPLの画面になります。
※ シリアルポートはWindowsならCOM1、Macだとusbmodem11111、のようなものになると思います。1のところは多分何か他の数字でしょう。
REPLモードの画面になったら、例えば
import board import neopixel_write import digitalio pin = digitalio.DigitalInOut(board.NEOPIXEL) pin.direction = digitalio.Direction.OUTPUT pixel_off = bytearray([0, 0, 0]) neopixel_write.neopixel_write(pin, pixel_off)
みたいなコードを打ち込むとLEDが消灯すると思います。
pixel_on = bytearray([255, 255, 255]) neopixel_write.neopixel_write(pin, pixel_on)
とすれば点灯します。
プログラムファイルの実行の場合
main.pyという名前のファイルにPythonのコードを書いて、CIRCUITPYにドラッグドロップします。
例えばmain.pyがこんな内容なら点滅を繰り返します。
import time import board import neopixel_write import digitalio pin = digitalio.DigitalInOut(board.NEOPIXEL) pin.direction = digitalio.Direction.OUTPUT pixel_off = bytearray([0, 0, 0]) pixel_on = bytearray([255, 255, 255]) while True: neopixel_write.neopixel_write(pin, pixel_off) time.sleep(0.5) neopixel_write.neopixel_write(pin, pixel_on) time.sleep(0.5)
※ ファイル名はmain.pyではなくcode.pyでも良いです。
CircuitPythonをやめてボードを元に戻すには再度ブートローダーモードに入れば良いですし、Arduino IDEでスケッチをアップロードすることもできます。
CircuitPythonはまだベータということで、リファレンスの通りに動かない場合もあるかもしれません。
API Reference: https://circuitpython.readthedocs.io/en/latest/index.html
今後のCircuitPythonとその製品展開に期待しています。