📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 56行目: | 56行目: | ||
<br> | <br> | ||
import RPi.GPIO | import RPi.GPIO | ||
<br><br> | |||
== GPIOのピン番号の指定 == | |||
まず、プログラムの冒頭で以下に示すようにモジュールをインポートする。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
import RPi.GPIO as GPIO | |||
</syntaxhighlight> | |||
<br> | |||
GPIOにはピン番号の指定方法として2つのモードがある。<br> | |||
多くの開発者はBCMモードを使用することが多い。<br> | |||
* BCMモード | |||
*: GPIO番号 (例: GPIO18) を使用する。 | |||
* BOARDモード | |||
*: 物理的なピン番号を使用する。 | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
GPIO.setmode(GPIO.BCM) # BCMモードを使用 | |||
# または | |||
GPIO.setmode(GPIO.BOARD) # BOARDモードを使用 | |||
</syntaxhighlight> | |||
<br><br> | |||
== 入出力ピンの設定 == | |||
GPIOピンの入力 / 出力を明確に指定する必要がある。<br> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
# 出力ピンの設定例 (LED接続等) | |||
GPIO.setup(18, GPIO.OUT) | |||
# 入力ピンの設定例 (スイッチ接続等) | |||
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP) | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
// 使用例 (LEDのON / OFF 制御) | |||
# LEDを点灯 | |||
GPIO.output(18, GPIO.HIGH) | |||
# LEDを消灯 | |||
GPIO.output(18, GPIO.LOW) | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
// 使用例 (入力の読み取り) | |||
# スイッチの状態を読み取る | |||
switch_state = GPIO.input(23) | |||
</syntaxhighlight> | |||
<br><br> | |||
== イベント検出 (割り込み制御) == | |||
イベント検出 (割り込み制御) を使用することにより、特定の物理スイッチが押下された場合等の状態変化を検知して、特定の関数を実行できる。<br> | |||
<syntaxhighlight lang="python"> | |||
def button_pressed(channel): | |||
print(f"ボタンが押されました!ピン:{channel}") | |||
GPIO.add_event_detect(23, GPIO.FALLING, callback=button_pressed, bouncetime=200) | |||
</syntaxhighlight> | |||
<br><br> | |||
== GPIOのクリーンアップ == | |||
以下に示す理由から、プログラム終了時には、必ずGPIOのクリーンアップを行うことが推奨されている。<br> | |||
特に、電子工作やハードウェア制御を行う場合は、安全性の観点からも非常に重要な処理である。<br> | |||
<br> | |||
* 安全性の確保 | |||
*: クリーンアップを行わない場合、GPIOピンが前回の状態を保持したままになる可能性がある。 | |||
*: これは接続されている電子部品に予期せぬ電流が流れ続けることを意味しており、部品の損傷やショートの原因となりかねない。 | |||
*: 特に、LEDやモータ等のアクティブな部品が接続されている場合、この問題は重要である。 | |||
*: <br> | |||
* メモリ・リソースの解放 | |||
*: GPIOの設定はシステムメモリ内に保持される。 | |||
*: クリーンアップを行わない場合、これらの設定が不要になった後もメモリを占有し続けることになる。 | |||
*: 長時間稼働するシステムや複数のプログラムを実行する環境では、このメモリの効率的な利用が重要である。 | |||
*: <br. | |||
* 次回起動時の問題回避 | |||
*: クリーンアップを行わずにプログラムを終了した場合、次回のプログラムを実行した時に「このピンは既に使用されている」というようなエラーが発生する可能性がある。 | |||
*: これは、特に開発時のデバッグを困難にする要因となる。 | |||
*: <br> | |||
* 割り込み処理の適切な終了 | |||
*: イベント検出等の割り込み処理を使用している場合、クリーンアップによってこれらの処理が適切に終了される。 | |||
*: これにより、システムリソースの無駄な消費を防ぎ、次回の実行時に問題が発生することを防ぐことができる。 | |||
*: <br> | |||
* システムの安定性維持 | |||
*: Raspberry Piは組み込みシステムとして使用されることが多く、長期的な安定性が求められる。 | |||
*: 適切なクリーンアップを行うことにより、システム全体の安定性が向上して、予期せぬ動作を防ぐことができる。 | |||
<br> | |||
<syntaxhighlight lang="python"> | |||
GPIO.cleanup() | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||