Raspberry Piで点滅LEDを作る方法

Raspberry Pi Led Featured Image

Raspberry Piは単なる小型コンピュータ以上のものです。GPIOピンを使って多くのことができる強力なボードです。ここでは、Raspberry Piを使って点滅LEDを作る方法を紹介します。

目次

  • LEDが点滅する理由
  • 必要なもの
  • 点滅LEDの作り方
  • コードの動作
  • さらにLEDを点滅させよう!
  • よくある質問

こちらもお読みください: Windows経由でSSHを使ってRaspberry Piを制御する方法

LEDが点滅する理由

Raspberry Piの上部を見ると、基板から突き出た約40本の金属ピンが見つかります。Raspberry Zeroを持っている場合、ヘッダーピンをはんだ付けするための円形の穴があるかもしれません。いずれにせよ、これらはGPIOピン(汎用入出力)と呼ばれます。

Raspberry Pi Gpio Pins

各GPIOピンは、任意の時点で2つのモードのいずれかを持つように設計されています:HIGHとLOW。Raspberry Piのピンアウト仕様によれば、3.3Vで充電されたピンはHIGHまたは「論理1」とカウントされ、約2.5V未満のものはLOWまたは「論理0」とカウントされます。3.3Vの高低出力に基づくボードは「3.3Vロジック」と呼ばれます。

LEDをHIGHのピンとGNDピンの間に接続すると、基本的に完全な回路を作成しています。通電によりLEDが点灯するはずです。

Lt Spice Schematic Led Circuit

時々、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を自分で点滅させましょう。

  1. ターミナルを開き、sudo apt-get install python3-rpi.gpioと入力して、Python 3用のRPi.GPIOモジュールをインストールします。

Terminal Install Python Gpio

  1. テキストエディタを開き、次のコードを入力します:
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)
  1. どこかのフォルダに保存します。拡張子は.pyにする必要があります。私のRaspberry Piでは、見つけやすくするために「rpi-blink.py」と名付けました。

File Explorer Rpi Blink Folder

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

Lt Spice Schematic Led X1

ヒント: ピン番号を確認するには、Raspberry Piを持ち、GPIOピンが右側に来るようにします。左上のピンはピン1、右上はピン2です。ピン1の下はピン3、その右はピン4、というように続きます。

  1. 再度電源を入れて、Pythonスクリプトを実行します。ターミナルを開き、cdを使ってPythonファイルのフォルダに移動します。次のように入力します:
python3 rpi-blink.py

LEDを点滅させるために。

Terminal Run Rpi Blink X1

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

Thonny Python Ide Run Button

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

Raspberry Pi Blinking Led X1

こちらもお読みください: 知っておくべき10の便利なPythonワンライナー

コードの動作

動作させるために必要なものは2つあります:コードと回路。コードから始めて、3つの部分に分けます:

  1. インポートコマンド
  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が点灯する理由です。

Lt Spice Schematic Raspberry Pi Pin 7 On And Off

しかし、ピン7がLOWのときはどうなりますか?3.3Vは約0Vに下がります。このようにして、LEDを通過する電気が流れず、点灯しません。ピン7をスイッチのように考えることができ、回路をオンまたはオフにします。

さらにLEDを点滅させよう!

動作の仕組みがわかったので、コードを少し修正して2つのLEDを点滅させましょう。

これには、任意の色のLEDを2つと250Ωの抵抗器を2つ追加するだけで済みます。

  1. コードエディタを再度開き、次のコードを貼り付けます:
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)
  1. 保存してからRaspberry Piの電源を切ります。
  2. 回路を配線するには、各LEDを直列で抵抗器に接続し、カソード側をRaspberry Piに接続します。ピン7、ピン12、ピン37用にそれぞれ1つずつ必要です。アノード側はGNDに接続する必要があります。これらのピンの隣にはGNDピンがあります。それらはピン9、20、39である必要があります。

Lt Spice Schematic Led X3

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

Jumper Pins

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

Raspberry Pi Blinking Led X3

こちらもお読みください: 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ピンにショートさせる可能性があります。それはボードを壊すことになります。