Raspberry PiでPythonからGPIOを使用する

見出しのタスクを研究することで得た経験を共有します。 この記事では、Raspberry Pi GPIOポートにアクセスするPythonプログラムで使用できる2つの作業オプションについて説明します。



Raspberry PiのGPIOポートは次のとおりです。



画像







GPIOを操作するためのオプションの1つは、 Sysfsインターフェイスです。 Sysfs GPIOの詳細については、 こちらをご覧ください 。 この場合、ファイルアクセスおよび書き込み操作を使用してGPIOポートにアクセスします。 特定の出力を使用するには、それを予約し、入力または出力の方向を設定する必要があります。 ポートでの作業が終了したら、他のプロセスが使用できるようにリリースする必要があります。



ポート予約(XX-必要なポートの番号):



$ echo XX > /sys/class/gpio/export
      
      







バックアップが正常に/sys/class/gpio/gpioXX/



すると、アドレス/sys/class/gpio/gpioXX/



新しいフォルダーが表示されます。 方向の設定は次のとおりです。



 $ echo "out" > /sys/class/gpio/gpioXX/direction
      
      







または:



 $ echo "in" > /sys/class/gpio/gpioXX/direction
      
      







出力用に構成されたポートの高レベルと低レベルの設定は次のとおりです。



 $ echo 1 > /sys/class/gpio/gpioXX/value $ echo 0 > /sys/class/gpio/gpioXX/value
      
      







入力用に構成されたポートの状態の判別は、次のように行われます。



 $ cat /sys/class/gpio/gpioXX/value
      
      







使用終了後にポートを解放します。



 $ echo XX > /sys/class/gpio/unexport
      
      







Sysfsインターフェースを介したGPIOの操作を簡単にするために、2つのユーティリティに出会いました。 それらの1つはWiringPi GPIOユーティリティで、もう1つはquick2wire-gpio-adminです。



これらのユーティリティによって解決される主なタスクは、権限のないユーザーに代わってGPIOで作業する機能を提供することです。 同時に、 WiringPi GPIOユーティリティはより機能的です。



GPIOを使用するために、 RPIOパッケージを作成しました(執筆時点では、後者はバージョン0.10.0でした)。 このパッケージはGPIOポートで直接動作し、特別なデバイス/dev/mem



介してBCM2708レジスタにアクセスします。 RPIOとは:



Raspberry Pi用の高度なGPIO。 PWM、GPIOインターラップ、TCPソケット割り込み、コマンドラインツールなどでRPi.GPIOを拡張




RPIOは、別のモジュールRPi.GPIOの改良および拡張バージョンとして位置付けられています。 RPIOに直接記載されているドキュメントでは、RPi.GPIOで利用できない機能についてのみ詳細に説明しているため、これらのモジュールに共通する機能の説明については、 こちらから入手できるRPi.GPIOのドキュメントを参照してください



次のコマンドでパッケージをインストールします。



 $ sudo pip install RPIO
      
      







Pythonモジュールに加えて、rpio-cursesとrpioの2つのプログラムがインストールされます。 たとえば、GPIOの現在のモードと状態を取得し、必要に応じて変更することができます。 これは、rpio-cursesの使用方法です。



画像



したがって、システムに関する情報を取得できます。



 $ rpio --sysinfo 000f: Model B, Revision 2.0, RAM: 512 MB, Maker: Qisda
      
      







RPIOを使用したPythonプログラムの例:



 import RPIO import time NRF_CE = 24 # set up output channel with an initial state RPIO.setup(NRF_CE, RPIO.OUT, initial=RPIO.LOW) for i in range(10): RPIO.output(NRF_CE, 1) time.sleep(1) RPIO.output(NRF_CE, 0) time.sleep(1) # reset every channel that has been set up by this program, # and unexport interrupt gpio interfaces RPIO.cleanup()
      
      






All Articles