CircuitPythonコードの作成と編集

AdafruitのLearning Guideの非公式日本語訳です。
英語独特の言い回しを可能な限り日本語的な表現に直していますが、不自然に感じる部分も残っていますことを何卒ご容赦ください。

CircuitPythonで最も優れている点の一つは、コードの実行がとても簡単なことです。このセクションでは、最初のCircuitPythonプログラムを作成して編集する方法を説明します。

コードを作成して編集するにはエディタが必要です。エディタにはたくさんの選択肢があります。
AdafruitのオススメはMu Editorです。 これはCircuitPython用に設計されていて、シンプルで使いやすく、シリアルコンソールも内蔵されています。

Muを使っていない、あるいは使えない場合は、Windowsではメモ帳、Macではテキストエディタ、Linuxではgeditなどの基本的なテキストエディタがあります。しかし、これらのエディタの多くは、編集したファイルの変更をすぐに書き戻してくれません。これはCircuitPythonを使っているときに問題を起こす可能性があります。
以下のコードの編集セクションを参照してください。Muを使っていない方でこのセクションを飛ばしたい場合は、Windowsでは “Eject “か “Safe Remove “を、Linuxでは “sync “をファイルを書き込んだ後に行うようにしてください。

コードの作成

エディタを開き、新しいファイルを作成します。Muを使用している場合は、左上の「新規作成」ボタンをクリックします。

試しに以下のコードをコピーしてエディタに貼り付けてください。

import board
import digitalio
import time
 
led = digitalio.DigitalInOut(board.D13)
led.direction = digitalio.Direction.OUTPUT
 
while True:
    led.value = True
    time.sleep(0.5)
    led.value = False
    time.sleep(0.5)

Adafruit CLUEを使用している場合は、以下のようにDigitalInIoutにboard.D17を使用するようにコードを編集する必要があります。
残りのコードは同じままです。
led = 行を以下のように変更します。

led = digitalio.DigitalInOut(board.D17)

while True: 行の下の次の 4 行はインデントのためにスペースがありますが、インデントの量は全く同じです。他のすべての行はテキストの前にスペースを入れていません。


このファイルをcode.pyとしてCIRCUITPYドライブに保存してください。

各ボード上に小さな赤いLEDがあります。これでLEDが1秒に1回点滅しているはずです。

おめでとうございます!初めてのCircuitPythonコードの実行に成功しましたね。

コードの編集

コードを編集するには、CIRCUITPYドライブ上のcode.pyファイルをエディタで開きます。
コードに必要な変更を加えます。ファイルを保存します。これで完了です。

ファイルの保存が終わるとすぐに、コードの変更が実行されます。

続ける前に一つだけ警告があります…

ファイルの保存中はリセットを押したり電源を抜かないでください!

ボード上のCircuitPythonコードはファイルが変更されたり書き込まれたりしたときにそれを検知し、自動的にコードを再起動します。これにより、保存したファイルが再実行されるので、コーディングがとても速くなります。

ただし、ファイルの保存が完了するまで待ってから、ボードのプラグを抜いたりリセットしてください。
Windowsでは、いくつかのエディタを使用している場合、これには90秒かかることがありますが、Linuxでは、テキストエディタがファイルを完全に保存しないため、完了するまでに30秒かかることがあります。Mac OSではこの遅延はないようです。

これは本当に注意が必要です。
コンピュータがボードへのファイル書き込みを終了する前に、ボードのプラグを抜いたり、リセットしたりすると、ドライブを破損させてしまう可能性があります。そうなると、書いたコードを失ってしまう可能性があるので、定期的にパソコンにバックアップを取っておくことが大切です。

こうした問題を回避する方法がいくつかあります。

  1. 保存時にファイルを完全に書き出してくれるエディタを使う。

おすすめのエディタ

mu はすべての変更を安全に書き出してくれるエディタです (私たちの推奨エディタでもあります!)。
emacsもまた、保存時にファイルを完全に書き出すエディタです。
Sublime Textはすべての変更を安全に書き込みます。
Visual Studioのコードは、すべての変更を安全に書き込むように表示されます。
Linux上のgeditは、すべての変更を安全に書き込めるようです。
Python 3.8.1以降のIDLEで、変更した内容をすぐにすべて書き込むように修正

特定の設定やアドオンを使用している場合にのみお勧めできるエディタ

vim / vi は、すべての変更を安全に書き込みます。ただし、swapfile (.swpファイル:編集した内容の一時的な記録)をCIRCUITPYに書き込まないようにvimを設定してください。
vim を vim -n で実行し、no swapfile オプションを設定するか、ディレクトリオプションを設定してスワップファイルを他の場所に書き込むようにしてください。そうしないと、swapfile の書き込みがプログラムの再起動の引き金になってします。
PyCharm IDE は、Settings->System Settings->Synchronization で “Safe Write” をオンにしておけば安全です (デフォルトでは true)。
Atom を使っている場合は、fsync-on-save パッケージをインストールして、CIRCUITPY 上のファイルへのすべての変更を常に書き出すようにしてください。
SlickEdit は、ディスクをフラッシュするマクロを追加した場合にのみ動作します。

非推奨エディタ

メモ帳(Windowsのデフォルトのエディタ)やメモ帳++は書き込みに時間がかかるので、上記のエディタをお勧めします。メモ帳を使用している場合は、必ずドライブをイジェクトしてください(下記参照)
Python 3.8.0 またはそれ以前のバージョンの IDLE は、変更をすぐに強制的に出力しません。
nano (Linux) は変更を強制的に出力しません。
geany (Linux) は変更を強制的に出力しません。
この他のエディタについてはテストしていないので、ぜひおすすめのエディタを使ってください。

  1. 書き込み後にドライブをイジェクトまたは同期する

推奨されていないエディタを使用している場合でも、すべてが失われるわけではありません。まだ動作させることはできます。

Windowsでは、CIRCUITPYドライブをイジェクトまたはセーフ・リムーブすることができます。実際にはイジェクトされませんが、OSが強制的にファイルをディスクに保存します。
Linuxの場合は、ターミナルでsyncコマンドを使って強制的にディスクに書き込みます。

なぜかCIRCUITPYドライブが表示されません!
心配しないでください!ドライブの破損は世界(またはあなたのボード!)の終わりではありません。
このような場合は、各ボードのガイドのトラブルシューティングのページに記載されている手順に従ってください。

コードの編集に戻ります…

さて、ボードに追加したプログラムを編集してみましょう。エディタでcode.pyファイルを開きます。簡単な変更をします。最初の0.5を0.1に変更します。コードは次のようになります。

import board
import digitalio
import time
 
led = digitalio.DigitalInOut(board.D13)
led.direction = digitalio.Direction.OUTPUT
 
while True:
    led.value = True
    time.sleep(0.1)
    led.value = False
    time.sleep(0.5)

残りのコードはそのままにしておきます。ファイルを保存してください。ボード上のLEDがどうなるかわかりますか?何かが変わりましたね! 理由がわかりますか?さあ、試してみましょう!

初めてのCircuitPythonプログラムの開発

編集しているコードの意味を一つずつ見ていきましょう。

import board
import digitalio
import time
 
led = digitalio.DigitalInOut(board.D13)
led.direction = digitalio.Direction.OUTPUT
 
while True:
    led.value = True
    time.sleep(0.5)
    led.value = False
    time.sleep(0.5)

ライブラリをインポート

あなたが実行するCircuitPythonプログラムは、動作するために多くの情報を必要とします。CircuitPythonがとてもシンプルに使える理由は、その情報のほとんどが他のファイルに保存されていて、バックグラウンドで動作するからです。これらのファイルはライブラリと呼ばれています。これらのファイルのいくつかはCircuitPythonに組み込まれています。その他のファイルはCIRCUITPYドライブのlibフォルダに保存されます。

import board
import digitalio
import time

import文は、コードの中で特定のライブラリを使用することをボードに伝えます。この例では、board、digitalio、timeの3つのライブラリをインポートしました。これら3つのライブラリはすべてCircuitPythonに組み込まれているので、別のファイルは必要ありません。
このことが、この例を素晴らしい最初の例にしている理由の一つです。
boardはボード上のハードウェアへのアクセスを提供し、digitalioは入出力としてハードウェアへのアクセスを提供し、timeは’スリープ’してプログラムの実行を止める機能を提供します。

LEDの設定

次の2行は、LEDを使用するためのコードを設定します。

led = digitalio.DigitalInOut(board.D13)
led.direction = digitalio.Direction.OUTPUT

ボードは赤色LEDをD13と認識しています(Adafruit CLUEの場合はD17)。そのピンを初期化して出力用に設定します ここで led を設定することで、この後のコードの中ですべてをタイプし直す必要がなくなります。

ループ

3つ目のセクションはwhile文から始まります。
while True:は基本的に「次のことを永遠に行う:」という意味です。 while True:はループを作ります。コードは、条件が “true “である(vs. false)場合に “while “ループし、Trueは決してFalseではないので、コードは永遠にループします。while True: の下でインデントされているコードはすべてループの「内部」にあります。

ループの内部には、4つの項目があります。

while True:
    led.value = True
    time.sleep(0.5)
    led.value = False
    time.sleep(0.5)

まず、led.value = Trueとします。この行はLEDを点灯させることを指示しています。
次の行では、time.sleep(0.5)を実行しています。この行はCircuitPythonに0.5秒間コードを一時停止させています。LEDをオンにしてからオフにするまでの間なので、0.5秒間はLEDが点灯していることになります。

次の2行も同様です。 led.value = FalseはLEDを消灯させ、time.sleep(0.5)はCircuitPythonに0.5秒間の一時停止を指示しています。LEDが消灯してから点灯するまでの間に発生するので、0.5秒間はLEDも消灯します。

その後、ループは再び始まり、コードが実行されている間はこのループを続けます。

最初の 0.5 を 0.1 に変えたとき、コードが LED をつけたままにする時間の量を減らしました。だから、消灯する前に本当にすぐに点滅します!

よくできました!
これでCircuitPythonプログラムのコードを編集できました!

もしループがなかった場合どうなるでしょう?
ループがない場合、コードは最後まで実行して終了します。 この「終了」はハードウェアの状態もリセットするので、このような単純なプログラムでは予期せぬ動作をすることがあります。
これは、REPL経由でコマンドを実行するのとは異なる動作です。
ですから、単純なプログラムを書いていてうまくいかないようであれば、プログラムが終了しないように最後にループを追加する必要があるかもしれません。 最も単純なループは次のようになります。 while True: pass Ctrl + Cを押すことでループを終了することができます。

さらに変更

さらに続けてみましょう。
2つ目の0.5を0.1に変更するとこんな感じになります。

while True:
    led.value = True
    time.sleep(0.1)
    led.value = False
    time.sleep(0.1)

今度は本当に速く点滅していますね。
コードがLEDのオンとオフの両方の時間を減少させたわけです。

今度は両方の数字を0.1から1に増やしてみてください。 LEDのオンとオフの時間を増やしたので、LEDはもっとゆっくり点滅します。

よくできました!

これで別のコードの例で何が起こるかを確認したり編集したりする準備が整いました!
今回は簡単な変更でしたが、大きな変更を行う場合も同じプロセスで編集を行います。
希望する変更を行い、それを保存し、結果を確認する。本当にそれだけです!

プログラムファイルの名前の付け方

CircuitPythonはボード上のコードファイルを探して実行します。
コードのファイル名にはcode.txtcode.pymain.txtmain.pyの4つのオプションがあります。CircuitPythonはこれらのファイルを順に探し、最初に見つけたファイルを実行してくれます。
code.pyをコードファイルとして使用することをお勧めしますが、他のオプションも存在することを知っておくことが重要です。作業中にプログラムが更新されないようであれば、今作業しているコードファイルの代わりに別のコードファイルを作成していないか確認してください。

原文: https://learn.adafruit.com/adafruit-clue/creating-and-editing-code

Follow me on Twitter