CircuitPythonは、Adafruit製のマイクロコントローラボードなどの低価格ボードを使った実験を簡素化するために設計されたプログラミング言語です。CircuitPythonはRaspberry Piでも使用できます。ここでは2つのプロジェクトを通して、Raspberry PiでCircuitPythonを使用する方法を紹介します。最初のプロジェクトはLEDです。LEDの点滅を制御することで、コンポーネント間の通信と制御の仕組みを理解することができます。2つ目のプロジェクトでは、ジャンパー線を介してGPIOに接続された追加コンポーネントをStemma QTコネクタで使用します。
Raspberry Pi上のCircuitPythonは、AdafruitのQT Py RP2040、Feather RP2040、PimoroniのKeybow 2040、そしてRaspberry Pi Picoなどの他のデバイスにも移植可能です。そのため、ここで学んだスキルは、CircuitPythonを実行できるあらゆるボードに適用できます。
このプロジェクトに必要なもの
- Raspberry Piのどのモデルでも使用できますが、最良の結果を得るには3/4インチの
- 最新のRaspberry Pi OS
プロジェクト1
- ブレッドボード
- 導かれた
- 330 オーム抵抗器(オレンジ - オレンジ - 茶 - 金は 330 オーム抵抗器のカラー コードです)
- オス-メスのジャンパーワイヤー2本
プロジェクト2
- Adafruit MPR121 静電容量式タッチセンサー
- メス-メスのジャンパーワイヤー4本
- ワニ口クリップ2個
- 果物2個
- StemmaQTからブレッドボードへのリード
CircuitPythonのインストール
1. ターミナルを開いて更新し、 Raspberry Pi のソフトウェアをアップグレードします。
$ sudo apt update
$ sudo apt upgrade
2. Python パッケージのインストールを管理するための Python ツールキットである setuptools をアップグレードします。
$ sudo pip3 install --upgrade setuptools
3.ホームディレクトリに移動し、pip3を使ってAdafruitのPython Shellツールをインストールします。コマンド「cd ~」はホームディレクトリの短縮形です。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
cd ~
$ sudo pip3 install --upgrade adafruit-python-shell
4. Adafruitのインストールスクリプトをダウンロードし、スクリプトを実行してCircuitPythonを設定します。インストール中にPython 2を使用しているというメッセージが表示され、アップデートを促すメッセージが表示される場合がありますが、「はい」と答えても問題ありません。
$ wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/raspi-blinka.py
$ sudo python3 raspi-blinka.py
LEDを点滅させる
新しい電子工作を始める際、まず最初に試すべきは、LEDの点滅です。LEDの点滅は、コードが正しく動作し、配線が適切であることを確認するのに役立ちます。このプロジェクトでは、2本のジャンパー線と330Ωの抵抗器を介して、LEDをGPIO 17に接続します。配線は以下のようになります。
1. Thonnyエディタを開き、3つのコードライブラリをインポートします。1つ目は「time」で、これはコードの実行速度を制御するために使用します。次の2つ、「board」と「digitalio」はCircuitPython固有のライブラリです。boardはGPIOとのやり取りを可能にし、digitalioはGPIOピンの状態を制御するために使用します。
import time
import board
import digitalio
2. オブジェクト led を使用して、CircuitPython にどの GPIO ピンを使用しているか、そしてそれが出力であることを伝えます。LED は GPIO 17 に接続されており、CircuitPython では board.D17 です。
led = digitalio.DigitalInOut(board.D17)
led.direction = digitalio.Direction.OUTPUT
3. 0.1 秒ごとに LED をオン (led.value = True) およびオフ (led.value = False) にする while True ループを作成します。
while True: led.value = True time.sleep(0.1) led.value = False time.sleep(0.1)
コードは次のようになります
import time
import board
import digitalio led = digitalio.DigitalInOut(board.D17)
led.direction = digitalio.Direction.OUTPUT while True: led.value = True time.sleep(0.1) led.value = False time.sleep(0.1)
コードを保存し、「実行」をクリックして実行してください。LEDが0.1秒ごとに点滅するはずです。テストが完了したら、プロジェクト2に進みます。
CircuitPythonで静電容量式タッチセンサーを使う
次のプロジェクトは少し機材が必要ですが、LEDの制御ほど難しくはありません。このプロジェクトでは、MPR121静電容量式タッチセンサーとワニ口クリップをいくつか使用し、導電性のある物体を入力として使用できるようにします。
MPR121はStemma QTコネクタを備えたマイクロコントローラーボード向けに設計されていますが、少し工夫すればRaspberry Piでも動作させることができます。MPR121の定番サンプルプロジェクトはバナナピアノで、バナナに触れると音が鳴ります。この簡易版では、果物を2つ用意し、それぞれが前のプロジェクトのLEDを点灯・消灯させます。
MPR121タッチセンサーを使用するには、追加のソフトウェアをインストールする必要があります。ターミナルを開き、次のコマンドを入力してください。
$ sudo pip3 install adafruit-circuitpython-mpr121
MPR121ボードはStemmaQTコネクタを採用しています。Raspberry Piで使用するには、4本のジャンパーワイヤーを備えたブレークアウトリードを使用する必要があります。ジャンパーワイヤーは以下のように色分けされています。赤は3V、黒はGND、黄はSCL(GPIO3)、青はSDA(GPIO2)です。メス-メスのジャンパーワイヤーを使用して、MPR121をRaspberry Piに接続してください。
ワニ口クリップを使用して、バナナを MPR121 の入力 0 に接続し、もう 1 つのバナナを入力 1 に接続します。導電性の物体であれば何でも使用できますが、アルミホイルとカードを使用すると、安価で簡単に楽しいタッチ インターフェイスを作成できます。
Thonny を開いて新しいファイルを作成します。
1. 3つのコードライブラリをインポートします。1つ目は「time」で、これはコードの実行速度を制御するために使用します。次の2つ、「board」と「digitalio」はCircuitPython固有のライブラリです。boardはGPIOとのやり取りを可能にし、digitalioはGPIOピンの状態を制御するために使用します。
import time
import board
import digitalio
2. MPR121で使用するために2つの追加ライブラリをインポートします。1つ目の「busio」は、MPR121が通信に使用するI2Cインターフェースにコードからアクセスできるようにします。2つ目のライブラリは、コード内でMPR121の使用を明確に可能にします。
import busio
import adafruit_mpr121
3. オブジェクト led を使用して、CircuitPython に使用している GPIO ピンとそれが出力であることを伝えます。LED は GPIO 17 に接続されており、CircuitPython では board.D17 です。
led = digitalio.DigitalInOut(board.D17)
led.direction = digitalio.Direction.OUTPUT
4. I2C経由でMPR121に接続するために使用するGPIOピンを含むオブジェクト i2c を作成します。そして、MPR121に接続します。CircuitPythonには、I2Cで使用されるSCL(クロック)ピンとSDA(データ)ピンの参照が2つあります。これらの参照は、デバイスに関係なくI2Cのデフォルトのピンを使用します。したがって、Raspberry Pi、QT Py RP2040、Raspberry Pi Picoでこれらの参照を使用すると、いずれもデフォルトのI2Cピンが使用されます。
i2c = busio.I2C(board.SCL, board.SDA)
mpr121 = adafruit_mpr121.MPR121(i2c)
5.バナナに接続された入力 0 の状態を継続的にチェックするループを作成します。バナナが接続されている場合、関数はTrueを返し、Pythonシェルにメッセージを出力してLEDを点灯させるコード(led.value = True)が実行されます。
while True: if mpr121.is_touched(0) == True: print("This banana turns light on") led.value = True
6. 2つ目のチェックを入れて、LEDを消灯するために使用するバナナプラグに接続された入力1の状態を読み取ります。このチェックが押されると、関数はTrueを返し、Pythonシェルにメッセージを出力してLEDを消灯するコードをトリガーします。
elif mpr121.is_touched(1) == True: print("This banana turns the light off") led.value = False time.sleep(0.5)
コードが完成したら、ファイルをtouch-test.pyとして保存し、「実行」をクリックしてコードを実行します。バナナを押してLEDの点灯と消灯を切り替えてみましょう。
コードは次のようになります
import time
import board
import digitalio
import busio
import adafruit_mpr121 led = digitalio.DigitalInOut(board.D17)
led.direction = digitalio.Direction.OUTPUT
i2c = busio.I2C(board.SCL, board.SDA)
mpr121 = adafruit_mpr121.MPR121(i2c) while True: if mpr121.is_touched(0) == True: print("This banana turns light on") led.value = True elif mpr121.is_touched(1) == True: print("This banana turns the light off") led.value = False time.sleep(0.5)
CircuitPythonは、この言語を使い、コンポーネント用のライブラリを作成している大規模なメーカーコミュニティのおかげで、プロジェクトを始める最も簡単な方法を提供します。CircuitPythonは200以上のボードで利用可能であり、2018年に登場したばかりにもかかわらず、多くのプロジェクトの基盤となっています。
この記事はもともとLinux Formatマガジンに掲載されたものです。