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