header image
  • プログラム・ソフト
  • 物理学・工学
  • ガジェット
  • 当サイトについて
  • お問い合わせ
  • プログラム・ソフト
  • 物理学・工学
  • ガジェット
  • 当サイトについて
  • お問い合わせ
  • HOME
  • ガジェット
  • ラズパイのGPIOの基本・ピン配置と制御方法【Linuxコマンド、Python】

ラズパイのGPIOの基本・ピン配置と制御方法【Linuxコマンド、Python】

投稿日:2022年8月26日 更新日:2022年11月23日

  • Tags: [Python], [Raspberry Pi], [使い方],

サムネイル

シングルボードコンピューターとして有名なRaspberry Pi(ラズパイ)は、
GPIO (General Purpose Input/Output) と呼ばれる
多数のピンの外部入出力端子がついているのが特徴です。
GPIOを使うことで、電子回路とプログラミングを組み合わせられるので、
ものづくりの幅が広がります。

本記事では下記のような、GPIOを使う上で最低限知っておきたい内容をまとめました。

  • ラズパイを破壊しないための注意点
  • ピン配置
  • Linuxコマンド / ShellまたはPythonを使った制御方法

なお、本記事はRaspberry Pi 3 Model Bを基に記述していますので、
他のラズパイの場合、細かい部分で差異があるかもしれません。

  • GPIOについて
    • 基本的な注意点
      • 電流値
      • 入力電圧
      • 回路接続の注意点:スイッチとプルダウン/プルアップ
        • 注意点1 : スイッチOff時の電位不安定
        • 注意点2 : スイッチOn時のショート
        • 注意点3 : モード切り替わり時のショート
        • 注意点4 : 内部プルダウン / プルアップ抵抗と電流制限抵抗の併用
    • GPIOのピン配置と特徴
      • プルダウン / プルアップ抵抗
      • ハードウェアPWM
    • GPIOでのシリアル通信
      • UART
      • I2C
      • SPI (CSI)
  • GPIOの操作
    • ピン配置の確認
    • 方法1: (Shell) raspi-gpioコマンド
    • 方法2: (Shell) echo/catコマンド
    • 方法3: (Shell) WiringPiライブラリ
    • 方法4-1: (Shell) pigpioライブラリ
    • 方法4-2: (Python) pigpioライブラリ
    • 方法5: (Python) RPi.GPIOライブラリ
  • まとめ

GPIOについて

ラズパイのGPIOのピンは、大まかに下記の2つに分けることができます。

  • 電源 (5V, 3.3V) 、GND (0V) :一定電圧を供給する
  • GPIOx : 入力電圧読み取り(入力モード)/ 出力電圧の切り替え(出力モード) ができる

GPIOxピン (x=0, 1, …) には2つのモードがあり、
外部から入力された電圧をラズパイ上で読み取る入力モードと、ラズパイ上で電圧の出力制御ができる出力モードを使用できます。
GPIOにはたくさんのピンがついており、ピンの位置はGPIOx (GPIO0, GPIO1, …) のようにGPIO番号(BCM番号)を指定する方法と、
物理的な配置に基づいたボード番号を指定する方法があります。
前者のGPIO番号を指定する方法が一般的で、本記事でもこちらを使っていきます。

基本的な注意点

ラズパイを壊さないための基本的な注意事項を列挙しておきます。

電流値

GPIOに大電流を流すとラズパイが壊れることがあります。

  • 1ピンあたりの最大電流値 : 16mA (10mA程度を目安に)
  • 全ピンの合計の最大電流値 : 50mA (35mA程度を目安に)

GPIOに回路接続する場合、上記よりも電流を流さないようにしなくてはいけません。
スペック上は、1ピンあたり16mA、合計で50mA以下となっておりますが、
この値ギリギリで回路設計をせず、もう少し電流値を抑えた構成にするのが望ましいです。

入力電圧

入力モードに設定したGPIOのピンには、電圧を印加することになります。
このとき、入力電圧が大きすぎるとラズパイが破壊する可能性があります。
また入力電圧が3.3VのときにHigh、0VのときにLowとして検出されますが、
中途半端な値のときだとご認識する可能性があります。

  • 3.6V以上 : 破損
  • 2.3 ~ 3.5V : High (1)
  • 0.9 ~ 2.2V : 不定
  • 0 ~ 0.8V : Low (0)

回路接続の注意点:スイッチとプルダウン/プルアップ

回路を作るとき、とくにスイッチを使ってGPIO(入力モード)と接続するときに下記について注意が必要になります。

  • 注意点1 : スイッチを切り替えても電位が不安定になっていないか
    • → プルダウン / プルアップ抵抗を接続する
  • 注意点2 : スイッチを切り替えてもショートしないか
    • → プルダウン / プルアップ抵抗を接続する
  • 注意点3 : GPIOピンのモードが切り替わってもショートしないか
    • → GPIOピンに電流制限抵抗を接続する

ショートや電位不定を避けるためにプルダウン / プルアップ抵抗や電流制限抵抗が使われます。
プルダウン / プルアップについては、GPIO内部でもソフトウェア的に切り替えることができます (GPIO2, 3以外) が、
この機能と電流制限抵抗を組み合わせるときには注意が必要で、
ピンに電圧入力しても予期しない値を検出することがあります。

  • 注意点4 : "内部"プルダウン / プルアップ抵抗と電流制限抵抗を併用しているか
    • → 2つの抵抗で分圧され、想定外の電圧が入力されてないか抵抗値を確認する

これらの4つの注意事項について、詳しく述べていきたいと思います。

注意点1 : スイッチOff時の電位不安定

プルダウンによりGPIOピンの電位不安定を回避
Fig.1. プルダウンによりGPIOピンの電位不安定を回避

スイッチOFF状態のとき、GPIOのピンが電気的に浮いてしまい入力電圧が定まっていない場合(Fig.1, 右)、
入力値が不安定になり意図しない値を読み取る可能性があります。

これに対しては、プルダウンまたはプルアップ抵抗を接続して、一定の電位と接続することで、
スイッチON、OFFどちらの状態でも電気的に浮かなくなる
ため、不安定になるのを避けることができます (Fig.1, 左)。
プルダウン / プルアップ抵抗には、1k ~ 100k$\Omega$ がよく使われます。

注意点2 : スイッチOn時のショート

プルダウン抵抗によりショートを回避
Fig.2. プルダウン抵抗によりショートを回避

プルダウン / プルアップするときに抵抗なしで接続すると、スイッチOnにした瞬間ショートします (Fig.2, 右)。
これを避けるためにも、抵抗を入れてプルダウン / プルアップする必要があります。

注意点3 : モード切り替わり時のショート

電流制限抵抗により、モード切り替わり時のショートを回避
Fig.3. 電流制限抵抗により、モード切り替わり時のショートを回避

GPIOピンのモードが切り替わったときについても考慮する必要があります。
とくに、ラズパイを再起動したとき(モードが初初期されたとき)に問題ないか、
意図しないところでモードを切り替えていないか、注意が必要です。
何も考えていないと、下記のようなことが起こる可能性があります。

GPIO入力モードピンに電圧入力しているとき、出力モードに切り替わった場合を想定します。
このときLow出力になっていると、入力している電源とGPIOピン間でショートすることになります (Fig.3 上)。

これを避けるためには、GPIOピンとの間に直列で抵抗(電流制限抵抗)を入れます (Fig.3, 下)。
するとGPIOピンのモードが切り替わっても、出力モードの出力 (High/Low) を切り替えてもショートしなくなります。

注意点4 : 内部プルダウン / プルアップ抵抗と電流制限抵抗の併用

回路図(プルダウン抵抗による入力値エラー)
Fig.4. 回路図(プルダウン抵抗による入力値エラー)

プルダウン / プルアップ抵抗はソフトウェア上から設定することで、ラズパイ内部にも設定できます(約50k$\Omega$)。
(ただしGPIO2, 3のみは、固定でプルアップ抵抗 (1.8k$\Omega$) が接続されており、切り替えることはできません。)
このラズパイ内部のプルダウン / プルアップ抵抗を使うときは、電流制限抵抗に注意をする必要がでてきます。

たとえばFig.4のように、GPIOピンにプルダウン抵抗を設定し、かつ100k$\Omega$の電流制限抵抗を接続したとします。
すると3.3VをGPIOピンに入力しているつもりが、プルダウン抵抗と電流制限抵抗で電圧が分圧されることになり、
結果として入力電圧が1.1Vになり、"High"を検出できない
ということが起こりえます。
ラズパイ内部のプルダウン / プルアップ抵抗を設定する場合には、このようなことに留意する必要があります。

GPIOのピン配置と特徴

ハード:
通信 :

GPIOのピン指定には、物理的な位置を基に割り振られたピン番号(ボード番号)を指定する方法と、
"GPIO 20"のようにGPIO番号(BCM番号)を指定する方法があります。
ターミナル(端末)で位置を確認するときにはpinoutコマンドが便利です。

プルダウン / プルアップ抵抗

GPIOには、ソフトウェア的に約50k$\Omega$ のプルダウン / プルアップ抵抗をラズパイ内部に設定できます。
ただしGPIO 2、3のみ固定で1.8k$\Omega$ のプルアップ抵抗が接続されています。

ハードウェアPWM

GPIOピンは出力モードのときに、Low (0V) とHigh (3.3V) の電圧を切り替えられます。
LowとHighを規則的にスイッチングすることで電力制御をするPWM( Pulse Width Modulation) を行えますが、
より正確な時間幅のパルス出力のできるハードウェアPWMが使用できるGPIOのピンが存在します。

  • PWM channel0 : GPIO12, 18
  • PWM channel1 : GPIO13, 19

同channnelのピンをそれぞれ独立制御してPWMを使用することはできません。
また音声出力端子を使用するときにはハードウェアPWMの機能を使うことができません。

GPIOでのシリアル通信

GPIOには、他のデバイスとシリアル通信できる機能があります。
UART, I2C, SPIの3つの通信方式があり、通信速度の速い方式ほど配線の数が多い傾向にあります。
また同時に通信できるデバイス数にも違いがあります。

名称通信速度配線デバイス間接続
UARTやや低速データデバイス(単体)⇔ デバイス(単体)
I2Cやや高速データ、クロックマスター(単体)⇔ スレーブ(複数)
SPI高速データ、クロック、チップセレクトマスター(単体)⇔ スレーブ(複数)

UART

UART通信の配線
Fig.5. UART通信の配線

UART通信方式では、1対1のデバイスで接続します。
配線は通信用と受信用の信号線の2本になり、クロック用の線は存在しません。

機能pin
TXDGPIO 2
RXDGPIO 3
  • TXD(Transmit Data) : 送信用信号線
  • RXD(Receive Data) : 受信用信号線

I2C

I2C通信の配線
Fig.6. I2C通信の配線

I2C通信方式では、マスターとなる単体のデバイスとスレーブとなる複数デバイスで通信できます。
配線は信号線とクロック用の線の2本で、それぞれプルアップする必要がありますが、
ラズパイのGPIO2, 3ピンを使用する場合、内部でプルアップ抵抗が固定で接続されているため、
ユーザー側が用意する必要はありません。

機能I2C1 pin(I2C0 pin)
DataGPIO 2GPIO 0
ClockGPIO 3GPIO 1

I2C0のGPIOピンでもI2C通信が可能ですが、
全消去可能な読み取り専用メモリEEPROM (Electrically Erasable and Programmable Read Only Memory) の読み込みに使うのが一般的のようです。

SPI (CSI)

SPI通信の配線
Fig.7. SPI通信の配線

SPI通信方式では、マスターのデバイスから複数のスレーブデバイス間で通信できます。
高速な通信ができますが、出力用通信線、入力用通信線、クロック線、通信デバイス選択用の線が必要で、配線が多くなります。

機能SPI0 pinSPI1 pin
MISOGPIO 9GPIO 19
MOSIGPIO 10GPIO 20
SCLKGPIO 11GPIO 21
CE0GPIO 8GPIO 18
CE1GPIO 7GPIO 17
  • MOSI(Master Output Slave Input) : 出力用通信線
  • MISO(Master Input Slave Output) : 入力用通信線
  • SCLK(Serial Clock) : クロック線
  • CE (Chip Enable)/CS(Chip Select)/SS(Slave Select) : 通信デバイス選択用の線(スレーブデバイス数分必要)

GPIOの操作

ソフトウェア側からGPIOを操作する方法はいくつか存在します。
ここではLinuxコマンド(Shell)とプログラミング言語Pythonによる操作方法を取り上げます。

言語名称備考
方法1Shellraspi-gpioコマンド初期設定不要
方法2Shellecho/catコマンド初期設定不要、プルダウン / プルアップ設定不可
方法3ShellWiring Piライブラリ現在非推奨
方法4-1Shellpigpioライブラリ信号波形の精度高い
方法4-2Pythonpigpioライブラリ信号波形の精度高い
方法5PythonRPi.GPIOライブラリ

前準備等なしでとりあえず使いたい人は方法1のraspi-gpioコマンドを使い、
精度が必要な通信等、本格的に使用したい人は方法4のpigpioライブラリを使用するのが良いかと思います。
各操作方法は下記に記述します。

ピン配置の確認

pinoutコマンドによるピン配置の表示
Fig.8. pinoutコマンドによるピン配置の表示

ラズパイのターミナル(端末)から pinoutコマンドを入力すると、
GPIO番号とその配置(ボード番号)の確認ができます。

方法1: (Shell) raspi-gpioコマンド

raspi-gpioコマンドは、先に何かをインストールする等の前準備なく、すぐに使用できるはずです。

ピンの確認

raspi-gpio get  # 全ピンの状態表示
raspi-gpio get 21  # GPIO 21ピンの状態表示 / 入力値読み取り

raspi-gpio get <GPIO番号> で、指定したGPIO番号のピンの状態を確認できます。
入力モードに設定しているピンの場合、現在の入力値も表示されます。
複数のピンを指定するときにはraspi-gpio get 16-18,21,22のようにすればOKです。
逆にピン番号を指定しない場合は、すべてのGPIOピンが表示されます。

入力モード

raspi-gpio set 21 ip  # GPIO 21ピンを入力モードに設定
# raspi-gpio set 21 pd  # GPIO 21ピンに内部プルダウンを設定
raspi-gpio get 21  # GPIO 21ピンの入力値を読み取り

GPIOのピンに入力した値を得たいときは、使いたいGPIOピンを入力モードに設定し、
そのあとにそのピンの状態確認をすれば、読み取りできます。
内部プルダウン / プルアップ抵抗について指定したい場合は、下記のコマンドで指定ができます。

内部プルダウン / プルアップ抵抗の設定コマンド

  • raspi-gpio set <GPIO番号> pn : 内部プルダウン / プルアップ抵抗を未設定
  • raspi-gpio set <GPIO番号> pd : 内部プルダウン抵抗を設定
  • raspi-gpio set <GPIO番号> pu : 内部プルアップ抵抗を設定

出力モード

raspi-gpio set 21 op  # GPIO 21ピンを出力モードに設定
raspi-gpio set 21 dh  # High出力に設定

GPIOのピンから電圧を出力したいときには、使いたいGPIOピンを出力モードに設定し、
そのあと出力値(High状態、3.3V)を設定します。
出力をLow状態(0V)にしたいときには# raspi-gpio set 21 dlのように入力します。

出力値の切り替えコマンド

  • raspi-gpio set <GPIO番号> dh : High出力
  • raspi-gpio set <GPIO番号> dl : Low出力

内部プルダウン / プルアップ抵抗を明示的に解除しておきたいときは、
ピンの設定コマンドにpnを付け足せば、内部プルダウン / プルアップ抵抗を未設定状態にできます。

  • raspi-gpio set <GPIO番号> op pn : 出力モード設定にし、かつ内部プルダウン / プルアップを解除

方法2: (Shell) echo/catコマンド

ここでの方法は、Linuxに搭載されている仮想ファイルシステム (sysfs) を使った方法で、
Linuxコマンドのechoコマンドやcatコマンドを使って仮想ファイルにアクセスする方法となります。
echoコマンドを使ってファイルへ書き込み、catコマンドを使ってファイルから読み取ります。

こちらの方法も、事前に準備することはとくにありません。
しかし内部プルダウン / プルアップ抵抗を操作するコマンドは存在しないようです。

入力モード

echo 21 > /sys/class/gpio/export  # GPIO 21ピンをリザーブ
echo in > /sys/class/gpio/gpio21/direction  # GPIO 21ピンを入力モードに設定
cat /sys/class/gpio/gpio21/value  # GPIO 21ピンの入力値を読み取り
echo 21 > /sys/class/gpio/unexport  # GPIO 21ピンのリザーブを解除 

この方法でGPIOのピンを入力モードにして使用する手順は下記の通りになります。

  1. 使用するピンをリザーブ(予約)
  2. 入力モードに設定
  3. 入力値読み込み
  4. リザーブ(予約)解除

使用するピンをリザーブして占有することで、他のプログラム等で使われないようにします。
使用後はリザーブを解除してピンの占有を解放する必要があります。

出力モード

echo 21 > /sys/class/gpio/export  # GPIO 21ピンをリザーブ
echo out > /sys/class/gpio/gpio21/direction  # GPIO 21ピンを出力モードに設定
echo 1 > /sys/class/gpio/gpio21/value  # GPIO 21ピンの出力をHigh(3.3V)に設定
echo 21 > /sys/class/gpio/unexport  # GPIO 21ピンのリザーブを解除

大まかな手順は下記の通りになります。

  1. 使用するピンをリザーブ(予約)
  2. 出力モードに設定
  3. 出力値の設定
    – High (3.3V) のとき:echo 1 > /sys/class/gpio/gpio<GPIO番号>/value
    – Low (0V) のとき:echo 0 > /sys/class/gpio/gpio<GPIO番号>/value
  4. リザーブ(予約)解除

入力モードの時と同様に、使用するピンを事前にリザーブする必要があり、
使用後は解放する必要があります。

方法3: (Shell) WiringPiライブラリ

ここで使用するWiringPiというライブラリは、2019年から開発が停止しており、
現在この方法は非推奨となっています。

前準備

この方法を使用するには、WiringPiライブラリをインストールする必要があります。
ラズパイのOSのバージョンが旧版(Buster版)の場合はaptコマンドでインストールできますが、
現版(Bullseye版)の場合では使用できないため、wgetで直接インストールする必要があります。

  • Buster版Raspberry Pi OSの場合:
sudo apt update
sudo apt install -y wiringpi
  • Bullseye版Raspberry Pi OSの場合:
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

ピン配置確認・ピンの指定方法

WiringPiでは、デフォルトでは独自の番号でGPIOのピン位置を指定することになります(WiringPi番号)。
ピンの位置指定時にオプションをつけると、ボード番号やGPIO番号も使用できます。

ピンの指定時のオプション

  • GPIO番号:-g
  • ボード番号:-1
  • Wiring Pi番号:オプションなし

WiringPiではピン番号の確認コマンドが存在します。

  • ピン番号の確認 gpio readall

入力モード

gpio -g mode 21 in  # GPIO 21ピンを入力モードに設定
# gpio -g mode 21 down  # GPIO 21ピンに内部プルダウン抵抗を設定
gpio -g read 21  # GPIO 21ピンの入力値を読み取り

他の方法と同様に、使うピンを入力モードに設定し、入力値を読み取るコマンドを入力すれば良いです。
ここではGPIO番号を用いてピン位置の指定をしています。
必要に応じて、内部プルダウン / プルアップ抵抗を指定してください。

内部プルダウン / プルアップ抵抗の設定コマンド

gpio -g mode <GPIO番号> down : 内部プルダウン抵抗を設定
gpio -g mode <GPIO番号> up : 内部プルアップ抵抗を設定
gpio -g mode <GPIO番号> tri : 内部プルダウン / プルアップ抵抗を未設定

出力モード

gpio -g mode 21 out # GPIO 21ピンを出力モードに設定
# gpio -g mode 21 tri  # GPIO 21ピンに内部プルダウン / プルアップ抵抗を解除
gpio -g write 21 1 # GPIO 21ピンの出力をHigh(3.3V)に設定

他の方法と同様に、使用するピンを出力モードにすると、ピンからの出力電圧を制御できます。
出力値を切り替える場合は下記のコマンドを使用します。

出力値の切り替えコマンド

gpio -g write <GPIO番号> 1 : ピンの出力をHigh(3.3V) に設定
gpio -g write <GPIO番号> 0 : ピンの出力をLow(0V) に設定

方法4-1: (Shell) pigpioライブラリ

pigpioを使用すると、ラズパイのGPIOから精度の高い出力波形を生成できます。
そのためハードウェアPWM対応のピンでなくても、ジッターの少ないPWM制御が可能です。

このライブラリはLinuxコマンド (Shell) 、Python、C言語から使用できます。
ここではShellから使用する方法を取り上げます。
Pythonでの使用方法は、方法4-2に記述しています。

Shellでpigpioライブラリを使用するときにはpigsコマンドを使います。

前準備


# インストール
sudo apt update
sudo apt install -y pigpio

# デーモン起動・起動設定
sudo service pigpiod start
sudo systemctl enable pigpiod.service

pigpioライブラリを使用するためには、事前にインストールが必要です。
インストール後、デーモンを起動する必要があります。
pigpioを使おうとしたときにエラーが出た場合、デーモンの起動を忘れていないか確認してください。

入力モード

pigs m 21 r  # GPIO 21ピンを入力モードに設定
# pigs pud 21 o  # GPIO 21ピンに内部プルダウン抵抗を設定
pigs r 21  # GPIO 21ピンの入力値を読み取り

この方法でも、ピンを入力モードに切り替え、適宜内部プルダウン / プルアップ抵抗の設定をし、
読み取りを行うという流れになります。
内部プルダウン / プルアップ抵抗の設定を行うコマンドは下記の通りです。

内部プルダウン / プルアップ抵抗の設定コマンド

pigs pud <GPIO番号> d : 内部プルダウン抵抗を設定
pigs pud <GPIO番号> u : 内部プルアップ抵抗を設定
pigs pud <GPIO番号> o : 内部プルダウン / プルアップ抵抗を未設定

出力モード

pigs m 21 w  # GPIO 21ピンを出力モードに設定
# pigs pud 21 o  # GPIO 21ピンの内部プルダウン / プルアップ抵抗を解除
pigs w 21 1  # GPIO 21ピンの出力をHigh(3.3V)に設定

この方法でも、ピンを出力モードに切り替え、適宜内部プルダウン / プルアップ抵抗を解除し、
出力値を設定するという流れになります。
出力値の設定コマンドは下記の通りです。

出力値の切り替えコマンド

pigs w <GPIO番号> 1 : 出力をHigh(3.3V)に設定
pigs w <GPIO番号> 0 : 出力をLow(0V)に設定

方法4-2: (Python) pigpioライブラリ

Pythonでもpigpioライブラリを利用できます。

前準備

方法4-1に記載してある手順通りに、ライブラリのインストールおよびデーモンの起動をしておく必要があります。

入力モード

import pigpio
pi = pigpio.pi()  # GPIOに接続

pi.set_mode(21, pigpio.INPUT)  # GPIO 21ピンを入力モードに設定
# pi.set_pull_up_down(21, pigpio.PUD_DOWN)  # GPIO 21ピンに内部プルダウン抵抗を設定

result = pi.read(21)  # GPIO 21ピンの入力値を読み取り
print(result)

pi.stop()  # GPIOの解放

内部プルダウン / プルアップ抵抗の切り替えを行うには下記のコマンドを用います。

内部プルダウン / プルアップ抵抗の設定コマンド

pi.set_pull_up_down(<GPIO番号>, pigpio.PUD_DOWN) : 内部プルダウン抵抗を設定
pi.set_pull_up_down(<GPIO番号>, pigpio.PUD_UP) : 内部プルアップ抵抗を設定
pi.set_pull_up_down(<GPIO番号>, pigpio.PUD_OFF) : 内部プルダウン / プルアップ抵抗を解除

出力モード

import pigpio
pi = pigpio.pi()  # GPIOに接続

pi.set_mode(21, pigpio.OUTPUT)  # GPIO 21ピンを出力モードに設定

pi.write(21, 1)  # GPIO 21ピンの出力をHigh(3.3V)に設定

pi.stop()  # GPIOの解放

出力値の切り替えを行うには下記のコマンドを用います。

出力値の切り替えコマンド

pi.write(<GPIO番号>, 1) : 出力をHigh(3.3V)に設定
pi.write(<GPIO番号>, 0) : 出力をLow(0V)に設定

方法5: (Python) RPi.GPIOライブラリ

PythonでラズパイのGPIOを制御できるライブラリとして、RPi.GPIOもよく登場します。
こちらはpigpioほど高度な制御はできませんが、GPIOを手軽に使用できるライブラリです。

前準備

# python用のライブラリのインストール
python3 -m pip install RPi.GPIO

ラズパイの通常のOSでは、Pythonのパッケージ管理ツールpipがすでに入っているはずです。
なければaptコマンドでインストールする必要があります。
pipを使ってRPi.GPIOをインストールするときのコマンドは、sudo pip3 install RPi.GPIOではなく、
左(上)の形式のコマンドが推奨されているようです。

入力モード

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)  # ピンの指定方法をGPIO(BCM)番号に

GPIO.setup(21, GPIO.IN)  # GPIO 21ピンを入力モードに設定
# GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)  # 内部プルダウン抵抗を設定しつつ入力モードに

result = GPIO.input(21)  # GPIO 21ピンの入力値を読み取り
print(result)

GPIO.cleanup()  # GPIOの解放

GPIOピン番号の指定方法は下記の2通りあります。

  • GPIO.setmode(GPIO.BCM) : GPIO(BCM)番号
  • GPIO.setmode(GPIO.BOARD) : ボード番号

内部プルダウン / プルアップ抵抗を指定するには下記を使用します。

内部プルダウン / プルアップ抵抗の設定コマンド

GPIO.setup(SWITCH_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) : 内部プルダウン抵抗を設定
GPIO.setup(SWITCH_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) : 内部プルアップ抵抗を設定
GPIO.setup(SWITCH_PIN, GPIO.IN) : 内部プルダウン / プルアップ抵抗を未設定

またコードの最後の「GPIOの解放」を行うと全ピンの設定がリセットされ、
入力モードかつ内部プルダウン / プルアップ抵抗無効になります。
特定のピンのみを解放する場合は下記のコードを使用します。

  • GPIO.cleanup([12,13]) : GPIO 12, 13ピンを解放
  • GPIO.cleanup() : 全ピンを解放

出力モード

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)  # ピンの指定方法をGPIO(BCM)番号に

GPIO.setup(21, GPIO.OUT)  # GPIO 21ピンを出力モードに設定
GPIO.output(21, True)  # GPIO 21ピンの出力をHigh(3.3V)に設定

GPIO.cleanup()  # GPIOの解放

GPIOピンの出力を切り替えるには下記のコマンドを使用します。

出力値の切り替えコマンド

GPIO.output(<GPIO番号>, True) : 出力をHigh(3.3V)に設定
GPIO.output(<GPIO番号>, False) : 出力をLow(0V)に設定

まとめ

  • GPIOを壊さないために
    • 電流値: 1ピンあたり16mA以下、合計50mA以下にする(できれば7割程度を目安に)
    • 電圧値: 3.5V以下にする
    • 回路: スイッチ切り替え時、モード切り替え時のショートに注意する
      • プルダウン / プルアップ抵抗や電流制限抵抗が有効
  • GPIOのピン
    • 内部プルダウン / プルアップ抵抗の固定されたピンがある
    • ハードウェアPWMに対応したピンがある
    • シリアル通信(UART, I2C, SPI)用のピンがある
  • GPIOの操作
    • Shell(Linuxコマンド)やPythonが使える
    • モード切り替え、内部プルダウン / プルアップ抵抗の切り替えができる

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


PCの不定期なフリーズ、起動しない問題が解決した1つの原因

CPUの型番から性能がわかる?IntelとAMDそれぞれ解説

【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算

【作業机】メタルラックで拡張性のあるスタンディングデスクを構築

【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較

CPUの性能比較の方法は?ベンチマークの見方

ELEGOO Neptune 2Sをレビュー!2万円台3Dプリンターの実力を実際に使って評価!

【Mi Bamd 4】タイマーをすぐに起動できるようにカスタマイズ

  • プロフィール

  • Yoshiharu

  • 現在、ひよっこ光学系エンジニアをやっている一般人です。我流でプログラムをいじったりしています。備忘録、知識整理を兼ねてアウトプットをしていく予定です。

    • 【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較

      2022.11.23

      【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較


    • ELEGOO Neptune 2Sをレビュー!2万円台3Dプリンターの実力を実際に使って評価!

      2022.11.03

      ELEGOO Neptune 2Sをレビュー!2万円台3Dプリンターの実力を実際に使って評価!


    • 自作ラズパイゼロケースを3Dプリンター用にモデリング【FreeCAD】

      2022.10.13

      自作ラズパイゼロケースを3Dプリンター用にモデリング【FreeCAD】


    • 【初心者向け】FreeCADの基本的な使い方と手順の流れ

      2022.10.11

      【初心者向け】FreeCADの基本的な使い方と手順の流れ


    • 【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算

      2022.09.07

      【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算


  • アーカイブ

    • 2022年11月
    • 2022年10月
    • 2022年9月
    • 2022年8月
    • 2022年5月
    • 2022年4月
    • 2022年3月
    • 2022年1月
    • 2021年11月
    • 2021年9月
    • 2021年8月
    • 2021年7月
    • 2021年2月
    • 2021年1月
    • 2020年12月
    • 2020年10月
    • 2020年9月
    • 2020年8月
    • 2020年7月
    • 2020年3月
    • 2020年2月
    • 2020年1月
  • カテゴリー

    • Vim
    • ガジェット
    • プログラム・ソフト
    • 光学
    • 情報処理
    • 物理学・工学
    • プログラム・ソフト
    • 物理学・工学
    • ガジェット
    • 当サイトについて
    • お問い合わせ
    Y Lab Desk

    Copyright © Y Lab Desk, 2022 All Rights Reserved.