CircuitPythonを試してみよう

投稿者:

AdafruitのCircuitPythonFeather 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を試すのに最適だと思います。

この記事で使ったもの

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とその製品展開に期待しています。