ノートパソコンやデスクトップで Raspberry Pi の GPIO プロジェクトを開発するときは、RPi.GPIO を小さなエミュレーターに置き換えると便利です。これにより、実際の Pi でコードを実行する前に、インポートパス、制御フロー、出力ロジックをテストできます。
方法 1: シンプルなローカルスタブを使う
プロジェクトディレクトリに testRPiGPIO.py という名前のファイルを作成し、テスト中は RPi.GPIO の代わりにそれをインポートします。
import testRPiGPIO as GPIO
最小限のスタブは次のようになります。
#!/usr/bin/python
BOARD = "board"
BCM = "bcm"
OUT = "out"
IN = "in"
HIGH = 1
LOW = 0
def setwarnings(mode):
print(mode)
def output(pin, value):
print(pin, ":", value)
def setmode(mode):
print(mode)
def setup(pin, value):
print(pin, ":", value)
def cleanup():
print("clean-up")
# End
この方法は、setmode()、setwarnings()、setup()、output()、cleanup() だけを呼び出す非常に単純なスクリプトには十分です。入力ピンを読み取る、プルアップまたはプルダウン定数を使う、PWM やイベント検出に依存する、といったプログラムの場合は、スタブを拡張するか、より機能の多いエミュレーターを使ってください。
方法 2: GPIO エミュレーターパッケージを使う
Pi GPIO Emulator をダウンロードし、プロジェクトフォルダーに展開します。その後、次のようにインポートします。
from EmulatorGUI import GPIO
pip でシミュレーターをインストールしたい場合は、次を使います。
pip install GPIOSimulator
その後、プロジェクトでは次のようにインポートします。
from RPiSim.GPIO import GPIO
パッケージ名やインポートパスは時間とともに変わることがあるため、pip show GPIOSimulator でインストール済みパッケージをローカルで確認し、インポートに失敗する場合はパッケージのドキュメントを確認してください。
対応しているメソッドには次のものがあります。
GPIO.setmode()GPIO.setwarnings()GPIO.setup()GPIO.input()GPIO.output()
例
次の例ではエミュレーターのインポートを使用しています。実際の Raspberry Pi では、これを import RPi.GPIO as GPIO に置き換えてください。
from EmulatorGUI import GPIO
# import RPi.GPIO as GPIO
import time
import traceback
def Main():
try:
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(4, GPIO.OUT)
GPIO.setup(17, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(18, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(21, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(26, GPIO.IN)
while True:
if GPIO.input(23) == False:
GPIO.output(4, GPIO.HIGH)
GPIO.output(17, GPIO.HIGH)
time.sleep(1)
if GPIO.input(15) == True:
GPIO.output(18, GPIO.HIGH)
GPIO.output(21, GPIO.HIGH)
time.sleep(1)
if GPIO.input(24) == True:
GPIO.output(18, GPIO.LOW)
GPIO.output(21, GPIO.LOW)
time.sleep(1)
if GPIO.input(26) == True:
GPIO.output(4, GPIO.LOW)
GPIO.output(17, GPIO.LOW)
time.sleep(1)
except Exception as ex:
traceback.print_exc()
finally:
GPIO.cleanup() # This ensures a clean exit.
Main()
実機でテストする場合は、Raspberry Pi 上で公式の GPIO ライブラリに戻します。
import RPi.GPIO as GPIO
まずエミュレーター版を実行して制御ロジックを確認し、その後 Pi 上でハードウェア版を実行して、ピン番号、配線、プルアップまたはプルダウンの挙動、電圧出力を検証してください。
