6:59 pm Raspberry Pi, お買い物
raspberry pi で何かしようと ブレッドボード買ってみた。
PiScreen がついていて使わない Pin の GND, GPIO4, GPIO18, GPIO27, GPIO23 が表にでてるのでとりあえずそれで遊ぶ。
gpio ってコマンド使うらしい。
[code]
pi@raspberrypi ~ $ gpio
Usage: gpio -v
gpio -h
gpio [-g|-1] [-x extension:params] …
gpio [-p] <read/write/wb> …
gpio <read/write/aread/awritewb/pwm/clock/mode> …
gpio readall/reset
gpio unexportall/exports
gpio export/edge/unexport …
gpio wfi <pin> <mode>
gpio drive <group> <value>
gpio pwm-bal/pwm-ms
gpio pwmr <range>
gpio pwmc <divider>
gpio load spi/i2c
gpio i2cd/i2cdetect
gpio gbr <channel>
gpio gbw <channel> <value>
[/code]
ちゃんとインストールされてた。
出力にモードを設定する。
[code]
gpio -g mode 4 out
gpio -g mode 18 out
gpio -g mode 27 out
gpio -g mode 23 out
[/code]
全部点け!
[code]
gpio -g write 4 1
gpio -g write 18 1
gpio -g write 27 1
gpio -g write 23 1
[/code]
中の二つ消えろ!
[code]
gpio -g write 4 1
gpio -g write 18 0
gpio -g write 27 0
gpio -g write 23 1
[/code]
プログラムにするか…初めて Python 使うぞ。
Raspberry Pi Learning Resourcesを参考にする。
[code]
import RPi.GPIO as GPIO
import time
led = 23
GPIO.setmode(GPIO.BOARD)
GPIO.setup(led, GPIO.OUT)
GPIO.output(led, 1)
time.sleep(5)
GPIO.output(led, 0)
GPIO.cleanup()
[/code]
書いて led_test.py で保存して実行してみる。
[code]
pi@raspberrypi ~ $ python led_test.py
Traceback (most recent call last):
File &quot;led_test.py&quot;, line 8, in &lt;module&gt;
GPIO.setup(led, GPIO.OUT)
RuntimeError: No access to /dev/mem. Try running as root!
[/code]
怒られた。pi さんは権限がなくてアクセスできないらしい。
ならば
[code]
pi@raspberrypi ~ $ sudo python led_test.py
led_test.py:8: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(led, GPIO.OUT)
pi@raspberrypi ~/python $ sudo python led_test.py
[/code]
また怒られた。既に使われてるって….うん、確かにさっき使った。
[code]
pi@raspberrypi ~ $ gpio unexportall
[/code]
でいいのかな。
で、エラーはでなくなったけど点かないぞ。
なら 27 は?と思ったら
[code]
pi@raspberrypi ~/ $ sudo python led_test.py
Traceback (most recent call last):
File &quot;led_test.py&quot;, line 8, in &lt;module&gt;
GPIO.setup(led, GPIO.OUT)
ValueError: The channel sent is invalid on a Raspberry Pi
[/code]
なんてエラーが出た。
番号なにか違うっぽい。
gpio コマンドは gpio 番号を指定するけど、Python では Pin 番号を指定するようです。
なので、GPIO4 なら 7 を、GPIO18 なら 12 を、GPIO27 なら 13 を, GPIO23 なら 16 を指定すればいいようです。
点くことが確認できたので…
[code]
import RPi.GPIO as GPIO
import random
import time
GPIO.setmode(GPIO.BOARD)
leds = [7,12,13,16]
onff = [0,0,0,0]
for led in leds:
GPIO.setup(led, GPIO.OUT)
for i in range (1,30):
led = int(random.random()*16)
j = 0
if led & 2**j:
onff[j]=1-onff[j]
GPIO.output(leds[j], onff[j])
j = 1
if led & 2**j:
onff[j]=1-onff[j]
GPIO.output(leds[j], onff[j])
j = 2
if led & 2**j:
onff[j]=1-onff[j]
GPIO.output(leds[j], onff[j])
j = 3
if led & 2**j:
onff[j]=1-onff[j]
GPIO.output(leds[j], onff[j])
time.sleep(random.uniform(1, 2))
GPIO.cleanup()
[/code]
すぎちゃったけど、ちょっとクリスマスっぽく。