RaspberryPi2でrootなしでGPIOを操作する

はじめに

RaspberryPi2のApache上でWebからGPIOを操作する際に詰まったのでメモ
前回の方法で使ってるWiringPi2だとGPIOを利用する際に

1wiringpi2.wiringPiSetupGpio()

するとroot権が必要とのエラーが出て止まります

1wiringpi2.wiringPiSetupSys()

だとroot権なしで実行出来ますがこれだとdigitalWriteは出来ますがPWM等を制御することは出来ない様です

というわけで使うモジュールを変えました
元々入ってるRPi.GPIOで簡単にroot権なしでPWM制御出来たのでコードを載せておきます

 1import RPi.GPIO as GPIO
 2
 3PIN1 = 13
 4
 5GPIO.setmode(GPIO.BCM)
 6GPIO.setup(PIN1, GPIO.OUT)
 7servo = GPIO.PWM(PIN1, 50)
 8
 9getDuty = lambda angle: (1.0 + angle/180.0)/20.0*100.0
10
11while True:
12        i = raw_input()
13        if i == "e":
14                break
15        servo.start(getDuty(int(i)))
16
17servo.stop()
18GPIO.cleanup()

これでmod_wsgi使いつつFlaskでWebから操作出来る監視カメラもどきが出来ました
前はrootでapp.runして強引に動かしてました

もしダメだったらApacheの実行ユーザー(www-data)をgpioグループに追加するとうまくいくと思います

1$ sudo cat /etc/apache2/envvars | grep APACHE_RUN_USER
2とかして確認する
3$ sudo gpasswd -a www-data gpio
4$ sudo service apache2 restart