ラズパイのGPIOの基本・ピン配置と制御方法【Linuxコマンド、Python】
投稿日:2022年8月26日 更新日:
シングルボードコンピューターとして有名なRaspberry Pi(ラズパイ)は、
GPIO (General Purpose Input/Output) と呼ばれる
多数のピンの外部入出力端子がついているのが特徴です。
GPIOを使うことで、電子回路とプログラミングを組み合わせられるので、
ものづくりの幅が広がります。
本記事では下記のような、GPIOを使う上で最低限知っておきたい内容をまとめました。
- ラズパイを破壊しないための注意点
- ピン配置
- Linuxコマンド / ShellまたはPythonを使った制御方法
なお、本記事はRaspberry Pi 3 Model Bを基に記述していますので、
他のラズパイの場合、細かい部分で差異があるかもしれません。
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時の電位不安定
スイッチOFF状態のとき、GPIOのピンが電気的に浮いてしまい入力電圧が定まっていない場合(Fig.1, 右)、
入力値が不安定になり意図しない値を読み取る可能性があります。
これに対しては、プルダウンまたはプルアップ抵抗を接続して、一定の電位と接続することで、
スイッチON、OFFどちらの状態でも電気的に浮かなくなるため、不安定になるのを避けることができます (Fig.1, 左)。
プルダウン / プルアップ抵抗には、1k ~ 100k$\Omega$ がよく使われます。
注意点2 : スイッチOn時のショート
プルダウン / プルアップするときに抵抗なしで接続すると、スイッチOnにした瞬間ショートします (Fig.2, 右)。
これを避けるためにも、抵抗を入れてプルダウン / プルアップする必要があります。
注意点3 : モード切り替わり時のショート
GPIOピンのモードが切り替わったときについても考慮する必要があります。
とくに、ラズパイを再起動したとき(モードが初初期されたとき)に問題ないか、
意図しないところでモードを切り替えていないか、注意が必要です。
何も考えていないと、下記のようなことが起こる可能性があります。
GPIO入力モードピンに電圧入力しているとき、出力モードに切り替わった場合を想定します。
このときLow出力になっていると、入力している電源とGPIOピン間でショートすることになります (Fig.3 上)。
これを避けるためには、GPIOピンとの間に直列で抵抗(電流制限抵抗)を入れます (Fig.3, 下)。
するとGPIOピンのモードが切り替わっても、出力モードの出力 (High/Low) を切り替えてもショートしなくなります。
注意点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通信方式では、1対1のデバイスで接続します。
配線は通信用と受信用の信号線の2本になり、クロック用の線は存在しません。
機能 | pin |
---|---|
TXD | GPIO 2 |
RXD | GPIO 3 |
- TXD(Transmit Data) : 送信用信号線
- RXD(Receive Data) : 受信用信号線
I2C
I2C通信方式では、マスターとなる単体のデバイスとスレーブとなる複数デバイスで通信できます。
配線は信号線とクロック用の線の2本で、それぞれプルアップする必要がありますが、
ラズパイのGPIO2, 3ピンを使用する場合、内部でプルアップ抵抗が固定で接続されているため、
ユーザー側が用意する必要はありません。
機能 | I2C1 pin | (I2C0 pin) |
---|---|---|
Data | GPIO 2 | GPIO 0 |
Clock | GPIO 3 | GPIO 1 |
I2C0のGPIOピンでもI2C通信が可能ですが、
全消去可能な読み取り専用メモリEEPROM (Electrically Erasable and Programmable Read Only Memory) の読み込みに使うのが一般的のようです。
SPI (CSI)
SPI通信方式では、マスターのデバイスから複数のスレーブデバイス間で通信できます。
高速な通信ができますが、出力用通信線、入力用通信線、クロック線、通信デバイス選択用の線が必要で、配線が多くなります。
機能 | SPI0 pin | SPI1 pin |
---|---|---|
MISO | GPIO 9 | GPIO 19 |
MOSI | GPIO 10 | GPIO 20 |
SCLK | GPIO 11 | GPIO 21 |
CE0 | GPIO 8 | GPIO 18 |
CE1 | GPIO 7 | GPIO 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による操作方法を取り上げます。
言語 | 名称 | 備考 | |
---|---|---|---|
方法1 | Shell | raspi-gpioコマンド | 初期設定不要 |
方法2 | Shell | echo/catコマンド | 初期設定不要、プルダウン / プルアップ設定不可 |
方法3 | Shell | Wiring Piライブラリ | 現在非推奨 |
方法4-1 | Shell | pigpioライブラリ | 信号波形の精度高い |
方法4-2 | Python | pigpioライブラリ | 信号波形の精度高い |
方法5 | Python | RPi.GPIOライブラリ |
前準備等なしでとりあえず使いたい人は方法1のraspi-gpioコマンドを使い、
精度が必要な通信等、本格的に使用したい人は方法4のpigpioライブラリを使用するのが良いかと思います。
各操作方法は下記に記述します。
ピン配置の確認
ラズパイのターミナル(端末)から 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のピンを入力モードにして使用する手順は下記の通りになります。
- 使用するピンをリザーブ(予約)
- 入力モードに設定
- 入力値読み込み
- リザーブ(予約)解除
使用するピンをリザーブして占有することで、他のプログラム等で使われないようにします。
使用後はリザーブを解除してピンの占有を解放する必要があります。
出力モード
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ピンのリザーブを解除
大まかな手順は下記の通りになります。
- 使用するピンをリザーブ(予約)
- 出力モードに設定
- 出力値の設定
– High (3.3V) のとき:echo 1 > /sys/class/gpio/gpio<GPIO番号>/value
– Low (0V) のとき:echo 0 > /sys/class/gpio/gpio<GPIO番号>/value
- リザーブ(予約)解除
入力モードの時と同様に、使用するピンを事前にリザーブする必要があり、
使用後は解放する必要があります。
方法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が使える
- モード切り替え、内部プルダウン / プルアップ抵抗の切り替えができる