Raspberry Piで点滅LEDを作る方法

Raspberry Piは単なる小型コンピュータ以上のものです。GPIOピンを使って多くのことができる強力なボードです。ここでは、Raspberry Piを使って点滅LEDを作る方法を紹介します。
目次
- LEDが点滅する理由
- 必要なもの
- 点滅LEDの作り方
- コードの動作
- さらにLEDを点滅させよう!
- よくある質問
こちらもお読みください: Windows経由でSSHを使ってRaspberry Piを制御する方法
LEDが点滅する理由
Raspberry Piの上部を見ると、基板から突き出た約40本の金属ピンが見つかります。Raspberry Zeroを持っている場合、ヘッダーピンをはんだ付けするための円形の穴があるかもしれません。いずれにせよ、これらはGPIOピン(汎用入出力)と呼ばれます。

各GPIOピンは、任意の時点で2つのモードのいずれかを持つように設計されています:HIGHとLOW。Raspberry Piのピンアウト仕様によれば、3.3Vで充電されたピンはHIGHまたは「論理1」とカウントされ、約2.5V未満のものはLOWまたは「論理0」とカウントされます。3.3Vの高低出力に基づくボードは「3.3Vロジック」と呼ばれます。
LEDをHIGHのピンとGNDピンの間に接続すると、基本的に完全な回路を作成しています。通電によりLEDが点灯するはずです。

時々、LEDに過剰な電流が流れると煙が出ることがあります。それを防ぐために、抵抗器を追加することができます。アノード側でもカソード側でも構いません – どちらの側でも流れる電流を減少させることができます。
こちらもお読みください: Raspberry PiでArduinoをプログラムする方法
GPIOとその他のピン
ここで明確にしておきましょう。すべての金属ピンがGPIOと見なされるわけではありません。高または低にプログラムできる場合のみGPIOと呼ばれます – これが「入出力」という用語の由来です。Raspberry Piには、電源用のピン(3.3V、5V、GND)やEEPROM(ID_SDおよびID_SC)用のピンもあります。
今回は、GNDと1つのGPIOピンを除いて、他のすべてのピンについて考える必要はありません。
GPIOピンのプログラミング
各GPIOピンに何をさせるかをどうやって指示しますか?最も基本的なレベルでは、機械語でコマンドを作成する必要があります。これは初心者には少し難しすぎるでしょう。
代わりに、Raspberry PiではPythonやC++を使用でき、これが機械語にコンパイルされます。
この特定のプロジェクトでは、使いやすいためPythonを使用します。
こちらもお読みください: Raspberry Pi 4にWindows 11をインストールする方法
必要なもの
- Pico以外の任意のRaspberry Piモデル(この例のようにRaspberry Pi 3 Model B+が望ましいですが、何でも動作します)、Raspberry Pi OSがインストールされていること。
- HDMIモニターとケーブル
- マウスとキーボード
- Raspberry Piに電源を供給するための電話の充電器
- 小さなLED
- 250Ωの抵抗器(この値に近い任意の値でも可)
- はんだ付け不要のブレッドボード
- x2のメス-オスジャンパーワイヤ(またはヘッダーハットがある場合はオス-オス)
点滅LEDの作り方
一歩ずつ進んで、1つのLEDを自分で点滅させましょう。
- ターミナルを開き、
sudo apt-get install python3-rpi.gpioと入力して、Python 3用のRPi.GPIOモジュールをインストールします。

- テキストエディタを開き、次のコードを入力します:
import RPI.GPIO as GPIO
from time import sleep
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW)
while True:
GPIO.output(7, GPIO.HIGH)
print("LED on")
sleep(1)
GPIO.output(7, GPIO.LOW)
print("LED off")
sleep(1)- どこかのフォルダに保存します。拡張子は.pyにする必要があります。私のRaspberry Piでは、見つけやすくするために「rpi-blink.py」と名付けました。

- Raspberry Piの電源を切り、すべての電源から取り外します。
- 回路を構築するために、LEDを抵抗器のいずれかの側に接続し、カソード側をピン7に、アノード側をピン9(GND)に接続します。

ヒント: ピン番号を確認するには、Raspberry Piを持ち、GPIOピンが右側に来るようにします。左上のピンはピン1、右上はピン2です。ピン1の下はピン3、その右はピン4、というように続きます。
- 再度電源を入れて、Pythonスクリプトを実行します。ターミナルを開き、
cdを使ってPythonファイルのフォルダに移動します。次のように入力します:
python3 rpi-blink.pyLEDを点滅させるために。

代替案: Thonny Python IDEを使用している場合は、「現在のスクリプトを実行」ボタンをクリックして、IDEから直接実行します。

- 停止するには、ターミナル内でCtrl + Cを押します。しかし、Thonny Python IDEを使用している場合は、エディタを閉じるだけで済みます。

こちらもお読みください: 知っておくべき10の便利なPythonワンライナー
コードの動作
動作させるために必要なものは2つあります:コードと回路。コードから始めて、3つの部分に分けます:
- インポートコマンド
- セットアップコマンド
- ループコマンド
実際には、コードを小さな関数として考え、それらをグループ化して大きな関数を作るのが良いでしょう。
インポートコマンド
Pythonは通常、GPIOピンをプログラムするのをこれほど簡単にはしてくれません。裏でたくさんのことが進行しています。良いニュースは、これらの厄介なことを処理するコードをインポートできることです。
1行目と2行目を見てみましょう:
import RPI.GPIO as GPIO
from time import sleepこれらは「Pythonモジュール」と呼ばれるものからコードをインポートするための2行です。
import RPI.GPIO as GPIOは、RPI.GPIOモジュールの内容をインポートし、GPIOキーワードを使用してRPI.GPIOに関連する関数を呼び出すことを可能にします。
一方、from time import sleepは、Pythonの組み込み時間モジュールからsleep()関数をインポートします。これにより、次のコード行を指定された秒数だけ遅延させることができます。
セットアップコマンド
一部のコードは「セットアップ」または定義される必要があります。他のコードが複雑なロジックを実行するために使用されるからです。これらをセットアップコマンドと呼びます。
インポートコマンドとは異なり、セットアップコマンドは外部モジュールからコードを「インポート」しません。すでにインポートしたモジュールからインポートします。
例として、GPIO.setwarnings(False)は、以前にGPIOとして定義されたRPI.GPIOモジュールから.setwarnings()関数をインポートします。この関数は、コードを実行するときにトリガー警告を停止します。デフォルトではTrueに設定されています。
他の2つを説明するために、GPIO.setmode(GPIO.BOARD)を続けます。これは、使用するピンアウトの種類をRPI.GPIOに伝えます。2つのタイプがあります:BOARDとBCM。BOARDピンアウトは、番号に基づいてピンを選択できます。一方、BCMピンアウトは、Broadcom SOCチャネルの指定に基づいています。簡潔に言うと、BOARDはどのRaspberry Piモデルを使用しても常に同じなので、使いやすいです。一方、BCMはモデルごとに異なることが多いです。
最後に、GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW)があり、これは.setup()関数を使用して、3つのことを尋ねます:ピン番号、その指定、および初期値。ここで使用しているピン番号はピン7です。出力ピンに設定し、最初はLOWにする必要があります。これがないと、Raspberry Piはピン7で何をすべきかを決して知ることができません。
ループコマンド
ここが面白い部分です。ループコマンドは、Raspberry Piに何かをさせることができます。このループはwhile True:で始まり、次のコード行を永遠にループします。
ループ内には3つの関数がありました:GPIO.output()、print()、およびsleep()。
GPIO.output()は出力ピンを取り、HIGHまたはLOWに設定します。Raspberry Piで使用するピンを変更したい場合は、7をお好みのピン番号に変更する必要があります。print()はコンソールに何かを印刷します。文字列、数値、または前の2つを含む変数を受け取ります。sleep()は、プログラム全体を指定された秒数だけ一時停止させます。1未満の数を使用して、1秒未満の時間を一時停止させます。
回路
コードの動作がわかったので、回路を見てみましょう。コードはピン7をGNDに接続することで回路を作ります。ピン7がHIGHのとき、3.3Vが抵抗器とLEDを通過し、GNDに入ります。これが完全な回路となり、LEDが点灯する理由です。

しかし、ピン7がLOWのときはどうなりますか?3.3Vは約0Vに下がります。このようにして、LEDを通過する電気が流れず、点灯しません。ピン7をスイッチのように考えることができ、回路をオンまたはオフにします。
さらにLEDを点滅させよう!
動作の仕組みがわかったので、コードを少し修正して2つのLEDを点滅させましょう。
これには、任意の色のLEDを2つと250Ωの抵抗器を2つ追加するだけで済みます。
- コードエディタを再度開き、次のコードを貼り付けます:
import RPI.GPIO as GPIO
from time import sleep
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(12, GPIO.OUT, initial=GPIO.HIGH)
GPIO.setup(37, GPIO.OUT, initial=GPIO.LOW)
while True:
GPIO.output(7, GPIO.HIGH)
GPIO.output(12, GPIO.LOW)
print("LED on @ pin 7")
print("LED off @ pin 12")
sleep(1)
GPIO.output(7, GPIO.LOW)
GPIO.output(12, GPIO.HIGH)
print("LED off @ pin 7")
print("LED on @ pin 12")
sleep(1)
if x == 1:
GPIO.output(37, GPIO.HIGH)
print("LED on @ pin 37")
x = 0
elif x == 0:
GPIO.output(37, GPIO.LOW)
print("LED off @ pin 37")
x = 1
else:
print("Logic Error")
sleep(1)- 保存してからRaspberry Piの電源を切ります。
- 回路を配線するには、各LEDを直列で抵抗器に接続し、カソード側をRaspberry Piに接続します。ピン7、ピン12、ピン37用にそれぞれ1つずつ必要です。アノード側はGNDに接続する必要があります。これらのピンの隣にはGNDピンがあります。それらはピン9、20、39である必要があります。

ヒント: メス-オスジャンパーワイヤが不足している場合は、メス-メスジャンパーワイヤをメス-オスに接続して、長いメス-オスジャンパーワイヤを形成できます。

- 完了したら、Raspberry Piの電源を入れ、ステップ6を繰り返してPythonスクリプトを起動します。

こちらもお読みください: Pythonを利用して基本的なLinuxシステム管理とネットワーキングタスクを行う方法
よくある質問
スクリプトを停止するとLEDが点灯したままになるのはなぜですか?
Raspberry PiがPythonスクリプトを読み込むと、コマンドを実行する前に行を読み取ります。おそらく、GPIO.output(7, GPIO.HIGH)の行を読み取った直後に停止したため、最初にピンをLOWに戻すことができませんでした。このままにしておくことができます。次回再起動するとLOWに戻ります。あるいは、実行時にピンをLOWにする別のPythonスクリプトを作成することもできます。
LEDを正しいピンに置いたのに全く点灯しません。なぜですか?
考えられる理由は2つあります:LEDが壊れているか、カソードを反対側に置いたかです。まずLEDのピンをひっくり返してみてください。
LEDを逆向きに置くのは安全ですか?
はい。逆向きに置いても大丈夫で、電流は通過しません。これはダイオードの特性であり、光を放出するダイオードでも同様です – 一方の側では電気が通過し、もう一方では通過しません。
Raspberry Piの電源が入っている間にLEDを再配置するのは安全ですか?
LEDを逆向きに回転させるだけなら問題ありませんが、LEDをあちこちに配置する場合、5VピンをGPIOピンにショートさせる可能性があります。それはボードを壊すことになります。