RPi.GPIO
ラズパイのGPIOを利用するPythonのライブラリ.ラズパイでGPIOを操作するPythonコードは半分以上はこれを利用している気がする.
Chat-GPTにLチカのコードを書かせても以下のプログラムが出てくるのでこれが一般的だと思われる.ラズパイでGPIOを利用したことがある人は一度は見たことがあるはず.
from RPi import GPIO
import time
# ピン番号の設定
led_pin = 18
# GPIOの初期化
GPIO.setmode(GPIO.BCM)
GPIO.setup(led_pin, GPIO.OUT)
# Lチカの実行
try:
while True:
GPIO.output(led_pin, GPIO.HIGH)
time.sleep(1)
GPIO.output(led_pin, GPIO.LOW)
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
ただ,RPi.GPIOはWindowsにはインストールできないので
- コードがWindows上で実行できない(GPIO以外のバグも探すのが困難)
- ライブラリがPC上にないのでサジェスチョンも使えない
などの開発を阻害する問題が発生する.
ラズパイ上にファイルサーバを走らせて,VSコードでラズパイ上のpythonをインタープリターとして選択するという裏技はあったがラズパイの電源を入れて接続した状態じゃないと使えないのでこれもめんどくさかった.
fake_rpi
WindowsでRPi.GPIOみたいにググってもいい解決法が出てこないので半ばあきらめていたが,Windowsでも動作確認までできるライブラリがひそかに作られていることを偶然発見.それがfake_rpi
.自作もできはするがめんどくさい何とも痒い所に手が届くライブラリではないだろうか.
pipでインストールするだけで使えるので大変便利
pip install fake_rpi
使い方も非常に簡単でRPi
の前にfake_rpi
を付けるのみでOK.
(ドキュメントでは名前空間の置き換えをするようになっているがimport文にちょっと足すほうがシンプルでわかりやすいような気がしたのでこの方法で書いている.)
- from RPi import GPIO
+ from fake_rpi.RPi import GPIO
import time
# ピン番号の設定
led_pin = 18
# GPIOの初期化
GPIO.setmode(GPIO.BCM)
GPIO.setup(led_pin, GPIO.OUT)
# Lチカの実行
try:
while True:
GPIO.output(led_pin, GPIO.HIGH)
time.sleep(1)
GPIO.output(led_pin, GPIO.LOW)
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
また,実行時にGPIO操作のlogまで出してくれる.なんと便利なこと
fake_rpi.RPi._GPIO.setmode(11,)
fake_rpi.RPi._GPIO.setup(18, 0)
fake_rpi.RPi._GPIO.output(18, 1)
fake_rpi.RPi._GPIO.output(18, 0)
fake_rpi.RPi._GPIO.output(18, 1)
fake_rpi.RPi._GPIO.output(18, 0)
fake_rpi.RPi._GPIO.cleanup()
ちなみにこのログが不要であれば
from fake_rpi import toggle_print
toggle_print(False)
でなくすことができる
最後に
このライブラリを開発した方には大変感謝するとともにもっと普及してほしい...(もう少しで自作してしまうところだった.)
RPi.GPIO以外にsmbusなども実装されているようなので詳しくはドキュメントを参考に
実用上は
try:
import RPi.GPIO as GPIO
except ImportError:
from fake_rpi.RPi import GPIO
とでも書いておけば完ぺきではなかろうか
参考文献