1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WindowsでのRPi.GPIOを使った開発

Last updated at Posted at 2023-11-26

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()

これだけでコードのサジェスチョンも使えるようになる.
スクリーンショット 2023-11-27 041700.png

また,実行時に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

とでも書いておけば完ぺきではなかろうか

参考文献

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?